Tải bản đầy đủ (.doc) (124 trang)

Đồ án điều khiển thiết bị từ xa bằng điện thoại di động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.21 MB, 124 trang )

Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

CHƯƠNG DẪN NHẬP
I. Đặt vấn đề:
Ngày nay với sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ
thống điều khiển dần được tự động hóa.Với các kỹ thuật tiên tiến như vi xử lý,
vi mạch số…được ứng dụng vào lĩnh vực điều khiển, thì các hệ thống điều
khiển cơ khí thô sơ, với tốc độ xử lý chậm chạm ít chính xác được thay thế
bằng các hệ thống điều khiển tự động khả trình có khả năng xử lý nhanh và
chính xác.
Sau thời gian học tập môn vi xử lý, với sự chỉ dẫn tận tình của Thầy, Cô.
Được sự đồng ý của khoa Điện Tử - Tin Học Trường Cao Đẳng Kỹ Thuật Cao
Thắng ,nhằm ứng dụng những kiến thức đã học vào thực tế qua đồ án tốt
nghiệp của mình, em quyết định làm đề tài “ HỆ THỐNG ĐIỀU KHIỂN VÀ
GIÁM SÁT THIẾT BỊ -NGÔI NHÀ THÔNG MINH”.
II. Giới hạn đề tài:
Với thời gian gần năm tuần thực hiện đề tài cũng như trình độ chuyên
môn có hạn, em đã cố gắng hết sức để hoàn thành đồ án này nhưng chỉ giải
quyết được những vấn đề sau:
 Hệ Thống Cửa Tự Động và khóa mã.
 Hệ thống đo và xử lý nhiệt độ trong nhà
 Hệ thống điều khiển thiết bị trong nhà .
 Hệ thống an ninh chống trộm và camera quan sát.
 Giao diện điều khiển hệ thống ngôi nhà trên máy tính.
III. Mục đích nghiên cứu :
Mục đích trước hết khi thực hiện đề tài này là để hoàn tất chương trình
môn học để đủ điều kiện ra trường. Cụ thể khi nghiên cứu đề tài là em muốn
phát huy những thành quả ứng dụng của vi điều khiển vào mạch thực tế,cũng
như đem những gì học được để làm ra những ứng dụng có ích cho xã hội. Nó


còn là tập tài liệu tham khảo cho các bạn sinh viên khóa sau.
Ngoài ra quá trình thực hiện đề tài là một cơ hội để chúng em tự kiểm tra
lại những kiến thức đã học ở trường. Đồng thời phát huy tính sáng tạo, khả
năng giải những vấn đề do nhu cầu đặt ra,từ đó có thể đưa những ứng dụng làm
ra vào trong thực tế.
IV.Đối tượng nghiên cứu
-Tìm hiểu về vi xử lý PIC16F877A
- Tìm hiểu phương pháp lập trình CCS
- Tìm hiểu về cảm biến nhiệt độ LM35

SVTH: Nguyễn Văn Quý

Trang 5


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

- Các phương án điều khiển và xử lý mã khóa cửa cho hệ thống cửa tự
động.
-Truyền dữ liệu giữa máy tính và pic16f877a theo chuẩn RS232.
-Cảm biến chống trộm và dùng webcam quan sát hiển thị trên giao diện
visual basic 6.0.
-Cách truyền dữ liệu thông qua module RF.

SVTH: Nguyễn Văn Quý

Trang 6



Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

PHẦN I:
LÝ THUYẾT
MỘT SỐ LINH KIỆN SỬ DỤNG TRONG MẠCH:









I : VI XỬ LÝ PIC16F877A.
II :MODULE LCD.
III : CẢM BIẾN HỒNG NGOẠI.
IV : IC CẢM BIẾN NHIỆT LM35.
V : MODULE RF APC220-43.
VI: MODULE CẢM BIẾN PIR.
VII.GIỚI THIỆU VỀ PHẦN MỀM CCS.

I : VI XỬ LÝ PIC16F877A :
1
2I.1 Sơ lược về vi điều khiển PIC16F877A:
PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng,
40 chân, bộ nhớ đủ cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát

