Tải bản đầy đủ (.doc) (129 trang)

Đo và điều khiển nhiệt độ phò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 (2.21 MB, 129 trang )

Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc

11.1 Sơ lược về vi điều khiển PIC16F877A:
PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính
năng, 40 chân, 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ủa PIC 16F877A như sau:
0 - 8 K Flash ROM.
1 - 368 Bytes RAM.
2 - 256 Bytes EEPROM.
3 - 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập.
4 - 2 bộ định thời 8 bits (Timer 0 và Timer 2).
5

- 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.

6 - 2 bô CCP( Capture / Compare / PWM).
7 - 1 bộ biến đổi AD 10 bits, 8 ngõ vào.
8 - 2 bộ so sánh tương tự (Compartor).
9 - 1 bộ định thời giám sát (WatchDog Timer).
10 - Một cổng song song 8 bits với các tín hiệu điều khiển.
11 - Một cổng nối tiếp.
12 - 15 nguồn ngắt.
13 - Có chế độ tiết kiệm năng lượng.
14

- Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial
Programming)


15 -

Được chế tạo bằng công nghệ CMOS

16 -

35 tập lệnh có độ dài 14 bits.

17 - Tần số hoạt động tối đa 20MHz
-1-

SVTH : Lê Văn Thực


Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc

18
Sơ đồ chân PIC 16f877A

-2-

SVTH : Lê Văn Thực


Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc


PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức
năng khác nhau.Trong đó có một số chân đa công dụng: mỗi chân có thể hoạt
động như một đường xuất nhập hoặc là một chân chức năng đặc biệt dùng để
giao tiếp với các thiết bị ngoại vi.

Sơ Đồ Khối PIC

-5-

SVTH : Lê Văn Thực


Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc

1.2 Một số điểm đặc biệt của CPU:
1.2.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.

Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:

Lưu ý: Tụ có giá trị lớn sẽ
tăng tính ổn định của dao
động nhưng cũng làm tăng
thời gian khởi động.
Chế độ 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 đó:
-6-

SVTH : Lê Văn Thực


Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc

Tần số dao động của thạch anh là Fosc = 10Mhz
→ChukỳdaođộngcủathạchanhlàTosc=1/Tosc=1/10*106 (s)
Chu kỳ máy:
T_instruction = 4*Tosc = 4/10*106(s) = 0.4 µs = 400 ns
1.3.2 Reset:
PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau như:

1.2.2 : MCRL
PIC16F877A có một bộ lọc nhiễu ở phần 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 trên chân 4 của PIC16F877A. Khi đưa chân này xuố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 xuống mức thấp).
-7-

SVTH : Lê Văn Thực


Đo Và Điều Khiển Nhiệt Độ Phòng

GVHD: Tô Hoàng Lộc

-8-

SVTH : Lê Văn Thực


1.2.3 INTERRUPTS:
PIC16F877A có nhiều nguồn ngắt khác nhau. Đây là một số ngắt
tiêu biểu :
1- Ngắt ngoài xảy ra trên chân INT.
2- Ngắt do Timer0.
3- Ngắt do Timer1.
4- Ngắt do Timer2.
5- Ngắt do thay đổi trạng thái trên các chân PortB.
6- Ngắt so sánh điện thế.
7- Ngắt do Port song song.
8- Ngắt USART.
9- Ngắt nhận dữ liệu.
10- Ngắt truyền dữ liệu .

11- Ngắt chuyển đổi ADC.
12- Ngắt màn hình LCD.
13- Ngắt hoàn tất ghi EEPROM.
14- Ngắt module CCP.
15- Ngắt Module SSP.
* 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.2.4 Chế độ nguồn thấp Sleep (Power down Mode) :
Đây là chế độ hoạt động của VĐK khi lệ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ếp tục hoạt động bit PD (STATUS <3>) được reset về không, bit TO được set,
oscillator ngưng hoạt độ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 VĐK là rất nhỏ nên ta cần thực
hiện các bước sau trước khi VĐK thực thi lệnh sleep.
1• Đưa tất cả các chân về trạng thái VDD hoặc VSS.
2• Cần đảm bảo rằng không có mạch ngoại vi nào được điều khiển bởi
dòng điện của VĐK vì dòng điện nhỏ không đủ khả năng cung cấp
cho các mạch ngoại vi hoạt động.
3• Tạm ngưng hoạt động của khối A/D và không cho phép các xung
clock bên ngoài tác dụng vào VĐK.
4• Để ý chức năng điện trở kéo lên của PORTB.
5• Pin phải ở mức logic cao.


1.2.5 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ạy
nế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ạn

