1
CHƯƠNG 2
CẤU TRÚC PHẦN
CỨNG PIC 16F877A
1. Cấu trúc tổng quát của PIC16F877A
8K x 14 words Flash ROM.
368 x 8 Bytes RAM.
256 x 8 Bytes EEPROM.
5 Port xuất/nhập (A, B, C, D, E) tương ứng 33 chân.
2 Bộ định thời 8 bit Timer 0 và Timer 2.
1 Bộ định thời 16 bit Timer 1, có thể hoạt động ở chế độ
tiết kiệm năng lượng (SLEEP MODE) với nguồn xung
clock ngoài.
2 Bộ CCP Capture/ Compare/ PWM.
(Bắt Giữ/ So Sánh/ Điều Biến Xung)
1 Bộ biến đổi Analog to Digital 10 bit, 8 ngõ vào.
2
1. Cấu trúc tổng qt của PIC16F877A
1 Bộ định thời giám sát (Watch Dog Timer).
Giao tiếp song song 8 bit (PSP).
Giao tiếp nối tiếp(MSSP,USART).
15 Nguồn ngắt (Interrupt).
Chế độ tiết kiệm năng lượng (Sleep Mode).
Nạp chương trình bằng cổng nối tiếp ( ICSP™ )
Tập lệnh gồm 35 lệnh có độ dài 14 bit.
Tần số hoạt động tối đa 20 MHz.
2. Sơ đồ và chức năng các chân PIC16F877A
PIC16F877A là họ Vi điều khiển có 40 chân(dạng PDIP)
3
2. Sơ đồ và chức năng các chân PIC16F877A
PIC16F877A là họ vi điều khiển có 40 chân (dạng TQFP)
2. Sơ đồ và chức năng các chân PIC16F877A
Cấu tạo tổng quát của PIC16F877A
4
Port A gồm 6 chân từ RA5-RA0.
Việc ghi các giá trị vào thanh ghi TRISA
sẽ qui định các chân của PortA. Nếu bằng 0:
ngõ Output, bằng 1: ngõ Input.
Chân RA0/AN0
RA0: Xuất/ nhập số
AN0: Ngõ vào tương tự kênh 0
Chân RA1/AN1
RA1: Xuất/ nhập số
AN1: Ngõ vào tương tự kênh 1
2.1 PORTA và thanh ghi TRISA
Chân RA2/AN2/VREF-/CVREF
RA2: Xuất/ nhập số
AN2: Ngõ vào tương tự kênh 2
VREF-: Ngõ vào điện áp chuẩn (thấp) của bộ A/D
CVREF: Điện áp tham chiếu ngõ ra bộ so sánh
Chân RA3/AN3/VREF+
RA3: Xuất/ nhập số
AN3: Ngõ vào tương tự kênh 3
VREF+: Ngõ vào điện áp chuẩn (cao) của bộ A/D
2.1 PORTA và thanh ghi TRISA
5
Chân RA4/T0CKI/C1OUT
RA4: Xuất/ nhập số
T0CKI: Ngõ vào xung clock bên
bên ngoài cho Timer0
C1OUT: Ngõ ra bộ so sánh 1
Chân RA5/AN4/SS/C2OUT
RA5: Xuất/ nhập số
AN4: Ngõ vào tương tự kênh 4
SS : ngõ vào chọn lựa SPI
C2OUT: Ngõ ra bộ so sánh 2
2.1 PORTA và thanh ghi TRISA
Port B gồm 8 chân từ RB7-RB0.
Việc ghi các giá trị vào thanh ghi TRISB
sẽ qui định các chân của PortB. Nếu bằng 0:
ngõ Output, bằng 1: ngõ Input.
RB0/INT:
RB0: Xuất/ nhập số
INT: ngõ vào nhận tín hiệu ngắt RB0
RB1: xuất/nhập số
RB2: xuất/nhập số
RB3/PGM:
RB3: xuất/nhập số
PGM: chân cho phép lập trình điện áp thấp ICSP
2.2 PORTB và thanh ghi TRISB
6
RB4: xuất/nhập số
RB5: xuất/nhập số
RB6/PGC:
RB6: xuất/nhập số
PGC: mạch gỡ rối và xung clock lập trình ICSP
RB7/PGD:
RB7: xuất/nhập số
PGD: mạch gỡ rối và dữ liệu lập trình ICSP
2.2 PORTB và thanh ghi TRISB
Port C gồm 8 chân từ RC7-RC0.
Việc ghi các giá trị vào thanh ghi TRISC
sẽ qui định các chân của PortC. Nếu bằng 0:
ngõ Output, bằng 1: ngõ Input.
RC0/T1OSO/T1CKI:
RC0: Xuất/ nhập số
T1OSO: ngõ ra bộ dao động Timer1
T1CKI: ngõ vào xung clock bên ngoài Timer1
RC1/T1OSI/CCP2:
RC1: Xuất/ nhập số
T1OSI: ngõ vào bộ dao động Timer1
CCP2: ngõ vào Capture 2, ngõ ra so sánh 2, ngõ ra PWM2
2.3 PORTC và thanh ghi TRISC
7
RC2/CCP1:
RC2: Xuất/ nhập số
CCP1: ngõ vào Capture 1, ngõ ra so sánh
1, ngõ ra PWM1
RC3/SCK/SCL:
RC3: Xuất/ nhập số
SCK: Ngõ vào xung clock nối tiếp đồng bộ/ ngõ ra chế độ SPI
SCL: Ngõ vào xung clock nối tiếp đồng bộ/ ngõ ra chế độ I2C
RC4/SDI/SDA:
RC4: Xuất/ nhập số
SDI: Ngõ vào data SPI
SDA: Xuất/ nhập dữ liệu I2C
RC5/SDO:
RC5: Xuất/ nhập số
SDO: Ngõ ra data SPI
2.3 PORTC và thanh ghi TRISC
RC6/TX/CK:
RC6: Xuất/ nhập số
TX: Truyền bất đồng bộ USART
CK: Xung đồng bộ USART
RC7/RX/DT:
RC7: Xuất/ nhập số
RX: Nhận bất đồng bộ USART
DT: Dữ liệu đồng bộ USART
2.3 PORTC và thanh ghi TRISC
8
2.4 PORTD và thanh ghi TRISD
Port D gồm 8 chân từ RD7-RD0.
Các giá trị thanh ghi TRISD sẽ qui định các chân của PortD.
Nếu bằng 0: ngõ Output, bằng 1: ngõ Input.
Ngoài chức năng là Port xuất / nhập, Port D còn được cấu hình như
một Port vi xử lý 8 bit (parallel slave port) bằng cách set bit
PSPMODE (TRISE<4>).
RD0/PSP0:
RD0: Xuất/nhập số
PSP0: Dữ liệu Port tớ song song
Các chân còn lại PORTD giống RD0.
Port E gồm 3 chân từ RE2-RE0.
Các giá trị thanh ghi TRISE
sẽ qui định các chân của PortE.
Nếu bằng 0: ngõ Output, bằng 1: ngõ Input.
RE0 /RD/AN5:
RE0: Xuất/ nhập số
RD: cho phép đọc dữ liệu song song từ các ngoại vi
AN5: Ngõ vào tương tự kênh 5
2.5 PORTE và thanh ghi TRISE
9
RE1 /WR/AN6:
RE1: Xuất/ nhập số
WR: cho phép ghi dữ liệu song song
từ các ngoại vi
AN6: Ngõ vào tương tự kênh 6
RE2 /CS/AN7:
RE2: Xuất/ nhập số
CS: Chip chọn lựa điều khiển port tớ song song
AN7: Ngõ vào tương tự kênh 7
2.5 PORTE và thanh ghi TRISE
2.6 Chân OSC1- OSC2
PIC 16F877A có bộ dao động hoạt động ở 4 trường hợp
- LP Low Power Crystal
- XT Crystal/Resonator
- HS High Speed Crystal/Resonator
- RC Resistor/Capacitor
RC LP, XT, HS
10
2.7 Chân MCLR (Master Reset)
- Chân MCLR\ là chân reset ở mức thấp.
- Đa hợp với chân Vpp là chân nhận điện áp trong chế độ lập trình
cho PIC.
2.8 Chân cấp nguồn
PIC 16F877A hoạt động với điện áp +5V.
- Hai chân VDD (số 11 và 32) nối với cực dương nguồn 5V
- Hai chân VSS (số 12 và 31) nối với Mass
Tất cả 4 chân này đều phải được kết nối thì PIC mới hoạt động.
3. Tổ chức bộ nhớ
PIC16F877A bao gồm 3 khối bộ nhớ riêng biệt:
- Bộ nhớ chương trình (Program Memory)
- Bộ nhớ dữ liệu (Data Memory)
- Bộ nhớ dữ liệu EEPROM (EEPROM data Memory)
11
3.1 Bộ nhớ chương trình
Gồm có 8K x 14 words
bộ nhớ Flash ROM.
Gồm 1 thanh ghi bộ đếm
chương trình 13 bit (PC).
(Program Counter)
Vector Reset đặt tại 0000h
khi xảy ra Reset.
Vector Ngắt đặt tại 0004h
khi xảy ra Ngắt.
3.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu được chia thành 4 Bank: Bank 0, Bank 1, Bank 2 và
Bank 3.
Mỗi Bank có dung lượng là 128 byte bao gồm: vùng Ram đa mục
đích , vùng Ram chứa các thanh ghi chức năng đặc biệt SFRs (Special
Function Registers ).
Các Bank này được lựa chọn bởi 2 bit RP1 và RP0 nằm trong thanh
ghi STATUS.
RP1 RP0 Bank
0 0 Bank 0
0 1 Bank 1
1 0 Bank 2
1 1 Bank 3
12
3.2 Bộ nhớ dữ liệu
Vùng RAM đa mục đích gồm các ô nhớ 8 bit và được
truy xuất trực tiếp hoặc gián
tiếp thông qua thanh ghi FSR
(File Select Register)
Vùng RAM chứa các
thanh ghi chức năng đặc biệt,
các thanh ghi này được truy
xuất bởi CPU và các hàm chức
năng ngoại vi để điều khiển
hoạt động của các thiết bị
ngoại vi.
3.2.1 Các thanh ghi chức năng đặc biệt
a. Thanh ghi STATUS
Bit Chức năng
C Cờ nhớ(Carry/Borrow bit) dùng cho phép cộng trừ
1: Phép cộng có nhớ và phép trừ có mượn tại bit 7
0: Ngược lại
DC Cờ nhớ phụ(Digit Carry/Borrow bit) ở phép cộng trừ 4 bit thấp
1: Phép cộng có nhớ và phép trừ có mượn tại bit 3
0: Ngược lại
Z Cờ Zero
1: Khi kết quả các phép toán số học và phép logic bằng 0
0: Ngược lại
PD\ (Power-down) Bit báo chế độ nguồn giảm
1: khi chế độ nguồn bình thường hoặc sau lệnh CLRWDT
0: khi VĐK ở chế độ SLEEP(chế độ nghĩ-nguồn thấp)
13
a. Thanh ghi STATUS(tt)
Bit Chức năng
TO\ (Time-out) Bit báo trạng thái WDT
1: Ở trạng thái nguồn bình thường, hoặc sau lệnh CLRWDT, SLEEP
0: Khi WDT đi vào hoạt động và thời gian chờ được tính
RP1,
RP0
2 bit chọn bank thanh ghi (dùng địa chỉ trực tiếp)
RP1RP0=00,01,10,11chọn bank 0,1,2,3
IRP Bit chọn bank thanh ghi(dùng địa chỉ gián tiếp)
1: Chọn bank 2,3
0: Chọn bank 0,1
b. Thanh ghi OPTION
Bao gồm các Bit thiết lập bộ chia tỉ lệ cho WDT/Timer0, Ngắt
ngoài RB0, Timer0 và chế độ có điện trở treo ở PortB.
Bit Chöùc naêng
PS0
Bit chọn lựa hệ số tỉ lệ
của bộ chia Prescaler
PS1
PS2
PSA
Bit gán bộ chia tỉ lệ(Prescaler Assignment bit)
1: bộ chia được gán cho WDT
0: bộ chia được gán cho TIMER
14
b. Thanh ghi OPTION
Bit Chức năng
T0SE Bit chọn kiểu tác động Timer0(TMR0 Source Edge Select bit)
1: cho phép chọn xung vào ngõ RA4/T0CKI tác động bởi cạnh lên
0: cho phép chọn xung vào ngõ RA4/T0CKI tác động bởi cạnh xuống
T0CS Bit chọn nguồn xung clock cho Timer0(TMR0 Source Edge Select bit)
1: cho phép nhận xung clock từ chân RA4/T0CKI
0: cho phép nhận xung clock từ bộ dao động nội
INTEDG
Bit chọn kiểu tác động nguồn ngắt(Interrupt Edge Select bit)
1: cho phép ngõ vào ngắt RB0/INT tác động ở cạnh lên
0: cho phép ngõ vào ngắt RB0/INT tác động ở cạnh xuống
RBPU\ Bit cho phép PORTB treo điện trở lên nguồn
1: không cho phép
0: cho phép
RBx
HIGH
LOW
c. Thanh ghi INTCON
Bao gồm các Cờ báo ngắt và các Bit cho phép Ngắt Timer0,
Ngắt do sự thay đổi các chân PortB và Ngắt ngoài chân RB0/INT.
Bit Chức năng
RBIF Cờ báo khi có sự thay đổi trạng thái ở PortB
1: khi có sự thay đổi trạng thái ít nhất 1 chân tại RB7-RB4
0: khi không có sự thay đổi ở PortB
INTF
Cờ báo ngắt ngoài tại chân RB0/INT
0: khi không có ngắt ngoài tại RB0/INT
1: khi có ngắt ngoài tại RB0/INT xảy ra
T0IF Cờ báo tràn của Timer0
0: khi bộ đếm Timer0 chưa tràn
1: khi bộ đếm Timer tràn
RBIE Bit cho phép ngắt ngoài tại PortB
1: cho phép xảy ra ngắt khi trạng thái PortB thay đổi
0: không cho phép
15
c. Thanh ghi INTCON
Bit Chức năng
INTE
Bit cho phép ngắt ngoài tại chân RB0/INT
1: cho phép ngắt ngoài tại chân RB0/INT
0: không cho phéo
T0IE
Bit cho phép ngắt tràn Timer0
1: cho phép ngắt khi tràn Timer0
0: không cho phép
PEIE
Bit cho phép ngắt ngoại vi
1: cho phép ngắt ngoại vi
0: không cho phép
GIE Bit cho phép ngắt toàn cục
1: cho phép các ngắt
0: cấm các ngắt
d. Thanh ghi PIE1
Bao gồm các bit cho phép các ngắt ngoại vi(chú ý PEIE=1)
Bit Chức năng
TMR1IE Bit cho phép ngắt tràn Timer1
1: cho phép ngắt khi xảy ra khi tràm Timer1
0: không cho phép
TMR2IE Bit cho phép ngắt tràn Timer2 bởi thanh ghi PR2
1: cho phép ngắt
0: không cho phép ngắt
CCP1IE Bit cho phép ngắt CCP1(ở chế độ so sánh và bắt giữ)
1: cho phép ngắt
0: không cho phép ngắt
SSPIE Bit cho phép ngắt ở Port nối tiếp(Synchronous Serie Port IE)
1: cho phép ngắt bởi chế độ hoạt động Port nốt tiếp
0: không cho phép
16
d. Thanh ghi PIE1(tt)
Bit
Chức năng
TXIE Bit cho phép ngắt khi truyền dữ liệu USART
1: cho phép ngắt
0: không cho phép ngắt
RCIE Bit cho phép ngắt khi nhận dữ liệu USART
1: cho phép ngắt
0: không cho phép ngắt
ADIE
Bit cho phép ngắt chuyển đổi A/D
1: cho phép ngắt
0: không cho phép ngắt
PSPIE
Bit cho phép ngắt khi ghi/đọc Port song song
1: cho phép ngắt
0: không cho phép ngắt
e. Thanh ghi PIR1
Bao gồm các cờ cho phép từng ngắt ngoại vi
Bit Chức năng
TMR1IF Cờ báo tràn ở ngắt Timer1
1: khi xảy ra tràn Timer1
0: không xảy ra tràn Timer1
TMR2IF Cờ báo tràn ở ngắt Timer2 bởi thanh ghi PR2
1: khi xảy ra tràn Timer2
0: không xảy ra tràn Timer2
CCP1IF Cờ báo ngắt CCP1( ở chế độ so sánh và bắt giữ)
-So sánh:
1: khi giá trị so sánh thanh ghi TMR1 được thỏa
0: khi giá trị so sánh thanh ghi TMR1 không thỏa
-Bắt giữ:
1: thanh ghi bắt nhịp TMR1 có xảy ra(xóa bằng phần mềm)
0: thanh ghi bắt nhịp TMR1 không xảy ra
17
e. Thanh ghi PIR1(tt)
Bit Chöùc naêng
SSPIF Cờ báo ngắt ở chế độ Port nối tiếp đồng bộ
1: khi quá trình truyền nhận port nối tiếp hoàn thành
0: không xảy ra
TXIF Cờ báo ngắt truyền USART
1: bộ đệm truyền của USART còn trống
0: bộ đệm truyền của USART đầy
RCIF Cờ báo ngắt nhận USART
1: USART nhận xong
0: USART nhận chưa xong
ADIF Cờ báo ngắt bộ chuyển đổi A/D
1: quá trình chuyển đổi A/D hoàn tất
0: quá trình chuyển đổi A/D chưa hoàn tất
e. Thanh ghi PIR1(tt)
Bit
Chức năng
PSPIF Cờ báo ngắt của quá trình ghi/đọc port song song
1: khi hoạt động ghi/đọc xảy ra
0: không xảy ra
18
f. Thanh ghi PIE2
Gồm các Bit cho phép Ngắt ngoại vi CCP2, ngắt do bộ s sánh, ngắt
do xung đột đường truyền SSP, ngắt khi ghi EEPROM.
Bit Chức năng
CCP2IE Bit cho phép ngắt CCP2
1: cho phép
0: không cho phép
BCLIE Bit cho phép ngắt khi có sự xung đột đường truyền
1: cho phép
0: không cho phép
EEIE
Bit cho phép ngắt ở quá trình ghi vào EEPROM
1: cho phép
0: không cho phép
CMIE Bit cho phép ngắt ở bộ so sánh
1: cho phép
0: không cho phép
g. Thanh ghi PIR2
Gồm các cờ ngắt ở ngắt ngoại vi CCP2, ngắt do bộ s sánh, ngắt do
xung đột đường truyền SSP, ngắt khi ghi EEPROM.
Bit
Chức năng
CCP2IF Cờ báo ngắt CCP2
Chế độ so sánh: 1: khi giá trị so sánh ở thanh ghi TMR1 được thỏa
Chế độ bắt giữ: 1: khi có sự bắt nhịp ở thanh ghi TMR1 xảy ra
BCLIF Cờ báo ngắt khi có sự xung đột đường truyền
1: xung đột đường truyền xảy ra ở quá trình SSP
0: không có xung đột đường truyền xảy ra ở quá trình SSP
EEIF Cờ báo ngắt ở quá trình ghi vào EEPROM
1: khi quá trình ghi EEPROM hoàn thành
0: khi quá trình ghi EEPROM chưa hoàn thành
CMIF
Cờ báo ngắt ở bộ so sánh
1: khi ngõ vào bộ so sánh thay đổi, 0: không thay đổi
19
h. Thanh ghi PCON
Gồm các bit kiểm tra trạng thái các chế độ Reset của PIC
Bit Chức năng
BOR\ Bit trạng thái ở chế độ Brown-Out Reset
0: khi chế độ Reset Brown-Out xảy ra( được set bằng phần mềm)
1: không xảy ra
POR\ Bit trạng thái ở chế độ Power-On Reset
0: khi chế độ Reset Power-on xảy ra( được set bằng phần mềm)
1: không xảy ra
Thanh ghi FSR và INDF là cặp thanh ghi luôn được sử dụng cùng nhau
trong chế độ định địa chỉ gián tiếp. Để chọn bank thanh ghi có chứa
thanh ghi cần truy cập thì cần kết hợp giữa thanh ghi FSR và STATUS
i. Thanh ghi INDF và INDF
20
Thanh ghi FSR trỏ đến thanh ghi cần truy cập
Thanh ghi INDF chứa nội dung thanh ghi có địa chỉ nằm trong FSR
Ví dụ: FSR=55h, INDF=100 thì thanh ghi 55h có giá trị là 100
Thanh ghi INDF không phải là một thanh ghi vật lý. Nó chứa giá trị
của thanh ghi có địa chỉ được lưu trữ ở thanh ghi FSR.
i. Thanh ghi INDF và INDF
Có độ rộng 13 bit, 8 bit thấp được chứa trong thanh ghi PCL, 5 bit
cao không thể đọc nhưng có thể ghi gián tiếp vào thanh ghi PCH
thông qua thanh ghi PCLATH. Khi reset thì 5 thanh ghi này bị xóa
Hình bên trình bày cách thức
thanh ghi PC được nạp giá trị
thông qua lệnh CALL hoặc
lệnh GOTO.
j. Thanh ghi PC (Program Counter)
21
PIC16F877A có gồm 8 ngăn xếp có độ rộng 13 bit, con trỏ ngăn xếp
không thể Ghi hay Đọc.
Địa chỉ của PC được cất vào ngăn xếp khi thực hiện lệnh CALL hay
khi Ngắt xảy ra.
Dữ liệu của Ngăn xếp được lấy ra khi thực hiện các lệnh RETURN,
RETLW và RETFIE
Thanh ghi PCLATH không bị ảnh hưởng khi cất và lấy data từ Ngăn
xếp.
Ngăn xếp hoạt động theo vòng kín, nghĩa là khi cất data vào ngăn
xếp lần thứ 9 sẽ ghi chồng lên data lần thứ 1,….
j. Ngăn xếp (stack)
3.2.2 Thanh ghi W và tập thanh ghi F
Thanh ghi W (Working Register): là thanh ghi đa dụng dùng để truy
xuất dữ liệu.
Tập thanh ghi F (Register File): F được chỉ định là 1 ô nhớ hay thanh
ghi trong bộ nhớ dữ liệu.
Ví dụ:
MOVLW 0x06 ;Đưa giá trị 06h vào W
MOVWF 85H ;Chuyển giá trị th.ghi W
vào th.ghi TRISA (TRISA = 85H)