của PIC 16F877A như sau:
0 - 8 K Flash ROM.
1 - 368 Bytes RAM.
2 - 256 Bytes EEPROM.
3 - 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập.
4 - 2 bộ định thời 8 bits (Timer 0 và Timer 2).
5 - Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm
năng lượng (SLEEP MODE) với nguồn xung Clock ngoài.
6 - 2 bô CCP( Capture / Compare/ PWM).
7 - 1 bộ biến đổi AD 10 bits, 8 ngõ vào.
8 - 2 bộ so sánh tương tự (Compartor).
9 - 1 bộ định thời giám sát (WatchDog Timer).
10 - Một cổng song song 8 bits với các tín hiệu điều khiển.
11 - Một cổng nối tiếp.
12 - 15 nguồn ngắt.
13 - Có chế độ tiết kiệm năng lượng.
14 - Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial
Programming)
15 - Được chế tạo bằng công nghệ CMOS
16 - 35 tập lệnh có độ dài 14 bits.
17 - Tần số hoạt động tối đa 20MHz
18
SVTH: Nguyễn Văn Quý

Trang 7


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng


19
20
21 Sơ lược chân PIC 16f877A.

SVTH: Nguyễn Văn Quý

Trang 8


Đồ Án Tốt Nghiệp Khóa 2007-2010

SVTH: Nguyễn Văn Quý

GVHD: Thầy Nguyễn Ngọc Tùng

Trang 9


Đồ Án Tốt Nghiệp Khóa 2007-2010

SVTH: Nguyễn Văn Quý

GVHD: Thầy Nguyễn Ngọc Tùng

Trang 10


Đồ Án Tốt Nghiệp Khóa 2007-2010


GVHD: Thầy Nguyễn Ngọc Tùng

PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức năng khác
nhau.Trong đó có một số chân đa công dụng: mỗi chân có thể hoạt động như một
đường xuất nhập hoặc là một chân chức năng đặc biệt dùng để giao tiếp với các
thiết bị ngoại vi.

SVTH: Nguyễn Văn Quý

Trang 11


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Sơ đồ Khối PIC

SVTH: Nguyễn Văn Quý

Trang 12


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

I.2 Một số điểm đặc biệt của CPU:
1.3.1 Dao động:
PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:


Trong các chế độ LP, XT và HS
chúng ta sử dụng thạch anh dao động
nối vào các chân OSC1 và OSC2 để
tạo dao động.

Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:
Lưu ý: Tụ có giá trị lớn sẽ tăng
tính ổn định của dao động nhưng
cũng làm tăng thời gian khởi
động.
Chế độ dao động RC được sử
dụng như một giải pháp tiết kiệm
trong các ứng dụng không cần sự
chính xác về thời gian.

* Cách tính chu kì máy:
Ví dụ ta sử dụng thạch anh 10Mhz. Khi đó:
Tần số dao động của thạch anh là Fosc = 10Mhz
→ChukỳdaođộngcủathạchanhlàTosc=1/Tosc=1/10*106 (s)

SVTH: Nguyễn Văn Quý

Trang 13


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng


Chu kỳ máy:
T_instruction = 4*Tosc = 4/10*106(s) = 0.4 µs = 400 ns
1.3.2 Reset:
PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau như:

I.3 : MCRL
PIC16F877A có một bộ lọc nhiễu ở phần Bộ lọc nhiễu này sẽ phát hiện và bỏ
qua các tín hiệu nhiễu.
Ngõ vào trên chân 4 của PIC16F877A. Khi đưa chân này xuống thấp thì các
thanh ghi bên trong VĐK sẽ được tải những giá trị thích hợp để khởi động lại hệ
thống.
(Lưu ý: Reset do WDT không làm chân xuống mức thấp).

SVTH: Nguyễn Văn Quý

Trang 14


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

I.4 Interrupts:
PIC16F877A có nhiều nguồn ngắt khác nhau. Đây là một số ngắt tiêu biểu :
1- Ngắt ngoài xảy ra trên chân INT.
2- Ngắt do Timer0.
3- Ngắt do Timer1.
4- Ngắt do Timer2.
5- Ngắt do thay đổi trạng thái trên các chân PortB.
6- Ngắt so sánh điện thế.

