Tải bản đầy đủ (.docx) (74 trang)

đồ án môn học dùng vi điều khiển pic 16f877a kết hợp với ds1307 để điều khiển hệ thống đèn giao thô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 (1.27 MB, 74 trang )


BẢN THUYẾT MINH
ĐỀ TÀI: DÙNG VI ĐIỀU KHIỂN PIC 16F877A KẾT
HỢP VỚI DS1307 ĐỂ ĐIỀU KHIỂN HỆ THỐNG
ĐÈN GIAO THƠNG.
GVHD: GS.TS Nguyễn Đức Thành
GVPB: Thầy Nguyễn Trọng Tài
SVTH: Nguyễn Hữu Tân
I. Giới thiệu sơ lược về PIC 16F877A
- Tần số hoạt động lớn nhất: 20MHz
- 8k byte ROM nội (Flash Rom).
- 368 byte RAM nội.
- 256 byte EEROM trong vùng ROM nội đươc dùng để chứa dữ liệu.
- Về giao tiếp, có 5 port A, port B, port C, port D, port E vàøo ra với tín hiệu điều
khiển độc lập.
- Có 2 bộ đònh thời Timer 0 vàø timer 2 – 8 bit.
- Có 1 bộ đònh thời timer 1 -16 bit có thể hoạt động trong chế độ tiết kiệm năng
lượng (SLEEP MODE) với nguồn xung clock từ bên ngoài.
- Có 2 bộ Capture/Compare/PWM.
- Có 1 bộ ADC 10 bit với 8 ngõ vàøo.
- Có 2 bộ so sánh tương tự (Comparator).
- Có một bộ Watch Dog Timer.
- Có một bộ Serial ở bên trong chip.
- Có moat cổng song song 8 bit với các tín hiệu điều khiển.
- Có 15 nguồn ngắt.
- Nạp chương trình thông qua cổng nối tiếp (ICSP – In Circuit Serial
Programming).
- Được chế tạo dựa trên công nghệ CMOS.
- Về cấu trúc lệnh, có tất cả 35 lệnh có độ dài 14 bit.
Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247
1



II. Giới thiệu về DS1307
- Tần số dao động thạch anh sử dụng 32.768kHz, không cần có điện trở, cũng
như các tụ gắn thêm.
- IC real-time DS1307 là một IC hoạt động với chế độ thời gian thực, công suất
thấp, sử dụng mã BCD đầy đủ
- Có 56 byte ram nội. Đòa chỉ, cũng như dữ liệu được ghi và đọc theo chuẩn giao
tiếp I2C, đa hướng (chi tiết về chuẩn giao tiếp I2C này đã được em trình bày ở
trong đồ án).
- IC real-time DS1307 cung cấp thông tin về giây, phút, giờ, ngày, tháng, năm,
thông tin về năm. IC này cũng tự điều chỉnh cho những tháng có ít hơn 31 ngày
và bao gồm luôn cả năm nhuận. Đồng hồ trong IC hoạt động với hai chế độ:
24 giờ, hay 12 giờ (bao gồm cả chỉ thò cho biết đang là AM hay PM).
- IC real-time DS1307 cũng được tích hợp sẵn một mạch nhận biết sự cố điện áp
và sẽ tự động chuyển sang dùng nguồn PIN nuôi dự phòng khi có sự cố mất
điện áp xảy ra để ngăn ngừa tình trạng mất dữ liệu.
III. Giới thiệu sơ đồ khối của mạch thực hiện
IV. Giới thiệu các mode hoạt động và cài đặt
a. Mode I: Chế độ vận hành tự động cho đèn giao thông với giờ đã cài đặt sẵn
b. Mode II: Chế độ vận hành bằng tay cho đèn. Có hai mode con:
Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247
2
Khối ngõ ra, gồm
12 đèn thể hiện
cho 1 ngã 4
Khối giao tiếp
Máy tính
Khối DS1307
Khối LCD
Khối VXL

Khối nguồn
Bàn phím

