Hơn nữa, việc ghi tới port ngụ ý rằng các chân port được đọc, giá trị này được thay đổi, và sau đó được ghi tới bộ bộ chốt dữ liệu port.. Việc đọc của thanh ghi LAT để trả lại các giá tr
Trang 1CHƯƠNG 5: CÁC CỔNG VÀO/RA VÀ ỨNG DỤNG
Nội dung của chương này sẽ trình bày về cấu trúc, đặc trưng và các ứng dụng cho các
port (cổng) vào/ra (I/O) của các vi điều khiển PIC 18F2455/2550/4455/4550
Mục tiêu chính cho người đọc tham khảo chương này:
Nắm vững cấu trúc các cổng vào/ra
Biết lựa chọn các chân thích hợp của port để làm chức năng vào/ra số
Có khả năng lập trình cho các port vào/ra bằng ngôn ngữ assembly và C18
Có khả năng thiết kế và lập trình các ứng dụng thông thường: giao tiếp các LED đơn, LED 7 đoạn, LCD 2x16, loa buzzer
Tuỳ thuộc vào VĐK trong nhóm trên được chọn và các đặc trưng tương ứng cho phép, nhóm VĐK này có 5 port Trong đó có vài chân của các port I/O được tích hợp với các chức năng xen kẽ từ các đặc trưng ngoại vi của VĐK Nhóm VĐK này có khả năng cung dòng ra tại các port khá mạnh lên đến 25 mA
Mỗi port có 3 thanh ghi hỗ trợ cho các hoạt động của nó:
Thanh ghi TRIS: thanh ghi trực tiếp dữ liệu
Thanh ghi PORT: dữ liệu trên một chân được truy xuất nhờ thanh ghi PORT tương ứng Việc đọc thanh ghi PORT là đọc giá trị của chân I/O Trong khi đó, việc ghi của thanh ghi PORT là ghi giá trị tới bộ chốt dữ liệu port Hơn nữa, việc ghi tới port ngụ ý rằng các chân port được đọc, giá trị này được thay đổi, và sau đó được ghi tới bộ bộ chốt dữ liệu port
Thanh ghi LAT (latch): thanh ghi chốt dữ liệu vào/ra Thanh ghi LAT được liên kết với
chân I/O tương ứng Thanh ghi này cho phép đọc, ghi, thay đổi chốt dữ liệu ngõ ra của port Việc đọc của thanh ghi LAT để trả lại các giá trị đã được lưu giữ trong các ngõ
chốt ra của port (thay cho các giá trị trên các chân I/O như đọc thanh ghi PORT)
Sự khác nhau giữa các thanh ghi PORT và LAT có thể tóm lược như sau:
Sự ghi vào PORT là ghi giá trị dữ liệu vào bộ chốt port
Sự ghi vào LAT là ghi giá trị dữ liệu vào bộ chốt port
Việc đọc PORT là đọc giá trị dữ liệu trên chân I/O
Trang 2 Việc đọc LAT là đọc giá trị dữ liệu đã được cất trong bộ chốt port
Hình 5.1: tổ chức port I/O tổng quát
PORTA là port song hướng có độ rộng 8-bit Để chọn chiều vào/ra của từng chân ở PORTA phải sử dụng thanh ghi TRISA để đặt, nếu là chân ngõ vào thì bit TRISA tương ứng
bằng 1 (lúc này, bộ lái ngõ ra tương ứng ở trạng thái trở kháng cao), ngược lại là ngõ ra thì
bit TRISA tương ứng sẽ bằng 0 Ví dụ,
TRISA = FFh: toàn bộ PORTA là ngõ vào
TRISA = 00h: toàn bộ PORTA là ngõ ra
Bảng 5.1: tóm tắt PORTA
Chân Chức năng
Đặt TRIS I/O Kiểu I/O Diễn giải RA0/AN0 RA0 0 Ra Số Ngõ ra dữ liệu LATA<0>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTA<0>; bị vô hiệu khi
ngõ vào tương tự được cho phép
AN0 1 Vào Tương tự Ngõ vào A/D kênh 0 và ngõ vào bộ so sánh
C1- Mặc định cấu hình do tác động POR;
không ảnh hưởng ngõ ra số
RA1/AN1 RA1 0 Ra Số Ngõ ra dữ liệu LATA<1>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTA<1>; được bằng 0
do tác động của POR
AN1 1 Vào Tương tự Ngõ vào A/D kênh 1 và ngõ vào bộ so sánh
C2- Mặc định cấu hình do tác động POR;
không ảnh hưởng ngõ ra số
Trang 3RA2/AN2/
V REF -/
CV REF
RA2 0 Ra Số Ngõ ra dữ liệu LATA<2>; không bị ảnh
hưởng bởi ngõ vào tương tự Bị vô hiệu khi ngõ ra CV REF được cho phép
1 Vào TTL Ngõ vào dữ liệu PORTA<2> Bị vô hiệu khi
các chức năng tương tự được cho phép; bị huỷ bỏ khi ngõ ra CV REF được cho phép
AN2 1 Vào Tương tự Ngõ vào A/D kênh 2 và ngõ vào bộ so sánh
C2+ Mặc định cấu hình do tác động POR; không bị ảnh hưởng ngõ ra tương tự
V REF - 1 Vào Tương tự Ngõ vào điện thế chuẩn thấp của A/D và bộ
so sánh
CV REF x Ra Tương tự Ngõ ra điện thế chuẩn bộ so sánh Cho phép
đặc trưng này huỷ bỏ I/O số
RA3/AN3/
V REF +
RA3 0 Ra Số Ngõ ra dữ liệu LATA<3>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTA<3>; bị vô hiệu khi
ngõ vào tương tự được cho phép
AN3 1 Vào Tương tự Ngõ vào A/D kênh 3 và ngõ vào bộ so sánh
RA4 0 Ra Số Ngõ ra dữ liệu LATA<4>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào ST Ngõ vào dữ liệu PORTA<4>; bị vô hiệu khi
ngõ vào tương tự được cho phép
T0CKI 1 Vào ST Ngõ vào xung clock cho timer0
C1OUT 0 Ra Số Ngõ ra bộ so sánh 1; đảm bảo tính ưu tiên
trên dữ liệu port
RCV x Vào TTL Ngõ vào RCV bộ thu phát USB bên ngoài
RA5/AN4/
𝑺𝑺/
HLVDIN/
C2OUT
RA5 0 Ra Số Ngõ ra dữ liệu LATA<5>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTA<5>; bị vô hiệu khi
ngõ vào tương tự được cho phép
AN4 1 Vào Tương tự Ngõ vào A/D kênh Mặc định cấu hình do tác
động POR
𝑆𝑆 1 Vào TTL Ngõ vào chọn tớ cho SSP (khối MSSP)
HLVDIN 1 Vào Tương tự Ngõ vào phát hiện điểm lỗi bên ngoài điện
thế cao/thấp
C2OUT 0 Ra Số Ngõ ra bộ so sánh 2; đảm bảo tính ưu tiên
trên dữ liệu port
OSC2/
CLKO/RA6
RA6 0 Ra Số Ngõ ra dữ liệu LATA<6> Chỉ có thể sử
dụng trong các chế độ ECIO, ECPIO, INTIO; mặt khác, đọc bằng 0
1 Vào TTL Ngõ vào dữ liệu PORTA<6> Chỉ có thể sử
dụng trong các chế độ ECIO, ECPIO, INTIO; mặt khác, đọc bằng 0
OSC2 x Ra Tương tự Kết nối ngõ ra hồi tiếp dao động chính (các
kiểu XT và HS)
CLKO x Ra Số Ngõ ra chu kỳ xung clock hệ thống (F OSC /4);
chỉ hữu dụng trong các kiểu EC, ECPLL và INTCKO
Chú thích:
ST = Schmitt buffer input; x = Tuỳ ý (bit TRIS không ảnh hưởng tới hướng vào/ra port hoặc bị
đè bởi lựa chọn này); TTL = TTL buffer input
Trang 4Bảng 5.2: các thanh ghi liên hợp với PORTA
Chú thích:
“-”: không sử dụng, đọc bằng 0; các ô tô xám không được sử dụng cho PORTA
(1) RA6 sẽ là chân I/O khi đặt bit cấu hình dao động phù hợp và sau đó chọn bit TRISA6 phù hợp tương ứng Ngược lại, chân RA6 không phải là I/O, tất cả các bit RA6, LATA6 và TRISA6 sẽ được đọc bằng 0
Ví dụ 5.1: viết chương trình khởi tạo PORTA với RA3:0 là ngõ ra và RA7:4 là ngõ vào bằng
hợp ngữ và C18
Giải pháp:
Chương trình hợp ngữ:
clrf PORTA ; Xoá PORTA
clrf LATA ; Xoá nội dung LATA
Ví dụ 5.2: viết chương trình khởi tạo các chân của PORTA là RA3 và RA5 là các ngõ vào và
các chân RA2 và RA4 là các ngõ ra bằng C18
Trang 5Ví dụ 5.3: viết chương trình xuất ra PORTA các giá trị 05h và 0Ah, các giá trị này được chốt
trong khoảng thời gian nào đó và chương trình lặp vô tận
Giải pháp:
Chương trình hợp ngữ:
movlw 0x0 ; WREG = 0x00
movwf TRISA ; Make PORTA as output port
Loop movlw 0x05 ; WREG = 0x05
movwf PORTA ; Put 05h on PORTA
call Delay
movlw 0x0A ; WREG = 0x0A
movwf PORTA ; Put 0Ah on PORTA
TRISA = 0; // Make PORTA as output port
for (; ;) // Repeat forever
{ PORTA = 0x05;
Delay10KTCYx(200);
PORTA = 0x0A;
Trang 6Delay10KTCYx(200);
} }
PORTB là port song hướng có độ rộng 8-bit Để chọn chiều vào/ra của từng chân ở PORTB phải sử dụng thanh ghi TRISB để đặt, nếu là chân ngõ vào thì bit TRISB tương ứng
bằng 1 (lúc này, bộ lái ngõ ra tương ứng ở trạng thái trở kháng cao), ngược lại là ngõ ra thì
bit TRISB tương ứng sẽ bằng 0
Mỗi chân của PORTB đều có điện trở kéo lên bên trong Một bit điều khiển đơn có thể cho phép sử dụng toàn bộ điện trở kéo lên, đó là bit RBPU̅̅̅̅̅̅̅̅ (ở vị trí thanh ghi INTCON2<7>)
Mặc định, các điện trở kéo lên không sử dụng khi PORTB là ngõ ra và không cho phép khi ở trạng thái power-on reset
Sau reset, RB4:RB0 được cấu hình mặc định là các ngõ vào tương tự và RB7:RB5 là
các ngõ vào số Bằng cách lập trình bit cấu hình là PBADEN = 0 (CONFIG3H<1>),
RB4:RB0 sẽ được cấu hình là các ngõ vào/ra số
Bảng 5.3: tóm tắt PORTB
Chân Chức năng
Đặt TRIS I/O Kiểu I/O Diễn giải RB0/
AN12/
INT0/
FLT0/SDI/
SDA
RB0 0 Ra Số Ngõ ra dữ liệu LATB<0>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTB<0>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0 Bị vô hiệu khi ngõ vào tương tự được cho phép(1).AN12 1 Vào Tương tự Ngõ vào A/D kênh 12 (1)
INT0 1 Vào ST Ngõ vào ngắt ngoài INT0
FLT0 1 Vào ST Ngõ vào lỗi PWM tăng cường; được tích
bằng phần mềm
SDI 1 Vào ST Ngõ vào dữ liệu SPI
SDA 1 Ra Số Ngõ ra dữ liệu I 2C (khối MSSP)
1 Vào I 2 C/SMB Ngõ vào dữ liệu I 2C (khối MSSP); kiểu ngõ
vào phụ thuộc vào cài đặt khối
RB1/
AN10/
INT1/
SCK/SCL
RB1 0 Ra Số Ngõ ra dữ liệu LATB<1>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTB<1>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0 Bị vô hiệu khi ngõ vào tương tự được cho phép(1).AN10 1 Vào Tương tự Ngõ vào A/D kênh 10 (1)
INT1 1 Vào ST Ngõ vào ngắt ngoài INT1
SCK 0 Ra Số Ngõ ra xung clock SPI
1 Vào ST Ngõ vào xung clock SPI
SCL 0 Ra Số Ngõ ra xung clock I 2 C
1 Vào I 2 C/SMB Ngõ vào xung clock I 2 C
RB2 0 Ra Số Ngõ ra dữ liệu LATB<2>; không bị ảnh
hưởng bởi ngõ vào tương tự
Trang 7RB2/AN8/
INT2/
VMO
1 Vào TTL Ngõ vào dữ liệu PORTB<2>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0 Bị vô hiệu khi ngõ vào tương tự được cho phép(1).AN8 1 Vào Tương tự Ngõ vào A/D kênh 8 (1)
INT2 1 Vào ST Ngõ vào ngắt ngoài INT2
VMO 0 Ra Số Ngõ ra dữ liệu VMO của bộ thu phát USB
RB3 0 Ra Số Ngõ ra dữ liệu LATB<3>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTB<3>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0 Bị vô hiệu khi ngõ vào tương tự được cho phép(1).AN9 1 Vào Tương tự Ngõ vào A/D kênh 9 (1)
RB4 0 Ra Số Ngõ ra dữ liệu LATB<4>; không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào TTL Ngõ vào dữ liệu PORTB<4>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0 Bị vô hiệu khi ngõ vào tương tự được cho phép(1).AN11 1 Vào Tương tự Ngõ vào A/D kênh 11 (1)
KBI0 1 Vào TTL Ngắt do thay đổi chân
CSSPP (4) 0 Vào Số Ngõ ra điều khiển lựa chọn chip SPP
RB5/
KBI1/
PGM
RB5 0 Ra Số Ngõ ra dữ liệu LATB<5>
1 Vào TTL Ngõ vào dữ liệu PORTB<5>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0
KBI1 1 Vào TTL Ngắt do thay đổi chân
PGM x Vào ST Nhập chế độ lập trình nguồn đơn (ICSP)
Được thực hiện bằng các bit cấu hình LVP; tất cả các chức năng khác của chân bị vô hiệu
RB6/KBI2/
PGC
RB6 0 Ra Số Ngõ ra dữ liệu LATB<6>
1 Vào TTL Ngõ vào dữ liệu PORTB<6>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0
KBI2 1 Vào TTL Ngắt do thay đổi chân
PGC x Vào ST Ngõ vào xung clock (ICSP) thi hành nối
tiếp cho hoạt động ICSP và ICD (3)
RB7/KBI3/
PGD
RB7 0 Ra Số Ngõ ra dữ liệu LATB<7>
1 Vào TTL Ngõ vào dữ liệu PORTB<7>; sử dụng kéo
lên khi bit RBPU̅̅̅̅̅̅̅̅ = 0
KBI3 1 Vào TTL Ngắt do thay đổi chân
PGD x Ra Số Ngõ ra dữ liệu thi hành nối tiếp cho hoạt
(2) Chỉ định chân xen kẽ cho CCP2 khi CCP2MX = 0 Chỉ định mặc định là RC1
(3) Tất cả chức năng khác của chân bị vô hiệu khi hoạg động ICSP và ICD được cho phép (4) Chỉ các VĐK 40/44 chân
Trang 8Bảng 5.4: tóm tắt các thanh ghi liên hợp với PORTB
“-”: không sử dụng, đọc bằng 0; các ô tô xám không được sử dụng cho PORTB
(1) Các thanh ghi này không được thực hiện trên VĐK 28 chân
Ví dụ 5.4: dùng C18 để viết chương trình xuất ra PORTB có giá trị 99h trong 50,000 lần Giải pháp:
#include <P18F4550.h>
void main(void)
{
unsigned int j;
TRISB = 0; // Make PORTB as output port
for (j = 0; j <= 50000; j++) // Repeat 50,000 times
{ PORTB = 0x99;
} while(1); // Stay here forever
Trang 9{ PORTB = mynum[j];
} while(1); // Stay here forever
}
PORTC là port song hướng có độ rộng 7-bit Để chọn chiều vào/ra của từng chân ở PORTC phải sử dụng thanh ghi TRISC để đặt, nếu là chân ngõ vào thì bit TRISC tương ứng
bằng 1 (lúc này, bộ lái ngõ ra tương ứng ở trạng thái trở kháng cao), ngược lại là ngõ ra thì
bit TRISC tương ứng sẽ bằng 0 Các VĐK PIC18F2455/2550/4455/4550 không có chân RC3 Các chân RC4 và RC5 không có các bit TRISC được liên hợp với chúng Như các port
số, chúng chỉ có chức năng làm các ngõ vào số Khi được cấu hình chức năng USB, chiều dữ liệu được xác định bằng cấu hình và trạng thái của phân đoạn USB tại thời điểm cho phép Còn các chân còn lại trên PORTC sẽ được xác định chiều vào/ra bởi các bit TRISC tương ứng Vài chức năng ngoại vi chồng lấn bit TRISC để tạo chân đó là một ngõ vào Khi đó, người dùng phải lập trình bit TRISC tương ứng thích hợp trong đoạn thực hiện chức năng ngoại vi đó Như vậy, cần lưu ý là nội dung thanh ghi TRISC sẽ bị ảnh hưởng bởi chức năng ngoại vi chồng lấn
Bảng 5.5: tóm tắt PORTC
Chân Chức năng
Đặt TRIS I/O Kiểu I/O Diễn giải RC0/
T1OSO/
T13CKI
RC0 0 Ra Số Ngõ ra dữ liệu LATC<0>
1 Vào ST Ngõ vào dữ liệu PORTC<0>
T1OSO x Ra Tương tự Ngõ ra dao động Timer1; được cho phép
khi dao động Timer1 được cho phép Vô hiệu I/O số
T13CKI 1 Vào ST Ngõ vào bộ đếm Timer1/Timer3
1 Vào ST Ngõ vào dữ liệu PORTC<1>
T1OSI x Vào Tương tự Ngõ vào dao động Timer1; được cho phép
khi dao động Timer1 được cho phép Vô hiệu I/O số
1 Vào ST Ngõ vào bộ chụp ECCP1
P1A (3) 0 Ra Số Ngõ ra PWM tăng cường của ECCP1,
kênh A Có thể được định tri-state trong thời gian sự kiện tắt nguồn PWM
Trang 10RC4/
D-/VM
RC4 - (2) Vào Tương tự Ngõ vào dữ liệu PORTC<4>; bị vô hiệu
khi USB được cho phép
D- - (2) Ra XCVR Ngõ ra đường ‘-’ vi phân bus USB (bộ thu
RC5 - (2) Vào Tương tự Ngõ vào dữ liệu PORTC<5>; bị vô hiệu
khi USB được cho phép
D+ - (2) Ra XCVR Ngõ ra đường ‘+’ vi phân bus USB (bộ
1 Vào ST Ngõ vào dữ liệu PORTC<6>
TX 0 Ra Số Ngõ ra dữ liệu phát nối tiếp bất đồng bộ
(khối EUSART) Người dùng phải cấu
1 Vào ST Ngõ vào dữ liệu PORTC<7>
RX 1 Vào ST Ngõ vào dữ liệu thu nối tiếp bất đồng bộ
(khối EUSART) Người dùng phải cấu
hình là ngõ ra
DT 1 Ra Số Ngõ ra dữ liệu nối tiếp đồng bộ (khối
EUSART)
1 Vào ST Ngõ vào dữ liệu nối tiếp đồng bộ (khối
EUSART) Người dùng phải cấu hình nó
là ngõ vào
SDO 0 Ra Số Ngõ ra dữ liệu SPI (khối MSSP)
Chú thích:
(1) Ấn định chân mặc định Sự chỉ định chân xen kẽ là RB3 (khi CCP2MX = 0)
(2) RC4 và RC5 không có bit TRIS tương ứng Trong kiểu port, các chân này chỉ là ngõ vào Hướng dữ liệu USB được xác định bằng cấu hình USB
(3) Chỉ các VĐK 40/44 chân
Bảng 5.6: tóm tắt các thanh ghi liên hợp với PORTC
Chú thích:
“-“: không sử dụng, đọc bằng 0; các ô tô xám không được sử dụng cho PORTC
(1) RC5 và RC4 chỉ sẵn sàng là các chân port khi khối USB được vô hiệu (UCON<3> = 0)
PORTD là port song hướng có độ rộng 8-bit Để chọn chiều vào/ra của từng chân ở PORTD phải sử dụng thanh ghi TRISD để đặt, nếu là chân ngõ vào thì bit TRISD tương ứng
Trang 11bằng 1 (lúc này, bộ lái ngõ ra tương ứng ở trạng thái trở kháng cao), ngược lại là ngõ ra thì
bit TRISD tương ứng sẽ bằng 0
Mỗi chân của PORTD đều có điện trở kéo lên bên trong Một bit điều khiển đơn có thể
cho phép sử dụng toàn bộ điện trở kéo lên, đó là bit RDPU (ở vị trí thanh ghi PORTE<7>)
Các điện trở kéo lên sẽ tắt khi chân của port được cấu hình là một ngõ ra số hay các chức năng ngoại vi được tích hợp khác Hoạt động kéo lên cũng tắt khi ở trạng thái power-on reset
PORTD có thể sử dụng làm port truyền dữ liệu song song (SPP: Streaming Parallel
Port) Ở chế độ này, các bộ đệm dữ liệu ngõ vào sẽ tương thích với tín hiệu số TTL
Bảng 5.7: tóm tắt PORTD
Chân Chức năng
Đặt TRIS I/O Kiểu I/O Diễn giải RD0/SPP0 RD0 0 Ra Số Ngõ ra dữ liệu LATD<0>
1 Vào ST Ngõ vào dữ liệu PORTD<0>
1 Vào Tương tự Ngõ vào dữ liệu SPP<5>
P1B 0 Ra Số Ngõ ra PWM tăng cường ECCP1, kênh
1 Vào Tương tự Ngõ vào dữ liệu SPP<6>
P1C 0 Ra Số Ngõ ra PWM tăng cường ECCP1, kênh
1 Vào Tương tự Ngõ vào dữ liệu SPP<7>
P1D 0 Ra Số Ngõ ra PWM tăng cường ECCP1, kênh
D (1)
Trang 12Chú thích:
(1) Có thể được cấu hình tri-state trong suốt sự kiện tắt nguồn PWM
Bảng 5.8: tóm tắt các thanh ghi liên hợp với PORTD
Chú thích:
“-“: không sử dụng, đọc bằng 0; các ô tô xám không được sử dụng cho PORTD
(1) Được thực hiện chỉ khi chức năng MCLR được vô hiệu
(2) RE3 chỉ là bit của PORTE đối với VĐK loại 28 chân và 40/44 chân Tất cả các bit khác
được thực thi chỉ khi PORTE được thực hiện (như VĐK 40/44 chân)
(3) Các bit thanh ghi này không có trên VĐK 28 chân
Đối với VĐK 40/44 chân, PORTE có độ rộng 4-bit Ba chân (RE0/AN5/CK1SPP,
RE1/AN6/CK2SPP, RE2/AN7/OESPP) được cấu hình riêng lẻ là các ngõ vào hay ngõ ra Các
chân này đều có các bộ đệm ngõ vào Schmitt trigger
Thanh ghi định chiều dữ liệu là TRISE Nếu là chân ngõ vào thì bit TRISE tương ứng
bằng 1 (lúc này, bộ lái ngõ ra tương ứng ở trạng thái trở kháng cao), ngược lại là ngõ ra thì
bit TRISE tương ứng sẽ bằng 0
Trong hình 5.2 mô tả thanh ghi PORTE, nó chứa đựng bit điều khiển điện trở kéo lên
cho PORTD là RDPU (bit7 của PORTE) Bit này sẽ cho phép (RDPU = 1) hoặc không cho
phép (RDPU = 0) sử dụng kéo lên ở PORTD
Chân 𝐌𝐂𝐋𝐑/VPP/RE3 chỉ là một ngõ vào Các hoạt động của nó sẽ được điều khiển bằng bit định cấu hình MCLRE Khi MCLRE = 0, chức năng của chân này là ngõ vào số, nó không
có bit TRISE và LATE liên kết Khi MCLRE = 1, chân này sẽ làm ngõ vào xoá chủ (master
clear)
Hình 5.2: thanh ghi PORTE Chú thích:
R = bit có thể đọc W = bit có thể ghi U = bit không sử dụng, đọc bằng ‘0’
-n = giá trị ở POR ‘1’ = bit được đặt ‘0’ = bit được xoá ‘x’ = bit không biết
Trang 13Bảng 5.9: tóm tắt PORTE
Chân Chức năng
Đặt TRIS I/O Kiểu I/O Diễn giải RE0/AN5/
CK1SPP
RE0 0 Ra Số Ngõ ra dữ liệu LATE<0>, không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào ST Ngõ vào dữ liệu PORTE<0>; bị vô hiệu
khi ngõ vào tương tự được cho phép
AN5 1 Vào Tương tự Ngõ vào A/D kênh 5; cấu hình mặc định
RE1 0 Ra Số Ngõ ra dữ liệu LATE<1>, không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào ST Ngõ vào dữ liệu PORTE<1>; bị vô hiệu
khi ngõ vào tương tự được cho phép
AN6 1 Vào Tương tự Ngõ vào A/D kênh 5; cấu hình mặc định
RE2 0 Ra Số Ngõ ra dữ liệu LATE<2>, không bị ảnh
hưởng bởi ngõ vào tương tự
1 Vào ST Ngõ vào dữ liệu PORTE<2>; bị vô hiệu
khi ngõ vào tương tự được cho phép
AN7 1 Vào Tương tự Ngõ vào A/D kênh 7; cấu hình mặc định
RE3 - (1) Vào ST Ngõ vào dữ liệu PORTE<3>; được cho
phép khi bit cấu hình MCLRE = 0
MCLR - (1) Vào ST Ngõ vào xoá chủ bên ngoài; được cho
phép khi MCLRE = 1
V PP - (1) Vào Tương tự Phát hiện điện thế cao, được sử dụng cho
sự phát hiện nhập chế độ ICSP Luôn luôn sẵn sàng bất chấp kiểu chân
Chú thích:
(1) RE3 không có bit TRIS tương ứng Chân này luôn là ngõ vào bất chấp các kiểu hoạt động
Bảng 5.10: tóm tắt các thanh ghi liên hợp với PORTE
Chú thích:
“-“: không sử dụng, đọc bằng 0; các ô tô xám không được sử dụng cho PORTE
(1) Được thực hiện chỉ khi chức năng MCLR được vô hiệu
(2) RE3 chỉ là bit của PORTE đối với VĐK loại 28 chân và 40/44 chân Tất cả các bit khác
được thực thi chỉ khi PORTE được thực hiện (như VĐK 40/44 chân)
(3) Các bit thanh ghi này không có trên VĐK 28 chân
Ví dụ 5.6: viết chương trình khởi tạo PORTE với RE3 là ngõ vào và RE2:0 là ngõ ra, không
sử dụng kéo lên cho PORTD
Trang 14Giải pháp:
clrf PORTE ; Xoá PORTE
clrf LATE ; Xoá LATE
movlw 08h ; Đặt RE2:0 là outputs, RE3 là input,
; tắt kéo lên ở PORTD movwf TRISE
5.2.1 Thiết kế mạch điều khiển các LED đơn
Khi PIC điều khiển LED, có hai cách cấp dòng cho LED Cách thứ nhất là sử dòng của
nguồn cấp bên ngoài (current sinking mode), cách thứ hai là sử dụng dòng ngõ ra trực tiếp của PIC (current sourcing mode)
Sử dụng nguồn cấp dòng bên ngoài
Port output
PIC18
R
VDD
Hình 5.3: LED sử dụng dòng trực tiếp từ nguồn Vdd
Điện áp rơi trên LED thay đổi giữa 1.4 V ÷ 2.5 V, trong thiết kế thường chọn giá trị điển hình VLED = 2 V Độ sáng LED tuỳ thuộc dòng qua nó, và dòng này có thể thay đổi giữa 8
mA ÷ 16 mA, giá trị điển hình ILED = 10 mA
Trong hình 5.3, LED sáng khi ngõ ra của PIC ở mức 0 Giá trị R được tính như sau: VDD
𝑅 = 𝑉𝐷𝐷 −𝑉 𝐿𝐸𝐷 −𝑉 𝐿
trong đó
VDD: điện thế nguồn cung cấp (thường 5 V),
VLED: điện thế làm việc của LED (thường 2 V),
VL: điện thế ngõ ra lớn nhất khi chân ra của port ở mức thấp (thường 0.4 V),
ILED: dòng làm việc của LED (thường chọn 10 mA)
Trang 15Như vậy,
10 = 260 Ω Trong thực tế sẽ chọn R = 270
Sử dụng nguồn dòng trực tiếp của PIC
RPort output
PIC18
Hình 5.4: LED sử dụng dòng ngõ ra của PIC
LED trong hình 5.4 sáng khi ngõ ra của PIC ở mức 1 Điện trở R sẽ được tính bằng công thức:
Ví dụ 5.7: thiết kế mạch điều khiển 8 LED được kết nối với PORTB của PIC18F4550 Mỗi
thời điểm chỉ có một LED sáng trong thời gian 1 s, LED đầu tiên sáng tại vị trí RC0 VĐK sử dụng dao động XTAL 16 MHz, FCK = FOSC/4 Sử dụng dòng trực tiếp ngõ ra của PORTB cấp cho các LED
(a) Lập bảng mô tả thiết kế
(b) Thiết kế sơ đồ nguyên lý
(c) Tính toán giá trị linh kiện
(d) Lập lưu đồ giải thuật
(e) Viết chương trình điều khiển
Giải pháp:
(a) Bảng mô tả thiết kế theo bảng 5.11
Bảng 5.11: mô tả thiết kế của ví dụ 5.7
Trang 16(b) Sơ đồ thiết kế theo hình 5.5
Hình 5.5: sơ đồ nguyên lý của ví dụ 5.7
𝑅1 = 𝜏
Tính các điện trở hạn áp cho các LED
Chọn các điện trở hạn áp trong mạch giống nhau và được tính là
𝑅2 =𝑉0 −𝑉𝐿𝐸𝐷
10 = 285 Ω Chọn R2 = 290
C2 22p
D6 D4 D1
D8
R1 10k
D3 D2
D5
C3 22p
R2
8R2 = 290
Trang 17(d) Lưu đồ giải thuật
Hình 5.6: lưu đồ giải thuật của ví dụ 5.7
(e) Chương trình điều khiển
i = 1
PORTB = i Delay 1s
Trang 18/*void Delay10KTCYx(unsigned char unit);*/
5.2.2 Thiết kế mạch điều khiển công tắc
Ví dụ 5.8: thiết kế mạch điều khiển dùng PIC18F4550 3 LED kết nối với các chân RD7:RD5
của PORTD, được điều khiển bằng 3 công tắc được nối vào các chân RB7:RB5 của PORTB theo vị trí thứ tự bit tương ứng Nếu công tắc nhận mức 1 thì LED ở vị trí tương ứng sẽ sáng, ngược lại thì LED tương ứng sẽ tắt Sử dụng dòng trực tiếp ngõ ra của PORTD cấp cho các LED
Giải pháp: sơ đồ nguyên lý như hình 5.7
Trang 19Hình 5.7: sơ đồ nguyên lý của ví dụ 5.8
Chương trình thực hiện bằng C18:
#include <P18F4550.h>
void main()
{
TRISD = 0x00; // Make PORTD as an output port
TRISB = 0xFF; // Make PORTB as an input port
for (;;) // Endless loop
{
if (PORTBbits.RB5 == 1) LATDbits.LATD5 = 1;
else LATDbits.LATD5 = 0;
if (PORTBbits.RB6 == 1) LATDbits.LATD6 = 1;
290 R2
290 R1
290 R3 SW1
5V
Y 1
16MHz
LED3 C1 0.1M
Trang 20else
LATDbits.LATD6 = 0;
if (PORTBbits.RB7 == 1) LATDbits.LATD7 = 1;
else LATDbits.LATD7 = 0;
}
}
Ví dụ 5.9: thiết kế mạch điều khiển dùng PIC18F4550 8 LED kết nối với PORTD, được điều
khiển bằng 8 công tắc được nối vào PORTB theo vị trí thứ tự bit tương ứng Nếu công tắc nhận mức 1 thì LED ở vị trí tương ứng sẽ sáng, ngược lại thì LED tương ứng sẽ tắt Sử dụng dòng trực tiếp ngõ ra của PORTD cấp cho các LED
(a) Lập bảng mô tả thiết kế
(b) Thiết kế sơ đồ nguyên lý
(c) Lập lưu đồ giải thuật
(d) Viết chương trình điều khiển
Giải pháp:
(a) Bảng mô tả thiết kế theo bảng 5.12
Lưu ý: các chân ngõ vào RB4:RB0 sau trạng thái reset được cấu hình mặc định
là các ngõ vào tương tự, còn các chân ngõ vào RB7:RB5 là các ngõ vào số
Như vậy, để định các chân RB4:RB0 là các ngõ vào số phải đặt bit PBADEN = 0
và thanh ghi ADCON1 = 0x07 (để đặt 4 bit PCFG<3:0> = 0111)
Bảng 5.12: mô tả thiết kế của ví dụ 5.8
LEDs PORT
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
LED1 RD0 0 1 - - - -
LED2 RD1 - - 0 1 - - - -
LED3 RD2 - - - - 0 1 - - - -
LED4 RD3 - - - 0 1 - - - -
LED5 RD4 - - - 0 1 - - - -
LED6 RD5 - - - 0 1 - - - - LED7 RD6 - - - 0 1
LED8 RD7 - - - 0 1
Trang 22(c) Lưu đồ giải thuật
LATD.i = 1
END
Y PORTB.i = 1
LATD.i = 0
N