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
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
+ 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.
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
• 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
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.
đượ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
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
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.
PS2PS0: 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ờ
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 PS2PS0 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:
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