- Mode con 1: chỉ sử dụng hai đèn xanh và đỏ. Đèn vàng không được sử
dụng. Dùng khi người điều khiển giao thông muốn chủ động điều khiển
thời gian theo ý muốn của mình.
- Mode con 2: chỉsử dụng đèn vàng, đèn vàng chớp với chu kì 1s. Dùng
khi chiến só cảnh sát giao thông muốn người và phương tiện tham gia
lưu thông tuân theo hiệu lệnh của mình thay vì tín hiệu đèn giao thông.
c. Mode III: Chế độ xem giờ đã cài đặt, cài đặt thời gian đèn xanh, đỏ, vàng, xác
định xem có sử dụng giờ của 1307 hay khơng?. Mode này có các mode con sau
- Mode con 1: sử dụng để xem giờ đã cài đặt cho đèn giao thông. Giờ cài
đặt được lưu trong EEPROM nên không bò mất khi có sự cố mất điện.
- Mode con 2: sử dụng để đònh giờ mới cho đèn. Sau khi đònh giờ xong,
giờ mới cài đặt này sẽ được lưu vào trong ROM và chương trình sẽ trở
lại khâu chọn mode hoạt động.
d. Mode IV: Chế độ xem giờ hiện tại của hệ thống cũng như thiết đặt giờ chuyển
sang chế độ đèn vàng. Mode này có ba mode con :
- Mode con 1: sử dụng để xem giờ hiện tại của hệ thống đọc được từ
IC1307. Giờ cài đặt được lưu trong IC real-time DS1307 có PIN nuôi dự
phòng nên không bò mất khi có sự cố mất điện.
- Mode con 2: sử dụng để xem, đònh giờ mới cho hệ thống làm cho hệ
thống chuyển sang chế độ đèn vàng. Sau khi đònh giơ, xem giờø xong,
chương trình sẽ trở lại khâu chọn mode hoạt động.
- Mode con 3: sử dụng để cài đặt giờ cho hệ thống (giờ lưu trong IC
DS1307)
.
M C L CỤ Ụ
I) CHƯƠNG 1: VI ĐIỀU KHIỂN PIC 16F877A
a. Giới thiệu chung về VĐK PIC

b. Giới thiệu về vi điều khiển PIC 16F877A
c. Giới thiệu các chân của vi điều khiển PIC 16F877A
d. Giới thiệu về tổ chức bộ nhớ của PIC 16F877A
Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247
3

i. Tổ chức bộ nhớ
ii. Các thanh ghi của PIC 16F877A
e. Giới thiệu về bộ đònh thời trong PIC 16F877A
f. Giới thiệu về ngắt trong PIC 16F877A
g. Sử dụng giao tiếp theo chuẩn giao tiếp I2C trong PIC 16F877A .
h. Module CCP?
i. Các bộ Comparator?
j. Bộ biến đổi dữ liệu ADC 10 bit?
II) CHƯƠNG II: GIỚI THIỆU VỀ PHẦN MỀM CCS C HỖ TRỞ LẬP TRÌNG CHO
CÁC DÒNG PIC
III) CHƯƠNG III: GIỚI THIỆU MẠCH THỰC HIỆN ĐỒ ÁN MÔN HỌC.
IV) Phụ lục: Tập lệnh của PIC 16F877A
Đại học Bách Khoa TP.HCM |Nguyễn Hữu Tân-40402247
4
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
CHƯƠNG I
VI ĐIỀU KHIỂN PIC 16F877A
A. Giới thiệu về vi điều khiển PIC
PIC (Programmable intelligent Controller) do hãng General Instrument đặt
tên cho con vi điều khiển đầu tiên của họ: PIC 1650. Hãng Microchip tiếp tục phát
tri63n sản phẩm này. Cho đến nay, các sản phẩm vi điều khiển PIC của Microchip đã
có gần 100 loại sản phẩm từ 10Fxxx đến 12Cxxx, 12Fxxx, 16Cxxx, 17Cxx, 16Fxx,
16Fxxx, 16FxxA, 16FxxxA, 16LFxxxA, 18Fxxx, 18LFxxx, 18Fxxxx, 18LFxxxx….
Cách phân loại PIC:

+ Theo chữ cái:
-Các họ có chữ C như PIC xxCxxx thuộc nhóm OTP (One Time
Programmable) chỉ có thể lập trình vàø nạp cho nó moat lần duy nhất.
-Cá họ có chữ F hoặc LF (thuộc nhóm Flash) cho phép ghi vàø xóa
nhiều lần bằng các mạch điện tử thông thường.
+Theo hai chữ số đầu tiên:
-PIC 12Cxx: dòng PIC cơ bản (base-line), có độ dài lệnh là 12 bit.
-PIC 10F, 12F vàø 16F: dòng PIC phổ thông (mid-range), độ dài lệnh 14
bit.
-PIC 18: dòng PIC cao cấp (high-end), có độ dài lệnh là 16 bit.
B. Giới thiệu về Vi điều khiển 16F877A
Đây là dòng PIC phổ biến nhất. Có những đặc điểm tổng quát như sau:
o Tần số hoạt động lớn nhất: 20MHz (16F877A, 16F84A), đối với các họ
PIC mà không có kí tự A đứng cuối thì tần số hoạt động lớn nhất là
10MHz.
o 8k byte ROM nội (Flash Rom).
o 368 byte RAM nội.
o 256 byte EFROM trong vùng ROM nội đươc dùng để chứa dữ liệu.
o Về giao tiếp, có 5 port A, port B, port C, port D, port E vàøo ra với tín
hiệu điều khiển độc lập.
o Có 2 bộ đònh thời Timer 0 vàø timer 2 – 8 bit.
o Có 1 bộ đònh thời timer 1 -16 bit có thể hoạt động trong chế độ tiết
kiệm năng lượng (SLEEP MODE) với nguồn xung clock từ bên ngoài.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
o Có 2 bộ Capture/Compare/PWM.
o Có 1 bộ ADC 10 bit với 8 ngõ vàøo.
o Có 2 bộ so sánh tương tự (Comparator).
o Có một bộ Watch Dog Timer.
o Có một bộ Serial ở bên trong chip.
o Có moat cổng song song 8 bit với các tín hiệu điều khiển.