phả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ểm tra 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ân input thứ hai có lên mức cao hay không, nếu chân input thứ hai
không lên mức cao, con Pic sẽ ngồi đó chờ và nó sẽ chỉ thoát ra khỏi chỗ ngồi
của nó nếu chân input 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ương
trình, bạn compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từng
bước, từng bước một trên máy tính, bằng MPLAB chẳng hạn, có vẻ như mọi
chuyện đều tốt, bạn đem nạp vào con Pic. Sau một thời gian chạy thử, con Pic
thình lình bị kẹt vào nơi nào đó trong chương trình mà không thể thoát ra được
trạ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ại hay vẫn để cho nó bị kẹt không thoát ra được, đó là mục đích của mạch
Watchdog.
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 độc
lậ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
đến FFh, 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ẫn
tiế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.


1• Thứ nhất, cần thời gian bao lâu để reset WDT ?
2• Thứ hai, làm sao xoá WDT ?

3• 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

1..2.6 Tổ chức bộ nhớ:

PIC16F877A có tất cả 3 khối bộ nhớ riêng biệt bao gồm: Bộ nhớ chương
trình, bộ nhớ dữ liệu và bộ nhớ EEPROM.
1.2.6.1 Bộ nhớ chương trình:
PIC16F877A có bộ đếm chương
trình dài 13 bits có thể định địa chỉ cho
khoảng không gian nhớ 8K x 14bits.
Không gian bộ nhớ này được chia làm 8
trang, có địa chỉ từ 0005h đến 1FFFh.
Mọ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.2.6.2 Bộ nhớ dữ liệu:
Bản đồ cấu trúc PIC 16F877A

Bộ nhớ dữ liệu bao gồm 4 Bank: Bank 0, Bank1, Bank2 và Bank3. Mỗi
bank có dung lượng 128 Bytes, bao gồm vùng Ram đa mục đích (GPR) và
vùng thanh ghi chức năng đặc biệt (SFR).


Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS là

RP0(Status<5>) và RP1(Status<6>).

1.2.6.3 Vùng Ram đa mục đích:
Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trực
tiếp hoặc gián tiếp thông qua thanh ghi FSR. Vùng RAM đa mục đích được
phân phối ở các Bank như sau:
1- Bank 0: 96 Bytes từ địa chỉ 20h đến địa chỉ 7Fh.
2- Bank 1: 80 Bytes từ địa chỉ A0h đến địa chỉ EFh.
3- Bank 2: 96 Bytes từ địa chỉ 110h đến địa chỉ 16Fh.
4- Bank 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh.

1.2.6.4 Vùng 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âm
CPU hoặc các module ngoại vi để điều khiển hoạt động của VĐK. Các thanh
ghi chứ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ức năng của CPU, loại thứ 2 dùng cho các chức năng ngoại vi.

1.2.6.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.

Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián
tiếp).
1 = Bank 2, 3 (100h – 1FFh )
0 = Bank 0, 1 (00h – FFh)
Bit 6 – 5 RP1 – RP0: Bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ
trực tiếp).
11 = Bank 3 ( 180h – 1FFh)
10 = Bank 2 (100h – 17Fh)
01 = Bank 1 (80h – FFh)

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.
0: WDT hoạt động.


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.
0: 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 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. 2.6.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 cho các chứa năng
như: ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và thời
gian chờ của WDT

Bit 7 : 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:ChophépPORTBkéolênnguồ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
1: Cạnh xuống
0: 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
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.2.6.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
0: Không cho phép ngắt
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ôngchophépngắtghivàoEEPROMhoạ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
1: Cho phép
0: Không cho phép
Bit 2 TMR0IF: Cờ báo ngắt Timer 0
1: Timer 0 tràn
0: Timer 0 chưa tràn


Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT
1: Có ngắt
0: Không xảy ra ngắt.
Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB
1: Có thay đổi
0: Không có thay đổi xảy ra trên PORTB

1.2.6.4.4 Thanh ghi cho phép ngắt ngoại vi 1(PIE1 Register):

Chú ý: 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ép
0: Không cho phép
Bit 6 ADIE: Bit cho phép ngắt chuyển đổi A/D
1: Cho phép
0: Không cho phép
Bit 5 RCIE: Bit cho phép ngắt nhận USART
1: Cho phép
0: Không cho phép
Bit 4 TXIE: Bit cho phép ngắt truyền USART
1:Chophép

0: Không cho phép
Bit 3 SSPIE: Bit cho phép ngắt Port nối tiếp đồng bộ
1: Cho phép
0: Không cho phép
Bit 2 CCP1IE: Bit cho phép ngắt module CCP1
1: Cho phép ngắt
0: Không cho phép
Bit 1 TMR2IE: Bit cho phép ngắt xảy ra khi TMR2 bằng thanh ghi PR2
1: Cho phép
0: Không cho phép
Bit 0 TMR1IE: Bit cho phép ngắt tràn TMR1


1: Cho phép
0: Không cho phép