7- Ngắt do Port song song.
8- Ngắt USART.
9- Ngắt nhận dữ liệu.
10- Ngắt truyền dữ liệu .
11- Ngắt chuyển đổi ADC.
12- Ngắt màn hình LCD.
13- Ngắt hoàn tất ghi EEPROM.
14- Ngắt module CCP.
15- Ngắt Module SSP.
* Các thanh ghi chức năng ngắt: INTCON, PIE1, PIR1, PIE2, PIR2 (các
thanh ghi này sẽ được nghiên cứu ở các phần sau).

SVTH: Nguyễn Văn Quý

Trang 15


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

I.5 Chế độ nguồn thấp Sleep (Power down Mode) :
Đây là chế độ hoạt động của VĐK khi lệnh sleep được thực thi. Khi đó nếu
được cho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục
hoạt động bit PD (STATUS <3>) được reset về không, bit TO được set, oscillator
ngưng hoạt động và các PORT giữ nguyên trạng thái như trước khi lệnh sleep
được thực thi.
Do khi chế độ sleep dòng cung cấp cho VĐK là rất nhỏ nên ta cần thực hiện
các bước sau trước khi VĐK thực thi lệnh sleep.
1• Đưa tất cả các chân về trạng thái V DD hoặc VSS.

2• Cần đảm bảo rằng không có mạch ngoại vi nào được điều khiển bởi
dòng điện của VĐK vì dòng điện nhỏ không đủ khả năng cung cấp
cho các mạch ngoại vi hoạt động.
3• Tạm ngưng hoạt động của khối A/D và không cho phép các xung clock
bên ngoài tác dụng vào VĐK.

Để
ý chức năng điện trở kéo lên của PORTB.
4
5• Pin phải ở mức logic cao.
I.6 Bộ định thời giám sát (Watch Dog Timer -WDT):
Giả sử bạn viết một chương trình, bạn mong đợi chương trình này sẽ chạy
nếu không có gì trục trặc xảy ra thì nó sẽ không bao giờ dừng lại, như vậy bạn
phải làm một vòng lặp để khi chương trình chạy đến điểm cuối thì nó lại quay trở
về điểm bắt đầu. Nhưng mà hãy xem một trường hợp: Giả sử chương trình kiểm
tra một chân input, nếu nó lên mức cao thì con Pic sẽ tiếp tục kiểm tra một chân
input thứ hai có lên mức cao hay không, nếu chân input thứ hai không lên mức
cao, con Pic sẽ ngồi đó chờ và nó sẽ chỉ thoát ra khỏi chỗ ngồi của nó nếu chân
input thứ hai lên mức cao.
Bây giờ hãy xem một trường hợp khác, giả sử như bạn viết một chương trình,
bạn compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từng bước,
từng bước một trên máy tính, bằng MPLAB chẳng hạn, có vẻ như mọi chuyện đều
tốt, bạn đem nạp vào con Pic. Sau một thời gian chạy thử, con Pic thình lình bị kẹt
vào nơi nào đó trong chương trình mà không thể thoát ra được trạng thái hiện tại.
Điều gì là cần thiết để giải quyết hai trường hợp trên, reset lại hay vẫn để cho nó bị
kẹt không thoát ra được, đó là mục đích của mạch Watchdog.
Mạch Watchdog thì không phải là mới mẽ gì, có rất nhiều microprocessors và
microcontrollers đã có mạch Watchdog, nhưng mà nó làm việc ra sao ?
Bên trong con Pic có một mạch RC, mạch này cung cấp 1 xung Clock độc
lập với bất kỳ xung Clock nào cung cấp cho Pic. Khi Watchdog Timer (viết tắt là

WDT) được cho phép (enabled), nó sẽ đếm bắt đầu từ 00 và tăng lên 1 cho đến
FFh, khi nó tăng từ FFh đến 00 ( FFh+1) thì con Pic sẽ bị Reset bất kể đang làm
gì, chỉ có 1 cách là ngăn không cho WDT đếm tới 00.

SVTH: Nguyễn Văn Quý