o Có 15 nguồn ngắt.
o Nạp chương trình thông qua cổng nối tiếp (ICSP – In Circuit Serial
Programming).
o Được chế tạo dựa trên công nghệ CMOS.
o Về cấu trúc lệnh, có tất cả 35 lệnh có độ dài 14 bit.
C. Giới thiệu về các chân của vi điều khiển 16F877A
Sơ đồ chân cuả PIC 16F877A
1. Nhóm chân cấp nguồn
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
• Chân 11, 32: nối vàøo Vcc (+5V)
• Chân 12, 31: nối mass
2. Chân Reset (chân số 1)
• Vi điều khiển PIC sẽ được reset khi chân số 1 chuyển từ mức logic 1 xuống
mức logic 0
3. Nhóm chân tạo xung Clock
Xung clock sẽ được đưa vàøo chân số 13 vàø 14, thạch anh giữ vài trò đònh tần cho
mạch dao động bên trong chip. PIC 16F877A có thể hoạt động trong 4 chế độ dao
động khác nhau
Mode Đặc điểm Tần số Tụ C1 Tụ C2
LP Low Power
Crystal
32kHz
200kHz
68-100pF
15-33pF
68-100pF
15-33pF
XT Crystal/Resonator 100kHz
2MHz
4MHz

100-
150pF
15-33pF
15-33pF
15-33pF
15-33pF
HS High speed
crystal/ Resonator
4MHz
20Mhz
15-33pF
15-33pF
15-33pF
15-33pF
RC Resitor/ Capacitor Không quan trong độ chính
xác
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
4. Nhóm chân port
Các chân port của 16F877A đều cho phép truyền vàø nhận dữ liệu theo hai hướng.
Nghóa là ta được phép đọc hoặc xuất dữ liệu ở các port này. Hướng truyền được xác
đònh bằng cách đưa giá trò thích hợp vàøo thanh ghi TRISX (trong đó X là tên port).
Mỗi bit trong thanh ghi TRISX sẽ điều khiển 1 hướng xuất nhập cho 1 chân của port.
Nếu 1 bit trong thanh ghi TRISX xuống 0 thì PIC sẽ hiểu rằng chân điều khiển bởi bit
đó là chân xuất dữ liệu (output). Ngược lại, nếu 1 bit trong TRISX lên mức 1 thì PIX
sẽ hiểu rằng chân điều khiển bởi bit đó là chân nhập dữ liệu (input)
Ví dụ: nếu TRISB = b’11110000’ thì chân RB0->RB3: output, RB4->RB7:input
• Port A vàø thanh ghi TRISA (85H)
Port A gồm các chân từ RA0 đến RA5. Nội dung của thanh ghi
TRISA sẽ qui đònh chân nào của port A là input hay output.
Riêng chân RA4 còn có chức năng là chân cung cấp xung clock

ngoài cho timer 0. Đây là chân có cực thu để hở, nên khi test port A, ta
cần gắn điện trở kéo lên để đảm bảo kết quả hiển thò cho chân này.
Các chân khác của port A còn có chức năng là chân ngõ vàøo
analog của bộ ADC vàø chân ngõ vàøo điện thế so sánh của bộ comparator.
Các thanh ghi liên quan đến Port A
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Tóm tắt chức năng các chân Port A:
Tên chân Bit
Loại
(ST:Schmitt
Trigger)
Chức năng
RA0/AN0 0 TTL Chân I/O hay chân ngõ vào analog
RA1/AN1 1 TTL Chân I/O hay chân ngõ vào analog
RA2/AN2/Vref-/CVr
ef
2 TTL
Chân I/O hay chân ngõ vào analog hay Vref- hay
CVref
RA3/AN3/Vref+ 3 TTL
Chân I/O hay chân ngõ vào analog hay Vref+
hay CVref
RA4/TOCKI/C1OUT 4 TTL
Chân I/O hay chân ngõ vào cho xung clock ngoài
cho timer 0 hay ngõ ra bộ so sánh.Ngõ ra cực
máng hở.
RA5//AN4/C2OUT 5 TTL
Chân I/O hay ngõ vào chọn slave trong chế đô
giao tiếp nối tiếp đồng bộ, ngõ vào analog hay
ngõ ra bộ so sánh điện áp.

