CẤU TRÚC PHẦN CỨNG CỦA PIC16F877A
Sơ lược về vi điều khiển PIC16F877A
PIC 16F877A là một trong những dòng vi điều khiển phổ biến nhất hiện nay nhờ vào sức mạnh tính năng vượt trội, với 40 chân và bộ nhớ đủ lớn 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 rất linh hoạt và dễ sử dụng, phù hợp cho nhiều dự án điện tử khác nhau.
- 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập
- 2 bộ định thời 8 bits (Timer 0 và Timer 2)
- 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
- 2 bộ CCP( Capture / Compare/ PWM)
- 1 bộ biến đổi ADC 10 bits, 8 ngõ vào
- 2 bộ so sánh tương tự (Compartor)
- 1 bộ định thời giám sát (WatchDog Timer)
- Một cổng song song 8 bits với các tín hiệu điều khiển
- Có chế độ tiết kiệm năng lượng
- Nạp chương trình bằng cổng nối tiếp ICSP
- Được chế tạo bằng công nghệ CMOS
- 35 tập lệnh có độ dài 14 bits
- Tần số hoạt động tối đa 20MHz
SVTH:ĐẶNG ANH DUY MSSV:20762046 2
Sơ lược về các chân pic 16F877A
PIC16F877A là một dòng vi điều khiển 40 chân, với mỗi chân đảm nhiệm một chức năng riêng biệt Nhiều chân trong số đó là chân đa công dụng, cho phép hoạt động như đường xuất nhập hoặc làm chân chức năng đặc biệt để giao tiếp với các thiết bị ngoại vi.
SVTH:ĐẶNG ANH DUY MSSV:20762046 3
SVTH:ĐẶNG ANH DUY MSSV:20762046 4
Bộ nhớ dữ liệu
Bảng đồ cấu trúc bộ nhớ dữ liệu P16F877A
Các thanh ghi chức năng đặc biệt
1.4.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
SVTH:ĐẶNG ANH DUY MSSV:20762046 5
Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián tiếp)
Bit 6 – 5 RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ trực tiếp)
00 = Bank 0 (00h – 7Fh) Each bank is 128 bytes 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
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
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
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
1.4.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 các chức năng như ngắt ngoài, Timer 0, kéo lên Vdd của chân Port B và thời gian chờ của WDT.
SVTH:ĐẶNG ANH DUY MSSV:20762046 6
Bit 7 RBPU : 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: Cho phép PORTB kéo lên nguồ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
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
1.4.3 Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):
Bit 7 GIE: Bit cho phép ngắt toàn cục
1: Cho phép ngắt toàn cục
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ông cho phép ngắt ghi vào EEPROM hoạ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
SVTH:ĐẶNG ANH DUY MSSV:20762046 7
Bit 2 TMR0IF: Cờ báo ngắt Timer 0
Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT
Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB
0: Không có thay đổi xảy ra trên PORTB
1.4.4 Thanh ghi cho phép ngắt ngoại vi 1(PIE1 Register):
Chú ý: Bit PEIE (INTCON) 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
Bit 6 ADIE: Bit cho phép ngắt chuyển đổi A/D
Bit 5 RCIE: Bit cho phép ngắt nhận USART
Bit 4 TXIE: Bit cho phép ngắt truyền USART
Bit 3 SSPIE: Bit cho phép ngắt Port nối tiếp đồng bộ
Bit 2 CCP1IE: Bit cho phép ngắt module CCP1
SVTH:ĐẶNG ANH DUY MSSV:20762046 8
Bit 1 TMR2IE: Bit cho phép ngắt xảy ra khi TMR2 bằng thanh ghi PR2
Bit 0 TMR1IE: Bit cho phép ngắt tràn TMR1
1.4.5 Thanh ghi cờ của các ngắt ngoại vi 1:
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
Bit 4 TXIF: Cờ báo ngắt phát USART
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
Bit 2 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):
SVTH:ĐẶNG ANH DUY MSSV:20762046 9
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.6 Thanh ghi cho phép ngắt ngoại vi 2:
Chú ý: Bit PEIE (INTCON) phải được set để cho phép bất kì ngắt ngọai vi nào xảy ra
Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh điện thế
Bit 4 EEIE: Bit cho phép ngắt do ghi EEPROM
Bit 3 BCLIE: Bit cho phép ngắt do xung đột bus
Bit 0 CCP2IE: Cho phép ngắt module CCP2
SVTH:ĐẶNG ANH DUY MSSV:20762046 10
1.4.7 Thanh ghi cờ của các ngắt ngoại vi 2:
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
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
PCL và PCLATH
Bộ đếm chương trình PC (program counter) có độ dài 13 bit, lưu trữ địa chỉ của lệnh tiếp theo sẽ được thực thi Byte thấp được lưu trong thanh ghi PCL cho phép đọc/ghi trực tiếp, trong khi các bit cao (bit 12:8) nằm trong thanh ghi PCLATH không thể đọc nhưng có thể ghi gián tiếp Khi xảy ra bất kỳ sự Reset nào, các bit cao của bộ đếm chương trình PC sẽ bị xóa Dưới đây là hai ví dụ để minh họa hoạt động của bộ đếm chương trình PC.
SVTH:ĐẶNG ANH DUY MSSV:20762046 11
Stack cho phép thực hiện 8 lệnh gọi chương trình con và ngắt hoạt động, lưu trữ địa chỉ mà chương trình chính sẽ quay về sau khi hoàn thành lệnh gọi Đối với vi điều khiển PIC16F877A, stack có độ sâu 8 lớp, và nó không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu.
1.5.2 Đị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
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:
EEPROM là loại bộ nhớ cho phép đọc và ghi dữ liệu trong điều kiện hoạt động bình thường, với nguồn Vdd ổn định Bộ nhớ này không được định địa chỉ trực tiếp trong bản đồ bộ nhớ mà sử dụng các thanh ghi chức năng đặc biệt để định địa chỉ gián tiếp.
SVTH:ĐẶNG ANH DUY MSSV:20762046 12
Thanh ghi EEDATA lưu giữ giá trị 8 bit để ghi hoặc đọc dữ liệu, trong khi thanh ghi EEADR lưu giữ địa chỉ cho phép truy cập 256 byte EEPROM Thanh ghi EECON1 chứa các bit điều khiển, và thanh ghi EECON2 được sử dụng để khởi tạo quá trình ghi hoặc đọc dữ liệu.
I/O ports
1.6.1 Port A và thanh ghi TRISA:
Port A bao gồm 6 chân từ RA0 đến RA5, và việc ghi giá trị vào thanh ghi TRISA sẽ xác định chế độ của các chân này là input hay output (1 cho input, 0 cho output) Để kiểm tra trạng thái của các chân, người dùng có thể đọc thanh ghi Port A Ngoài ra, việc ghi giá trị vào thanh ghi Port A sẽ làm thay đổi trạng thái của các chân trong Port A.
Chân RA4 của Port A có chức năng cung cấp xung clock ngoài cho Timer 0 (RA4/T0CKI), trong khi các 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 các chân này được điều khiển qua các bit trong các thanh ghi ADCCON1 và CMCON1 Để sử dụng các chân của Port A làm ngõ vào Analog, các bit trong thanh ghi TRISA cần được thiết lập bằng 1.
SVTH:ĐẶNG ANH DUY MSSV:20762046 13
1.6.2 Port B và thanh ghi TRISB:
Port B có 8 chân từ RB0 đến RB7 Ghi giá trị vào thanh ghi TRISB xác định chế độ của các chân Port B, với 1 biểu thị chân là input và 0 biểu thị chân là output Việc đọc thanh ghi Port cho phép kiểm soát và quản lý dữ liệu.
B sẽ đọc trạng thái của các chân ở Port B Việc ghi giá trị vào thanh ghi Port B sẽ thay đổi trạng thái của các chân Port B
Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger và Low Voltage Programming function: RB3/PGM, RB6/PGC, RB7/PGD
Mỗi chân Port B được trang bị một transistor kéo lên Vdd, hoạt động khi bit RBPU (Option ) bị xóa Chức năng này sẽ tự động tắt khi Port B được thiết lập làm đầu vào.
Các chân Port B từ RB7 đến RB4 có chức năng ngắt khi trạng thái của chúng thay đổi Chức năng này không hoạt động khi Port B được thiết lập là đầu ra Giá trị của chân Port sẽ được so sánh với giá trị đã lưu trước đó, và ngắt sẽ xảy ra khi có sự sai lệch giữa hai giá trị.
SVTH:ĐẶNG ANH DUY MSSV:20762046 14 này ngắt sẽ xảy ra với cờ ngắt RBIF (INTCON