Trang 16


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Khi con Pic bị kẹt không thể thoát ra khỏi tình trạng hiện tại thì WDT vẫn
tiếp tục đếm mà không bị bất kỳ điều gì ngăn cấm nó đếm tới FF và đến FF+1, vì
vậy nó sẽ reset con Pic làm cho chương trình phải khởi động lại từ đầu.
Để sử dụng WDT chúng ta cần làm 3 việc.
1• Thứ nhất, cần thời gian bao lâu để reset WDT ?
2• Thứ hai, làm sao xoá WDT ?
3• Cuối cùng, chúng ta phải nói cho con Pic biết chương trình cho phép WDT hoạt
độn

I.7 Tổ
chức
bộ
nhớ:

PIC16F877A có tất cả 3 khối bộ nhớ riêng biệt bao gồm: Bộ nhớ chương
trình, bộ nhớ dữ liệu và bộ nhớ EEPROM.
I.7.1 Bộ nhớ chương trình:

PIC16F877A có bộ đếm chương trình dài 13 bits có thể định địa chỉ cho
khoảng không gian nhớ 8K x 14bits. Không gian bộ nhớ này được chia làm 8
trang, có địa chỉ từ 0005h đến 1FFFh.
Mọi sự truy cập ngoài vùng không gian nhớ này sẽ không có tác dụng.
Ngoài ra, bộ nhớ chương trình còn bao gồm một ngăn xếp (Stack) 8 mức.
Vector Reset được đặt tại địa chỉ 0000h và vector ngắt được đặt tại địa chỉ 0004h.

SVTH: Nguyễn Văn Quý

Trang 17


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

I.7.2 Bộ nhớ dữ liệu:
Bản đồ cấu trúc PIC 16F877A

SVTH: Nguyễn Văn Quý

Trang 18


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Bộ nhớ dữ liệu bao gồm 4 Bank: Bank 0, Bank1, Bank2 và Bank3. Mỗi bank
có dung lượng 128 Bytes, bao gồm vùng Ram đa mục đích (GPR) và vùng thanh

ghi chức năng đặc biệt (SFR).
Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS là
RP0(Status<5>) và RP1(Status<6>).
I.7.2.1 Vùng Ram đa mục đích:
Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trực
tiếp hoặc gián tiếp thông qua thanh ghi FSR. Vùng RAM đa mục đích được phân
phối ở các Bank như sau:
1- Bank 0: 96 Bytes từ địa chỉ 20h đến địa chỉ 7Fh.
2- Bank 1: 80 Bytes từ địa chỉ A0h đến địa chỉ EFh.
34Bank 2: 96 Bytes từ địa chỉ 110h đến địa chỉ 16Fh.
5- Bank 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh.

I.7.2.2 Vùng thanh ghi chức năng đặc biệt:
Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lý trung tâm CPU
hoặc các module ngoại vi để điều khiển hoạt động của VĐK. Các thanh ghi chức
năng đặc biệt này được chia làm 2 loại: loại thứ nhất dùng cho các chức năng của
CPU, loại thứ 2 dùng cho các chức năng ngoại vi.
Bảng tóm tắt các chức năng đặc biệt:

SVTH: Nguyễn Văn Quý

Trang 19


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

I.7.3 Các thanh ghi chức năng đặc biệt:
I.7.3.1 Thanh ghi trạng thái ( Status Register):

Thanh ghi trạng thái chứa các trạng thái số học của bộ ALU, trạng thái Reset
và các bit chọn Bank của bộ nhớ dữ liệu.

Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián tiếp).
1 = Bank 2, 3 (100h – 1FFh )
0 = Bank 0, 1 (00h – FFh)
Bit 6 – 5 RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ
trực tiếp).
11 = Bank 3 ( 180h – 1FFh)
10 = Bank 2 (100h – 17Fh)
01 = Bank 1 (80h – FFh)
00 = Bank 0 (00h – 7Fh)
Each bank is 128 bytes
SVTH: Nguyễn Văn Quý

Trang 20


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Bit 4 TO: Bit báo hiệu hoạt động của WDT.
1: Lệnh xóa WDT hoặc Sleep xảy ra.
0: WDT hoạt động.
Bit 3 PD: Bit báo công suất thấp ( Power down bit).
1: Sau khi nguồn tăng hoặc có lệnh xóa WDT.
0: Thực thi lệnh Sleep.
Bit 2 Z: bit Zero
1: Khi kết quả của một phép toán bằng 0.