• PortB vàø TRISB
Port B gồm tám chân RB0-> RB7. Việc thay đổi giá trò thanh ghi
TRISB sẽ quyết đònh chân nào của port B là Input, chân nào là output.
Ba chân của port B được tích hợp chức năng In-circuit Debugger vàø
Low Programming là RB3/PGM, RB6/PGC vàø RB7/PGD.
Mỗi chân của port B có một điện trở kéo lên nguồn. Bốn chân RB4->
RB7 có chức năng ngắt khi trạng thái thay đổi (chức năng này không hoạt
động khi chân port được quy đònh là output) .
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Các thanh ghi liên quan đến Port B
Bảng tóm tắt chức năng các chân Port B
Tên chân Bit
Loại
(ST:Schmitt
Trigger)
Chức năng
RB0/INT 0 TTL/ST
Chân I/O hay ngõ ra ngắt ngoài. Có thể lập trình
bằng phần mềm để sử dụng điện trở kéo lên yếu
ở bên trong.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
RB1 1 TTL
Chân I/O. Có thể lập trình bằng phần mềm để sử
dụng điện trở kéo lên yếu ở bên trong.
RB2 2 TTL
Chân I/O. Có thể lập trình bằng phần mềm để sử
dụng điện trở kéo lên yếu ở bên trong.
RB3/PGM 3 TTL
Chân I/O hay chân lập trình LVP( Low Voltage
Programming). Có thể lập trình bằng phần mềm

để sử dụng điện trở kéo lên yếu ở bên trong.
RB4 4 TTL
Chân I/O với ngắt khi có sự thay đổi mức logic
trên chân Port. Có thể lập trình bằng phần mềm
để sử dụng điện trở kéo lên yếu ở bên trong.
RC5 5 TTL
Chân I/O với ngắt khi có sự thay đổi mức logic
trên chân Port. Có thể lập trình bằng phần mềm
để sử dụng điện trở kéo lên yếu ở bên trong.
RC6/PGC 6 TTL/ST
Chân I/O với ngắt khi có sự thay đổi mức logic
trên chân Port hay chân In-Circuit debugger. Có
thể lập trình bằng phần mềm để sử dụng điện trở
kéo lên yếu ở bên trong. Xung nhòp cho lập trình
nối tiếp.
RC7/PGD 7 TTL/ST
Chân I/O với ngắt khi có sự thay đổi mức logic
trên chân Port hay chân In-Circuit debugger. Có
thể lập trình bằng phần mềm để sử dụng điện trở
kéo lên yếu ở bên trong.Là đường dữ liệu cho lập
trình nối tiếp.
• Port C vàø TRISC
Ta có cấu trúc chân của PORT C:
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Port C gồm 8 chân từ RC0 đến RC7, tương tự các Port khác, việc qui đònh giá trò các
bit của thanh ghi TRISC sẽ quyết đònh chân nào của PORT C là chân xuất, chân nào là chân
nhập. Khi sử dụng Port C cần lưu ý giá trò của thanh ghi TRISC vì một số chức năng ngoại vi
sẽ làm cho các chân Port C mặc đònh là Output. Trong khi đó, một số chức năng ngoại vi sẽ
làm cho các chân Port C là chân Input.
Việc đọc thanh ghi PortC sẽ giúp tra biết được trạng thái chân của PORTC. Việc ghi

giá trò vào thanh ghi này cũng sẽ làm thay đổi trạng thái logic các chân của Port C.
Các thanh ghi liên quan đến Port C:
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Tên chân Bit
Loại
(ST:Schmitt
Trigger)
Chức năng
RC0/T1OS0/T1CKI 0 ST
Chân I/O hay ngõ ra của bộ dao động timer 1/
Xung clock cho timer 1
RC1/T1OSI/CCP2 1 ST
Chân I/O hay ngõ vào bộ dao động cho timer 1
hay ngõ vào bộ Capture 2/ Ngõ ra bộ so sánh 2/
ngõ ra bộ PWM2
RC2/CCP1 2 ST
Chân I/O hay ngõ vào bộ Capture 1/ Ngõ ra bộ so
sánh 1/ Ngõ ra bộ PWM1
RC3/SCK/SCL 3 ST
Chân I/O hay chân cung cấp xung clock nối tiếp
đồng bộ trong chuẩn giao tiếp SPI hay I2C
RC4/SDI/SDA 4 ST
Chân I/O hay đường SPI Data hay đường SDA
(đối với I2C)
RC5/SDO 5 ST
Chân I/O hay ngõ ra port giao tiếp nối tiếp đồng
bộ
RC6/TX/CK 6 ST
Chân I/O hay chân phát bất đồng bộ trong chuẩn
giao tiếp nối tiếp.

