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ếptục hoạt động, bit PDSTATUS được reset về 0, bit TO được set, oscillator ngưng tác động và các PORT giữnguyê
Trang 1Chương 1:
CẤU TRÚC BÊN TRONG CỦA VI ĐIỀU
KHIỂN PIC 16F877A1.1 Sơ lược về Vi điều khiển PIC 16F877A:
PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng,
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ủaPIC 16F877A như sau:
-8 K Flash ROM
-368 Bytes RAM
-256 Bytes EEPROM
-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 (Timer1) 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 AD 10 bits, 6 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
-Một cổng nối tiếp
-15 nguồn ngắt
-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
-35 tập lệnh có độ dài 14 bits
-Tần số hoạt động tối đa 20MHz
Trang 21.2Sơ lược về các chân của PIC 16F877A:
Hình 1.1
Hình 1.2
Trang 6Hình 1.3
Trang 71.3 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
Hình 1.4
Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:
Trang 8Chế độ 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
→ Chu kỳ dao đông của thạch anh là Tosc = 1/Tosc= 1/10*106 (s)
Trang 101.3.3 MCLR:
PIC16F877A có một bộ lọc nhiễu ở phần MCLR 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 MCLR trên chân 4 của PIC16F877A Khi đưa chân nàyxuố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 MCLR cuống mức thấp).
Trang 11* 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)
1.3.5 Chế độ nguồn thấp Sleep (Power down Mode) :
Đây là chế độ hoạt động của vi điều khiển khilệ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ếptục hoạt động, bit PD(STATUS<3>) được reset về 0, bit TO
được set, oscillator ngưng tác độ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 vi điều khiểnlà rất nhỏ nên ta cần thực hiện các bước sau trướckhi vi điều khiển thực thi lệnh SLEEP:
Đưa tất cả các pin về trạng thái VDD hoặc VSS Tạm ngưng hoạt động cuả khối A/D và không chophép các xung clock từ bên ngoài tác động vào viđiều khiển
Để ý đến chức năng kéo lên điện trở ở PORTB Pin MCLR phải ở mức logic cao
Đánh thức vi điều khiển.
-Tác động của reset ngoại vi thông qua pin MCLR
-Tác động của WDT khi bị tràn
Trang 12reset về 0 khi vi điều khiển ở chế độ sleep Bit TO đượcreset về 0 khi WDT tác động do bộ đếm bị tràn
Ngoài ra còn có một số nguồn tác động khác từ các chức năng ngoại vi bao gồm:
-Đọc hay ghi dữ liệu thông qua PSP (Parallel Slave Port) -Ngắt Timer1 khi hoạt động ở chế độ đếm bất đồngbộ
-Ngắt CCP khi hoạt động ở chế độ Capture
-Các hiện tượng đặc biệt làm reset Timer1 khi hoạtđộng ở chế độ đếm bất đồng
bộ dùng nguồn xung clock ở bên ngoài)
- Ngắt SSP khi bit Start/Stop được phát hiện
-SSP hoạt động ở chế độ Slave mode khi truyền hoặcnhận dữ liệu
-Tác động của USART từ các pin RX hay TX khi hoạtđộng ở chế độ Slave mode đồng bộ
-Khối chuyển đổi A/D khi nguồn xung clock hoạt động ởdạng RC
-Hoàn tất quá trình ghi vào EEPROM
-Ngõ ra bộ so sánh thay đổi trạng thái Các tác độngngoại vi khác không có tác dụng đánh thức vi điềukhiển vì khi ở chế độ sleep các xung clock cung cấp cho
vi điều khiển ngưng hoạt động Bên cạnh đó cần chophép các ngắt hoạt động trước khi lệnh SLEEP đượcthực thi để bảo đảm tác động của các ngắt Việcđánh thức vi điều khiển từ các ngắt vẫn được thực thibất chấp trạng thái của bit GIE Nếu bit GIE mang giá trị
0, vi điều khiển sẽ thực thi lệnh tiếp theo sau lệnh SLEEPcủa chương trình (vì chương trình ngắt không được chophép thực thi) Nếu bit GIE được set trước khi lệnh SLEEPđược thực thi, vi điều khiển sẽ thực thi lệnh tiếp theocủa chương trình và sau đó nhảy tới địa chỉ chứachương trình ngắt (0004h) Trong trường hợp lệnh tiếp theokhông đóng vai trò quan trọng trong chương trình, ta cầnđặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác độngcủa lệnh này, đồng thời giúp ta dễ dàng hơn trongviệc kiểm soát hoạt động của chương trình ngắt Tuynhiên cũng có một số điểm cần lưu ý như sau:
Nếu ngắt xảy ra trước khi lệnh SLEEP được thực thi,lệnh SLEEP sẽ không được thực thi và thay vào đó làlệnh NOP, đồng thời các tác động của lệnh SLEEPcũng sẽ được bỏ qua
Nếu ngắt xảy ra trong khi hay sau khi lệnh SLEEPđược thực thi, vi điều khiển lập tức được đánh thức từ
Trang 13chế độ sleep, và lệnh SLEEP sẽ được thực thi ngay saukhi vi điều khiển được đánh thức
Để kiểm tra xem lệnh SLEEP đã được thực thi haychưa, ta kiểm tra bit PD Nếu bit PD vẫn mang giá trị 1tức là lệnh SLEEP đã không được thực thi và thay vàođó là lệnh NOP
Bên cạnh đó ta cần xóa WDT để chắc chắn rằng WDTđã được xóa trước khi thực thi lệnh SLEEP, qua đó chophép ta xác định được thời điểm vi điều khiển đượcđánh thức do tác động của WDT
Trang 141.3.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ạynế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ạnphả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ểmtra 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âninput thứ hai có lên mức cao hay không, nếu chân input thứ hai không lên mứccao, con Pic sẽ ngồi đó chờ và nó sẽ chỉ thoát ra khỏi chỗ ngồi của nó nếu châninput 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ươngtrình, bạn compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từngbước, từng bước một trên máy tính, bằng MPLAB chẳng hạn, có vẽ như mọichuyện đều tốt, bạn đem nạp vào con Pic Sau một thời gian chạy thử, con Picthình lình bị kẹt vào nơi nào đó trong chương trình mà không thể thoát ra đượctrạ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ạihay vẫn để cho nó bị kẹt không thoát ra được ?, đó là mụch đích của mạchwatchdog
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 độclậ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 đếnFFh, 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
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ẫntiế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
Thứ nhất, cần thời gian bao lâu để reset WDT?
Thứ hai, làm sao xoá WDT?
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động
Trang 15Mọ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.
1.4.2 Bộ nhớ dữ liệu
Trang 16
Bộ nhớ dữ liệu bao gồm 4 Bank: Bank 0, Bank1, Bank2 và Bank3 Mỗibank có dung lượng 128 Bytes, bao gồm vùng Ram đa mục đích (GPR) và vùngthanh ghi chức năng đặc biệt (SFR).
Trang 17Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS làRP0(Status<5>) và RP1(Status<6>).
- Bank 0: 96 Bytes từ địa chì 20h đến địa chỉ 7Fh
- Bank 1: 80 Bytes từ địa chì A0h đến địa chỉ EFh
- Bank 2: 96 Bytes từ địa chì 110h đến địa chỉ 16Fh
- Bank 1: 96 Bytes từ địa chì 190h đến địa chỉ 1EFh
1.4.2.2 Vùng Ram 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âmCPU hoặc các module ngoại vi để điều khiển hoạt động của VĐK Các thanh ghichứ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ứcnăng của CPU, loại thứ 2 dùng cho các chức năng ngoại vi
Trang 18Bảng tóm tắt các thanh ghi chức năng đặc biệt:
Trang 191.4.2.3 Các thanh ghi chức năng đặc biệt
1.4.2.3.1 Thanh gi 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
Trang 20Bit 6 – 5 RP1 – RP0: bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉtrực tiếp)
Bit 4 TO: time out bit
1: Lệnh xóa WDT hoặc Sleep xảy ra
0: WDT hoạt động
Bit 3 PD: Power down bit
1: Sau khi nguồn tăng hoặc có lệnh xóa WDT0: 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 bitthấ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.3.2 Thanh ghi tùy chọn (Option _Reg Register)
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
1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INTBit 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ống0: 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 WDT1: tốc độ đếm PS2:PS0 sẽ tác động lên WDT0: tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0
Trang 21Bit 2-0 PS2:PS0: Dùng để lựa chọn tốc độ đếm
Thời gian tràn WDT
1.4.2.3.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ục0: không cho phép ngắtBit 6 PEIE: bit cho phép ngắt ngọai vi
1: cho phép ngắt ngoại vi0: không cho phép
Bit 5 TMR0IE: bit cho phép ngắt khi timer 0 tràn
1: cho phép0: không cho phépBit 4 INTE:bit cho phép ngắt ngoài RB0/INT
1: cho phép0: không cho phépBit 3 RBIE: cho phép ngắt khi trạng thái PORTB thay đổi
1: cho phép0: không cho phépBit 2 TMR0IF: cờ báo ngắt Timer 0
1: Timer0 tràn0: timer 0 chưa trànBit 1 INTF: cờ báo ngắt ngoài RB0/INT
1: có ngắt0: không xảy ra ngắt
Bit 0 RBIF: cờ báo ngắt khi có thay đổi trạng thái PORTB
18 ms 36ms 72ms 144ms 288ms 576ms 1.1s 2.2s
Trang 22Chú ý: 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ép0: không cho phépBit 6 ADIE: bit cho phép ngắt chuyển đổi A/D
1: cho phép0: không cho phépBit 5 RCIE: bit cho phép ngắt nhận USART
1: cho phép0: không cho phépBit 4 TXIE: bit cho phép ngắt truyền USART
1: cho phép0: không cho phépBit 3 SSPIE: bit cho phép ngắt Port nối tiếp đồng bộ
1: cho phép 0: không cho phépBit 2 CCP1IE: bit cho phép ngắt module CCP1
1: cho phép ngắt0: không cho phépBit 1 TMR2IE: bit cho phép ngắt khi thanh ghi TMR2 bẳng thanh ghiPR2
1: cho phép0: không cho phépBit 0 TMR1IE: bit cho phép ngắt tràn TMR1
1: cho phép 0: không cho phép
Trang 231.4.2.3.4 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ành0: 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 đầy0: Buffer nhận USART trống
Bit 4 TXIF: cờ báo ngắt phát USART
1: buffer truyền USART trống0: buffer truyền USART đầyBit 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ó nắgt xảy raBit 2 CCP1IF: cờ báo ngắt CCP1
0: không xảy ra thuật toán so sánh
Chế độ PWM: không sử dụng trog 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 PR21: giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải đượcxóa bằng phần mềm)
0: giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2Bit 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
Trang 241.4.2.3.5 Thanh ghi cho phép ngắt ngoại vi 2:
Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngoại
vi nào xảy ra.
Bit 7,5,2,1 Unimplemented : read as ‘0’
Bit 6 CMIE: bi cho phép ngắt do bộ so sánh điện thế
1: cho phép0: không cho phépBit 4 EEIE: bi cho phép ngắt do ghi EEPROM
1: cho phép0: không cho phépBit 3 BCLIE: bit cho phép ngắt do xung đột bus
1: cho phép0: không cho phépBit 0 CCP2IE: cho phép ngắt d0 module CCP2
1: cho phép0: không cho phép
1.4.2.3.6 Thanh ghi cờ của các ngắt ngọai 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 0: không có xung đột bus xảy raBit 0 CCP2IF: cờ báo ngắt CPP2
Trang 251: một thuật toán so sánh trong thanh ghi TMR1 xảy ra( phải đượcxóa bằng phần mềm)
0: không xảy ra thuật toán so sánh
1.4.2.3.7 Thanh ghi điều khiển nguồn (Power control register):
Bit 7-2 Unimplemented : read as ‘0’
Trang 26Stack 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 hayngắ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.
1.4.2.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ủathanh 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
1.5 Data EEPROM và Flash Program Memory:
EEPROM là bộ nhớ có khả năng đọc và ghi trong điều kiện làm việc bìnhthường (khi nguồn Vdd không đổi) Bộ nhớ này không được định địa chỉ trựctiếp trong bản đồ bộ nhớ mà được định địa chỉ gián tiếp thông qua các thanhghi chức năng đặc biệt:
Trang 27Trong đó 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 ghinày có khả năng định địa chỉ cho 256 byte EEPROM Thanh ghi EECON1chứa các bit điều khiển còn thanh ghi EECON2 đựoc sử dụng để khởi tạo quátrình ghi /đọc.
1.6 I/O ports:
1.6.1 Port A và thanh ghi TRISA:
Trang 28
Port A gồm 6 chân từ RA0 đến RA5(I/O pin).Chức năng I/O nàyđược điều khiển bởi thanh ghi TRIS A.Nếu là 1 thì là input, nếu 0 thì làoutput ) 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ânPort A
Riêng chân RA4 được tích hợp chức năng là chân cung cấp xungclock 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ệnthế so sánh của bộ so sánh Comparator.Hoạt động của những chân nàyđược quy định bằng những bit tương ứng trong các thanh ghi ADCCON1
và CMCON1 Khi các chân của Port A được sử dụng làm ngõ vào Analogthì các bit trong thanh ghi TRISA phải được set bằng 1
Trang 30Chức năng của các chân Port A
Bảng tóm tắt các thanh ghi liên quan đến Port A
1.6.2 Port B và thanh ghi TRISB:
PORT B gồm 8 pin I/O.Thanh ghi điều khiển xuất nhập tương ứng làTRIS 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ó một transistor kéo lên Vdd Chức năng này hoạt động khibit RBPU (Option <7>) được xóa.Chức năng này sẽ tự động được xóa khiPort B được quy định là input
Bốn chân của Port B từ RB7 đến RB4 có chức năng ngắt khi trạng tháichân Port B thay đổi (Khi Port B được quy định là output thì chức năng nàykhông hoạt động Giá trị chân của Port được so sánh với giá trị đã được lưutrước đó, khi có sự sai lệch giữa 2 giá trị này ngắt sẽ xảy ra với cờ ngắt RBIF(INTCON<0) sẽ bật lên Ngắt có thể làm cho VĐK thoát khỏi trạng tháiSLEEP
Bất cứ sự truy xuất nào trên Port B sẽ xóa trạng thái sai lệch, kết thúcngắt và cho phép xóa cờ ngắt RBIF
Trang 31Bảng chức năng Port B :
Trang 32Bảng tóm tắt các thanh ghi liên quan đến Port B :
1.6.3 Port C và thanh ghi TRISC:
Port C gồm 8 chân từ chân RC0-RC7 Thanh ghi điều khiển xuấtnhập tương ứng là TRIS C.Bên cạnh đó Port C còn chứa chức năng của bộ
so sánh,bộ Timer1,bộ PWM,và các chuẩn giao tiếp I2C,SPI,SSP,USART
Các thanh ghi điều khiển liên quan đến PORT C:
PORTC(địa chỉ 07h) :chứa giá trị các pin trong PORTC TRISC(địa chỉ 87h) :điều khiển xuất nhập
Trang 33Bảng chức năng Port C :
Bảng tóm tắt các thanh ghi liên quan đến Port C :
1.6.4 Port D và thanh ghi TRISD:
Trang 34Port D gồm 8 chân từchân RD0-RD7,thanh ghi điều khiển xuất nhập tương ứng là TRISD Bên cạnhchức năng là port xuất nhập, Port D còn có thể hoạt động như một cổng songsong bằng cách set bit PSPMODE (TRISE<4>), trong chế độ này buffer ngõ vào
là TTL
Bảng chức năng Port D :
Bảng tóm tắt các thanh ghi liên quan đến Port D :
Trang 351.6.5 Port E và thanh ghi TRISE
Port E có 3 chân RE0/RD/AN5,RE1/WR/AN6, RE2/CS/AN7 có thể được cấu hình như các chân xuất nhậpthông thường
Các chân của Port E có thể trở thành cc1 chân điều khiển cho cổng songsong của VĐK khi bit PSPMODE (TRISE<4>) được set bằng 1 Trong chế
độ này, người sử dụng phải đảm bảo các chân của Port E là ngõ vào
Ngoài ra các chân Port E còn có thể được cấu hình như các ngõ vàoAnalog, tại chế độ này, khi đọc giá trị của các chân này sẽ cho ta giá trị là 0.Thanh ghi TRISE quy định chức năng xuất nhập của Port E ngay cả khi
nó được sử dụng như các ngõ vào Analog Phải đảm bảo các chân này đượcquy định là ngõ vào trong chế độ này
Bảng chức năng các chân Port E :