0: Khi kết quả của một phép toán khác 0.
Bit 1 DC: Digit Carry
1: Có một số nhớ được sinh ra bởi phép cộng hoặc phép trừ 4 bit thấp.
0: Không có số nhớ sinh ra.
Bit 0 C: cờ nhớ (Carry Flag)
1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ.
0: Không có số nhớ sinh ra.
I.7.3.2 Thanh ghi tùy chọn (Option _Reg Register):
Thanh ghi tùy chọn chứa các bit điều khiển để cấu hình cho các chứa năng
như: ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và thời gian
chờ của WDT

SVTH: Nguyễn Văn Quý

Trang 21


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Bit 7 : Bit cho phép PORTB được kéo lên nguồn.
1: Không cho phép PORTB kéo lên nguồn.
0:ChophépPORTBkéolênnguồn.
Bit 6 INTEDG: Bit lựa chọn cạnh tác động ngắt (INTERRUPT EDGE)
1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT
0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INT
Bit 5 T0CS: Bit lựa chọn nguồn xung Clock cho Timer 0
1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI
0: Xung Clock cung cấp bởi nguồn dao động nội.

Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác động lên timer 0
1: Cạnh xuống
0: Cạnh lên
Bit 3 PSA: Bit quyết định tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0 hay
WDT
1: Tốc độ đếm PS2:PS0 sẽ tác động lên WDT
0: Tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0
Bit 2-0 PS2:PS0: Dùng để lựa chọn tốc độ đếm của timer hay WDT

I.7.3.3 Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):

SVTH: Nguyễn Văn Quý

Trang 22


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Bit 7 GIE: Bit cho phép ngắt toàn cục
1: Cho phép ngắt toàn cục
0: Không cho phép ngắt
Bit 6 PEIE: Bit cho phép ngắt khi ghi vào EEPROM hoàn tất.
1: Cho phép ngắt ghi vào EEPROM hoạt động
0:KhôngchophépngắtghivàoEEPROMhoạtđộng
Bit 5 TMR0IE: Bit cho phép ngắt khi timer 0 tràn
1: Cho phép ngắt khi timer 0 tràn
0: Không cho phép ngắt khi timer 0 tràn
Bit 4 INTE: Bit cho phép ngắt ngoại vi trên chân RB0/INT

1: Cho phép ngắt ngoại vi
0: Không cho phép ngắt ngoại vi
Bit 3 RBIE: Cho phép ngắt khi trạng thái PORTB thay đổi
1: Cho phép
0: Không cho phép
Bit 2 TMR0IF: Cờ báo ngắt Timer 0
1: Timer 0 tràn
0: Timer 0 chưa tràn
Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT
1: Có ngắt
0: Không xảy ra ngắt.
Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB
1: Có thay đổi
0: Không có thay đổi xảy ra trên PORTB
I.7.3.4 Thanh ghi cho phép ngắt ngoại vi 1(PIE1 Register):

SVTH: Nguyễn Văn Quý

Trang 23


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vi
nào xảy ra.
Bit 7 PSPIE: Bit cho phép ngắt đọc/ ghi Port song song
1: Cho phép
0: Không cho phép

Bit 6 ADIE: Bit cho phép ngắt chuyển đổi A/D
1: Cho phép
0: Không cho phép
Bit 5 RCIE: Bit cho phép ngắt nhận USART
1: Cho phép
0: Không cho phép
Bit 4 TXIE: Bit cho phép ngắt truyền USART
1:Chophép
0: Không cho phép
Bit 3 SSPIE: Bit cho phép ngắt Port nối tiếp đồng bộ
1: Cho phép
0: Không cho phép
Bit 2 CCP1IE: Bit cho phép ngắt module CCP1
1: Cho phép ngắt
0: Không cho phép
Bit 1 TMR2IE: Bit cho phép ngắt xảy ra khi TMR2 bằng thanh ghi PR2
1: Cho phép
0: Không cho phép
Bit 0 TMR1IE: Bit cho phép ngắt tràn TMR1
1: Cho phép
0: Không cho phép