RC7/RX/DT 7 ST
Chân I/O hay chân nhận trong chuẩn giao tiếp nối
tiếp bất đồng bộ.
• Port D vàø TRISD
Port D có tám chân từ RD0 đến RD7. Port D có thể hoạt động như là một
Port xuất nhập thông thường hoặc như một cổng song song của PSP
(Parallel Slave Port) bằng cách set bit PSP mode (TRISE.4) lên 1. Trong
chế độ này, buffer ngõ vào là linh kiện họ TTL.
Các thanh ghi liên quan đến Port D:
Cấu trúc chân Port D:
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Tên chân Bit Loại Chức năng
RD0/PSP0 0 ST/TTL Chân I/O hay bit 0 của PSP
RD1/PSP1 1 ST/TTL Chân I/O hay bit 1 của PSP
RD2/PSP2 2 ST/TTL Chân I/O hay bit 2 của PSP
RD3/PSP3 3 ST/TTL Chân I/O hay bit 3 của PSP
RD4/PSP4 4 ST/TTL Chân I/O hay bit 4 của PSP
RD5/PSP5 5 ST/TTL Chân I/O hay bit 5 của PSP
RD6/PSP6 6 ST/TTL Chân I/O hay bit 6 của PSP
RD7/PSP7 7 ST/TTL Chân I/O hay bit 7 của PSP
• Port E vàø TRISE
Cấu trúc chân của Port E:
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Port E có năm chân, trong đó có ba chân RE0/RD/AN5, RE1/WR/AN6,
RE2/CS/AN7 có thể được cấu hình là các chân xuấ nhập.
Các chân Port E có thể trở thành các chân điều khiển cho các cổng của vi xử lí
Khi bit PSPMODE (TRISE.4) được set lên 1. Khi đó, các bit từ 0 đến 2 của
TRISE phải bằng 1 để các chân này được cấu hình là các chân ngõ vào. Trong
chế độ PSP, bộ đệm ngỏ vào Port E là linh kiện họ TTL.
Các chân của Port E còn có chức năng Analog, tại mode này, các chân này sẽ

được đọc về là giá trò 0.
Các thanh ghi liên quan đến Port E:
Chức năng các chân của Port E:
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Tên chân Bit Loại Chức năng
RE0/AN5 0 ST/TTL
(1)
Chân I/O hay hay chân đọc trong mode PSP hay
ngõ vào Analog.
1: rảnh rỗi
0: đang có hoạt động đọc diễn ra. Nội dung của
thanh ghi PortD là output cho các chân I/O( nếu
chip được chọn)
RE1//AN6 1 ST/TTL
(1)
Chân I/O hay hay chân ghi trong mode PSP hay
ngõ vào Analog.
1: rảnh rỗi
0: đang có hoạt động ghi diễn ra. Mức logic của
cacù chân I/O được chốt theo thanh ghi PortD( nếu
chip được chọn)
RE2//AN6 2 ST/TTL
(1)
Chân I/O hay hay chân điều khiển chọn chip
trong mode PSP hay ngõ vào Analog.
1: chip không được chọn
0: chip được chọn
D. Cấu trúc bộ nhớ của PIC 16F877A
Có 3 phần riêng biệt trong bộ nhớ của 16F877A gồm: Bộ nhớ chương trình, bộ nhớ
dữ liệu vàø bộ nhớ EEROM

I. Tổ chức bộ nhớ
• Tổ chức bộ nhớ chương trình
PIC 16F877A có Program Counter (PC) 13 bit có thể đònh đòa chỉ cho 8KB bộ nhớ.
Bộ nhớ chương trình còn bao gồm một ngăn stack có 8 mức.
Vector RESET được đặt ở đòa chỉ 0000h, vector đòa chỉ ngắt ngoại vi được đặt ở
đia chỉ 0004h.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
• Tổ chức vùng nhớ dữ liệu
Vùng nhớ dữ liệu được chia làm 4 bank thanh ghi. Mỗi bank gồm 128 byte dữ
liệu, vùng nhớ có đòa chỉ thấp trong các bank này dùng cho các thanh ghi có
chức năng đặc biệt –SFR (Special Function Register); trong khi đó, vùng có
đòa chỉ cao trong các bank này đươc sử dụng làm vùng RAM đa dụng (General
Purpose Register). Một số thanh ghi SFR trong bank này cũng được ánh xạ
sang các bank khác nhằm làm tăng tốc độ truy cập vàøgiảm độ dài code. Việc
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
lựa chọn bank thanh ghi phụ thuộc vàøo bit RP0 vàø RP1 trong thanh ghi
STATUS.
Bản đồ vùng RAM nội của pic 16f877a.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
• Vùng nhớ EEPROM vàø vùng nhớ chương trình FLASH:
Vùng nhớ dữ liệu EEPROM vàø vùng nhớ chương trình FLASH là vùng nhớ
ROM có thể đọc vàø ghi trong khi chương trình hoạt động chỉ với điện thế
Vcc=+5V. Việc reset hệ thống cũng như mất điện không làm mất dữ liệu trong
vùng nhớ này. Để truy xuất vùng nhớ này, ta phải thông qua các thanh ghi sau:
EEDATA, EEDATH, EEADR, EEADRH, EECON1, EECON2.
Tuy nhiên, để tiện việc truy xuất vùng nhớ này, em đã sử dụng phần mềm
CCS Cv4.013 có hỗ trợ sẵn các lệnh sau để truy xuất:
 read_eeprom(address)