1.2.6.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
1: Buffer nhận USART đầy
0: Buffer nhận USART trống.
Bit 4 TXIF: Cờ báo ngắt phát USART
1: Buffer truyền USART trống
0: Buffer truyền USART đầy

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
Bit2 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):
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.2.6.4.6 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 ngọai vi
nào xảy ra.
Bit 7,5,2,1 Unimplemented : read as ‘0’
Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh điện thế

1: Cho phép
0: Không cho phép
Bit 4 EEIE: Bit cho phép ngắt do ghi EEPROM
1: Cho phép
0: Không cho phép
Bit 3 BCLIE: Bit cho phép ngắt do xung đột bus
1: Cho phép
0: Không cho phép
Bit 0 CCP2IE: Cho phép ngắt module CCP2
1: Cho phép
0:Khôngchophép

1.2.6.4.7 Thanh ghi cờ của các ngắt ngoại 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 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

1.3 PCL và PCLATH:
Bộ đếm chương trình PC (program counter) có độ dài 13 bit, được dùng
để chứa địa chỉ của lệnh được thực thi
kế tiếp. Byte thấp chứa trong thanh ghi
PCL có thể đọc/ghi một cách trực tiếp.
Các bit cao (bit 12:8) chứa trong thanh
ghi PCLATH, không thể đọc nhưng có
thể ghi gián tiếp bằng cách sử dụng
thanh ghi PCLATH. Khi có bất kỳ sự
Reset nào xảy ra, các bit cao của bộ
đếm chương trình PC sẽ bị xóa.

1.4 Ngăn xếp Stack:
Stack 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 hay
ngắ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.5 Đị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.
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.
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ình
thường (khi nguồn Vdd không đổi). Bộ nhớ này không được định địa chỉ trực
tiếp trong bản đồ bộ nhớ mà được định địa chỉ gián tiếp thông qua các thanh
ghi chức năng đặc biệt:
1- EECON1
2- EECON2
3- EEDATA
4- EEDATH
5- EEADR
6- EEADRH
Trong đó 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 ghi
này có khả năng định địa chỉ cho 256 byte EEPROM. Thanh ghi EECON1
chứa các bit điều khiển còn thanh ghi EECON2 được 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:
Port A gồm 6 chân từ RA0 đến RA5.
Việc ghi giá trị vào thanh ghi TRISA sẽ qui
định các chân của Port A là input hay output
(nếu là 1 thì là input, là output nếu là 0).
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ân Port A.
Riêng chân RA4 được tích hợp chức
năng là chân cung cấp xung clock 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ện
thế 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
Analog thì các bit trong thanh ghi TRISA
phải được set bằng 1.
ChứcnăngcủacácchânPortA
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 chân từ chân RB0-RB7. Việc ghi giá trị vào thanh ghi
TRISB sẽ quy định các chân của Port B là input hay output (1: input, 0:
output). Việc đọc thanh ghi Port 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ó một transistor kéo lên Vdd. Chức năng này hoạt động khi
bit RBPU (Option <7>) được xóa. Chức năng này sẽ tự động được xóa khi Port

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ái
chân Port B thay đổi (Khi Port B được quy định là output thì chức năng này
không hoạt động. Giá trị chân của Port được so sánh với giá trị đã được lưu
trướ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ái
SLEEP.
Bất cứ sự truy xuất nào trên PortB sẽ xóa trạng thái sai lệch, kết thúc ngắt
và cho phép xóa cờ ngắt RBIF.


Bảng chức năng PortB :

Bả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. Việc ghi giá trị vào thanh ghi
TRISC sẽ quy định các chân của Port C là input hay output (1: input, 0:
output). Việc đọc thanh ghi Port C sẽ đọc trạng thái của các chân ở Port C. Việc
ghi giá trị vào thanh ghi Port C sẽ thay đổi trạng thái của các chân Port C.
Các chân của Port C được đa hợp với các chức năng ngoại vi.
Khi các chức năng ngoại vi được cho phép ta cần quan tâm chặt chẽ tới
giá trị các bit của thanh ghi TRISC. Một số chức năng ngoại vi sẽ ghi đè giá trị
0 lên các bit của thanh ghi TRISC và mặc định các chân này là output, ngoài ra
một số chức năng ngoại vi khác sẽ tự động mặc định một số chân là ngõ vào.
Do đó cần xem xét kĩ các tính năng của các hàm ngoại vi để thiết lập giá trị các
bit trong thanh ghi TRISC cho thích hợp.

Bảng chức năng Port C :



Bảng tóm tắt các thanh ghi lien quan đến PortC

1.6.4 Port D và thanh ghi TRISD
Port D gồm 8 chân từ chân RD0-RD7. Bên cạnh chức năng là port xuất
nhập, Port D còn có thể hoạt động như một cổng song song 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 :


×