I.7.3.5 Thanh ghi cờ của các ngắt ngoại vi 1:

SVTH: Nguyễn Văn Quý

Trang 24


Đồ Án Tốt Nghiệp Khóa 2007-2010


GVHD: Thầy Nguyễn Ngọc Tùng

Bit 7 PSPIF: Cờ ngắt đọc/ ghi của Port song song
1: Một hoạt động đọc/ghi đã diễn ra (phải xóa bằng phần mềm)
0: Không có hoạt động đọc/ghi.
Bit 6 ADIF: Cờ báo ngắt chuyển đổi A/D
1: Một quá trình chuyển đổi A/D đã hoàn thành
0: Chuyển đổi A/D chưa hoàn tất
Bit 5 RCIF: Cờ báo ngắt nhận USART
1: Buffer nhận USART đầy
0: Buffer nhận USART trống.
Bit 4 TXIF: Cờ báo ngắt phát USART
1: Buffer truyền USART trống
0: Buffer truyền USART đầy
Bit 3 SSPIF: Cờ báo ngắt port nối tiếp đồng bộ (ngắt SSP)
1: Ngắt SSP xảy ra và phải được xóa bằng phần mềm trước khi trở lại chương
trình chính từ chương trình phục vụ ngắt.
0: Không có ngắt xảy ra
Bit2 CCP1IF:Cờ báo ngắt CCP1
Chế độ Capture (Bắt giữ):
1: Một Capture thanh ghi TMR1 xảy ra( phải được xóa bằng phần mềm)
0: Không xảy ra Capture thanh ghi TMR1
Chế độ Compare ( So sánh):
1: Khi các giá trị so sánh trong thanh ghi TMR1 được thỏa ( phải được xóa bằng
phần mềm)
0: Khi các giá trị so sánh trong thanh ghi TMR1 không được thỏa
Chế độ PWM: Không sử dụng trong chế độ này
Bit 1 TMR2IF: Cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng
trong thanh ghi PR2

1: Giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải được xóa bằng phần
mềm)
0: Giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2
Bit 0 TMR1IF: Cờ báo tràn thanh ghi TMR1
1: Thanh ghi TMR1 tràn (phải được xóa bắng phần mềm)
0: Thanh ghi TMR1 chưa tràn
1.4.3.6 Thanh ghi cho phép ngắt ngoại vi 2:

SVTH: Nguyễn Văn Quý

Trang 25


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vi nào
xảy ra.
Bit 7,5,2,1 Unimplemented : read as ‘0’
Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh điện thế
1: Cho phép
0: Không cho phép
Bit 4 EEIE: Bit cho phép ngắt do ghi EEPROM
1: Cho phép
0: Không cho phép
Bit 3 BCLIE: Bit cho phép ngắt do xung đột bus
1: Cho phép
0: Không cho phép
Bit 0 CCP2IE: Cho phép ngắt module CCP2

1: Cho phép
0:Khôngchophép
I.7.3.6 Thanh ghi cờ của các ngắt ngoại vi 2:

Bit 7,5,2,1 Unimplemented : read as ‘0’
Bit 6 CMIF: Cờ báo ngắt do bộ so sánh
1: Ngõ vào bộ so sánh đã thay đổi (phải được xóa bằng phần mềm)
0: Ngõ vào bộ so sánh không thay đổi.
Bit 4 EEIF: Cờ báo ngắt ghi EEPROM
1: Ghi EEPROM hoàn tất (phải được xóa bằng phần mềm)
0: Ghi EEPROM chưa hoàn tất.
Bit 3 BCLIF: Cờ báo ngắt do xung đột bus
1: Xung đột bus đã xuất hiện trong chế độ SSP
SVTH: Nguyễn Văn Quý

Trang 26


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