Chức năng: đọc một byte tại một ô nhớ trong EEPROM có đòa chỉ được
cung cấp bởi thông số address (8 bit) trong lệnh

 write_eeprom(address, vàlue)
Chức năng: ghi giátrò vàlue trong lệnh vàøo một ô nhớ trong EEPROM
có đòa chỉ được cung cấp bởi thông số address.
• Ngăn xếp Stack:
Ngăn xếp này cho phép 8 lệnh gọi chương trình con và ngắt hoạt động.
Stack được dùng để chứa đòa chỉ mà chương trình sẽ quay trở về từ chương
trình con và ngắt. Đối với dòng Mid-range như pic 16f877a, stack có độ sâu là
8 lớp. Vò trí stack không name trong bộ nhớ chương trình cũnh như bộ nhớ dữ
liệu.
II. Các thanh ghi chức năng đặc biệt trong PIC 16F877A
 Thanh ghi STATUS (03H, 83H)
IRP RP1 RP0 Z DC
Bit 7 bit 0
Chức năng các bit như sau:
o C: dùng trong các lệnh liên quan đến các phép toán. C sẽ lên 1
nếu có số nhớ sinh ra trong phép toán.
o DC: dùng cho các lệnh liên quan đến các phép toán. DC sẽ lên
1 nếu có số nhớ sinh ra bởi phép cộng hoặc trừ từ 4 bit thấp.
o Z: bit này sẽ lên 1 nếu kết quả phép toán bằng 0. Nếu kết quả
phép toán khác 0, bit này sẽ bò xóa về 0.
o (power-down bit)(bit công suấ thấp): được dùng để báo trạng
thái ngủ của PIC 16F877A. Ở trạng thái ngủ, bit nàysẽ bò xóa về
0. Ở điều kiện bình thường, bit này bằng 1.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
o (time-out bit): bit này sẽ bằng 1 sau khi bật nguồn, sau lệnh
CLRWDT, hoặc sau lệnh SLEEP. Bit này sẽ bằng 0 khi WDT đi
vàøo hoạt động vàø thời gian chờ RESET được tính.
o RP1:RP0: Dùng để chọn các bank thanh ghi
RP1 RP0 Bank được chọn Đòa chỉ
0 0 Bank 0 00h-7Fh

0 1 Bank 1 80h-FFh
1 0 Bank 2 100h-17Fh
1 1 Bank 3 180h-1FFh
o IRP: bit chọn bank thanh ghi. Nếu bit này bằng 1: chọn bank 2
và bank3 (100h-1FFh). Nếu bit này bằng 0: chọn bank 0 vàø bank
1 (00h-FFh)
 Thanh ghi tùy chọn OPTION REGISTER
(Được trình bày trong phần timer 0)
 Các thanh ghi điều khiển ngắt
(Được trình bày trong phần ngắt)
 Thanh ghi đếm chương trình PC (Program Counter)
Thanh ghi này được dùng để chứa đòa chỉ lệnh kế tiếp khi thực hiện
chương trình. Nó có độ dài là 13 bit, byte thấp chứa trong thanh ghi
PCL, byte cao chứa trong thanh ghi PCH.
 Thanh ghi W (Working register)
Là một thanh ghi mục đích chung mà ta có thể đặt nó lên bất kì giá trò
nào ta muốn. Ta có thể gán một giá trò cho thanh ghi W hay dùng nó
làm thanh ghi trung gian để gán nội dung cho một thanh ghi khác. Khi
ta gán một giá trò mới cho thanh ghi W thì giá trò cũ sẽ bò ghi đè lên.
Thanh ghi này có thể truy cập từ tất cả các bank.
E. Giới thiệu về các bộ đònh thời trong PIC 16F877A
Bộ WDT (Watch Dog Timer)
Bên trong pic 16f877a có một mạch dao động RC, mạch này cung cấp xung nhòp
cho PIC độc lập với xung nhòp của PIC. Khi WDT được cho phép, nó sẽ đếm từ
00h-FFh (mỗi lần tăng lên 1 đơn vò. Và khi đếm vượt qua FFh, trở thành 00h thì
PIC 16F877A sẽ bò reset bất kể đang làm gì. Chúng ta ứng dụng WDT để ngăn
ngừa sự cố chương trình trong PIC 16F877A bò treo.
Bộ đònh thời timer 0
o Giới thiệu
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A

Timer 0 là một bộ đònh thời /đếm 8 bit, có khả năng đọc được vàø ghi được,
có một bộ prescaler có thể lập trình được 8 bit, có thể sử dụng với nguồn
xung clock nội hay ngoại, có thể ngắt khi có sự kiện tràn timer vàø có thể
lựa chọn canh tác động của xung clock ngoài.
o Thanh ghi điều khiển (OPTION-REG):
Là thanh ghi tùy chọn chứa các bit điều khiển để cấu hình các chức năng
của timer 0, chức năng sử dụng điện trở kéo lên ở PORTB vàø chức năng
của WDT
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Bit 7 Bit 0
Trong đó, chức năng các bit như sau:
 RBPU: nếu bit này bằng 1 thì các chân của Port B sẽ được các
điện trở kéo lên nguồn. Nếu bit này bằng 0, các chân của Port B sẽ
không được các điện trở kéo lên nguồn.
 INTEDG: qui đònh ngắt sẽ tác động cạnh lên hay cạnh xuống của
xung tại chân RB0. Nếu bit này bằng 1: ngắt sẽ tác đông cạnh lên,
nếu bit này bằng 0: ngắt sẽ tác động cạnh xuống.
 T0CS: chọn nguồn xung clock cấp cho timer 0. Nếu bit này bằng 1:
timer 0 sẽ được cấp nguồn xung clock từ bên ngoài vàøo. Nếu bit này
bằng 0: timer 0 sẽ được cấp xung clock bởi nguồn dao động nội.
 T0SE: qui đònh cạnh lên hay cạnh xuống của xung clock sẽ tác động
lên timer 0. Nếu bit này bằng 1, timer 0 sẽ tác động bởi cạnh xuống
của xung clock. Nếu bit này bằng 0, timer 0 sẽ bò tác động bởi cạnh
lên của xung.
 PSA (prescaler assignment bit): xác đònh prescaler sẽ tác động lên
timer 0 hay WDT. Nếu PSA =1, WDT được chon. Nếu PSA=0, thì
timer 0 được chọn.
 PS2PS0: dùng để lựa chọn tốc độ đếm của timer 0 hay của
WDT(thời gian chờ của WDT) trước khi reset thiết bò.
PS2 PS1 PS0 Tốc độ timer 0 Tốc độ của WDT Thời gian chờ

WDT
000 1:2 1:1 18 ms
001 1:4 1:2 36 ms
010 1:8 1:4 72 ms
011 1:16 1:8 144 ms
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
100 1:32 1:16 288 ms
101 1:64 1:32 576 ms
110 1:128 1:64 1.1 s
111 1:256 1:128 2.3 s
Trong đó, các kí hiệu 1: x có nghóa là cứ sau x chu kì máy thì giá trò
timer 0 hay WDT sẽ được tăng lên 1 đơn vò
(1 chu kì máy =4/tần số dao động của thạch anh).
Vd: đối với thạch anh 4MHz thì 1 chu kì máy là 1us.
o Hoạt động của bộ đònh thời
Có hai chế độ hoạt động cho timer 0:
 Chế độ đònh thời: giá trò của timer 0 chứa trong thanh ghi TMR0 sẽ
tăng lên1 sau mỗi x chu kì máy (với 1:x là tỉ lệ prescaler ). Nếu
TMR0 đươc nạp giá trò mới, giá trò này sẽ không được tăng trong 2
chu kì máy kế tiếp. Để khắc phục hiện tượng này, ta thường hiệu
chỉnh giá trò được lưu vàøo trong timer 0.
 Chế độ đếm: TMR0 sẽ tăng lên khi có cạnh lên hay cạnh xuống của
xung xuất hiện tại chân T0CKL (chân số 6)
o Ngắt timer 0
Ngắt trong timer 0 chỉ xảy ra khi giá trò trong TMR0 tràn từ FFh xuống
00h. Khi xảy ra tràn, cờ báo tràn T0IF được bật lên vàø phải được xóa bằng
phần mềm trong chương trình phục vụ ngắt (ISR) trước khi trở về chương
trình chính.
Ngắt này được cho phép bởi bit T0IE. Ngắt này cũng không làm vi điều
khiển thoát khỏi trạng thái ngủ.

o Bộ Prescaler của timer 0
Một bộ đếm 8 bit được sử dụng như là bộ pre-scaler cho timer 0hay bộ
post-scaler cho WDT. Bit PSA sẽ quyết đònh bộ đếm này được sử dụng cho
timer 0 hay WDT. 3 bit PS2PS0 sẽ xác đònh tỉ lệ bộ đếm.
Hình sau đây trình bày sơ đồ bộ prescaler cho timer 0 vàø WDT
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Bộ đònh thời timer 1
o Giới thiệu
Timer 1 là mộtbộ đònh thời/đếm 16 bit bao gồm 2 thanh ghi 8 bit là
TMR1H vàø TMR1L, có khả năng đọc vàø ghi được. Cặp thanh ghi này đếm
từ 0000H đến FFFFH rồi trở về 0000H.
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Sơ đồ bộ đònh thời timer 1
o Thanh ghi điều khiển (T1CON)
- - TICKPS1 TICKPS0 T10SEN T1SYNC TMR1CS TMR1ON
Bit7 bit 0
Trong đó, chức năng các bit như sau:
 Bit 7:6: không sử dụng
 Bit 5:4: TICKPS1:T1CKPS0: chọn tỉ lệ xung ngõ vàøo cho timer 1
TCKPS1:T1CKPS0 Giá trò tỉ lệ
00 1:1
01 1:2
10 1:4
11 1:8
 T10SEN: cho phép bộ dao động timer1. Nếu bit này bằng 1: dao
động được cho phép. Nếu bit này bằng 0: doa động bò cấm.
 T1SYNC: lựa chọn đồng bộ hóa xung clock ngòai của timer 1. Khi
nó bằng 1: không đồng bộ hóa xung clock ngoài. Khi bit này bằng
0: đồng bộ hóa xung clock ngoài.
 TM1CS: bit chọn nguồn xung clock cho timer 1. Nếu bit này bằng 1:

chọn xung clock ngoài đưa qua hai chân T1OSO/T1CKI (tác động
theo cạnh lên của xung). Nếu bit này bằng 0: chọn xung clock nội
(Fosc/4)
 TMR1ON: cho phép hoặc ngưng timer 1
CHƯƠNG 1 -LÍ THUYẾT VỀ PIC 16F877A
Nếu bit này bằng 1: cho phép timer 1
Nếu bit này bằng 0: không cho phép timer 1.
o Hoạt động của bộ đònh thời timer 1
Timer 1 có ba chế độ hoạt động:
 Chế độ hoạt động đònh thời đồng bộ: xung cấp cho timer 1 là
Fosc/4. TMR1CS=0, T1SYNC không có tác dụng.
 Chế độ đếm đồng bộ: Giá trò bộ đếm sẽ tăng lên khi có xung cạnh
lên tại chân T1OSI/RC1. Xung clock ngoài này phải được đồng bộ
với xung clock nội. Chế độ đếm đồng bộ sẽ không hoạt đông trong
Sleep Mode.
 Chế độ đếm không đồng bộ: (được đặt bằng các set bit T1SYNC lên
1). Bộ đònh thời sẽ tiếp tục đếm trong quá trình ngủ của PIC
16F877A vàø có thể xảy ra một ngắt khi bộ đònh thời tràn vàø làm
cho PIC 16F877A thoát khỏi chế độ ngủ. Ở chế độ này, để đọc giá
trò timer, ta không cần dừng timer1, nhưng để đảm bảo việc ghi là
chính xác, ta phải dừng timer.
o Bộ dao động riêng của timer 1: ta có thể xây dựng một bộ dao động riêng
cho timer 1 (độc lập với bộ dao động của PIC 16F877A) nhờ đó, bộ đếm có
thể hoạt động ngay cả khi pic 16f877a rơi vàøo trạng thái ngủ.
o Ngắt timer 1: xảy ra khi giá trò trong hai thanh ghi TMR1 có sự tràn từ
FFFFH xuống 0000H. Khi xảy ra tràn, cờ TMR1IF được bật lên vàø phải
được xóa bằng phầm mềm trước khi thoát khỏi chương trình phục vụ ngắt
(isr) trở về chương trình chính. Ngắt này cũng không làm cho PIC 16F877A
thoát khỏi trạng thái ngủ, chỉ có chế độ đếm không đồng bộ mới làm cho
PIC 16F877A thoát khỏi trạng thái ngủ.

Bộ đònh thời timer 2
o Giới thiệu
Bộ đònh thời timer 2 là một bộ đònh thời 8 bit bao gồm một bộ prescaler vàø
một bộ postscaler vàø một thanh ghi chu kì PR2. Có thể kết hợp timer 2 với
hai bộ đònh tỉ lệ trên cho phép PIC 16F877A hoạt động như một bộ đếm 16
bit. Module timer 2 cung cấp thời gian hoạt động cho chế độ điều rộng
xung (PWM) nếu module CCP được chọn.
o Thanh ghi điều khiển (T2CON)
- TOUTP
S3
TOUTP
S2
TOUTP
S1
TOUTP
S0
TMR2O
N
T2CKP
S1
T2CKP
S0

×