0: Không có xung đột bus xảy ra
Bit 0 CCP2IF: Cờ báo ngắt CPP2
Chế độ Capture (bắt giữ):
1: Một sự bắt giữ thanh ghi TMR1 đã xảy ra (phải được xóa bằng
phần mềm)
0: Không xảy ra Capture thanh ghi TMR1
Chế độ Compare (So sánh):
1: Một thuật toán so sánh trong thanh ghi TMR1 xảy ra (phải được

xóa bằng phần mềm)
0: Không xảy ra thuật toán so sánh
I.7.4 PCL và PCLATH:
Bộ đếm chương trình PC (program counter) có độ dài 13 bit, được dùng để
chứa địa chỉ của lệnh được thực thi kế
tiếp. Byte thấp chứa trong thanh ghi
PCL có thể đọc/ghi một cách trực tiếp.
Các bit cao (bit 12:8) chứa trong thanh
ghi PCLATH, không thể đọc nhưng có
thể ghi gián tiếp bằng cách sử dụng
thanh ghi PCLATH. Khi có bất kỳ sự
Reset nào xảy ra, các bit cao của bộ
đếm chương trình PC sẽ bị xóa. Xem
thêm hai ví dụ sau đây để hiểu thêm về
hoạt động của bộ đếm chương trình
PC.
I.7.5 Ngăn xếp Stack:
Stack cho phép 8 lệnh gọi chương trình con và ngắt hoạt động. Stack chứa
địa chỉ mà chương trình chính sẽ quay về thực hiện từ sau chương trình con hay
ngắt. Đối với PIC16F877A Stack có độ sâu 8 lớp. Stack không nằm trong cả bộ
nhớ chương trình lẫn bộ nhớ dữ liệu.
I.7.6 Địa chỉ trực tiếp và địa chỉ gián tiếp, thanh ghi INF và thanh ghi FSR:
Thanh ghi INF không phải là một thanh ghi vật lí. Nó chứa giá trị của thanh
ghi có địa chỉ nằm ở thanh ghi FSR.
Ví dụ:
Thanh ghi tại địa chỉ 10h có giá trị 5Ah
Nếu ta đưa 10h vào thanh ghi FSR thì khi đọc thanh ghi INF ta sẽ có giá trị
5Ah.
Data EEPROM và Flash Program Memory:


SVTH: Nguyễn Văn Quý

Trang 27


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

EEPROM là bộ nhớ có khả năng đọc và ghi trong điều kiện làm việc bình
thường (khi nguồn Vdd không đổi). Bộ nhớ này không được định địa chỉ trực tiếp
trong bản đồ bộ nhớ mà được định địa chỉ gián tiếp thông qua các thanh ghi chức
năng đặc biệt:
1- EECON1
2- EECON2

SVTH: Nguyễn Văn Quý

Trang 28


Đồ Án Tốt Nghiệp Khóa 2007-2010

GVHD: Thầy Nguyễn Ngọc Tùng

3- EEDATA
4- EEDATH
5- EEADR
6- EEADRH
Trong đó thanh ghi EEDATA lưu giữ giá trị 8 bit sẽ được ghi hoặc đọc.

Thanh ghi EEADR lưu giữ địa chỉ mà chúng ta muốn ghi hoặc đọc, thanh ghi này
có khả năng định địa chỉ cho 256 byte EEPROM. Thanh ghi EECON1 chứa các
bit điều khiển còn thanh ghi EECON2 được sử dụng để khởi tạo quá trình ghi/đọc.

I.8 I/O ports:
I.8.1 Port A và thanh ghi TRISA:
Port A gồm 6 chân từ RA0 đến RA5.
Việc ghi giá trị vào thanh ghi TRISA sẽ qui
định các chân của Port A là input hay output
(nếu là 1 thì là input, là output nếu là 0).
Việc đọc thanh ghi Port A sẽ đọc trạng thái
của các chân ở Port A. Việc ghi giá trị vào
thanh ghi Port A sẽ thay đổi trạng thái của
các chân Port A.
Riêng chân RA4 được tích hợp chức
năng là chân cung cấp xung clock ngoài cho
Timer 0 (RA4/T0CKI). Những chân khác
của Port A được đa hợp với các chân ngõ
vào Analog của ADC và chân ngõ vào điện
thế so sánh của bộ so sánh Comparator. Hoạt
động của những chân này được quy định
SVTH: Nguyễn Văn Quý

Trang 29


×