Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 44 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
44
Dung lượng
1,47 MB
Nội dung
Chương 5: cổng vào/ra ứng dụng CHƯƠNG 5: CÁC CỔNG VÀO/RA VÀ ỨNG DỤNG Nội dung chương trình bày cấu trúc, đặc trưng ứng dụng cho port (cổng) vào/ra (I/O) vi điều khiển PIC 18F2455/2550/4455/4550 Mục tiêu cho người đọc tham khảo chương này: Nắm vững cấu trúc cổng vào/ra Biết lựa chọn chân thích hợp port để làm chức vào/ra số Có khả lập trình cho port vào/ra ngơn ngữ assembly C18 Có khả thiết kế lập trình ứng dụng thơng thường: giao tiếp LED đơn, LED đoạn, LCD 2x16, loa buzzer 5.1 CÁC CỔNG VÀO/RA Tuỳ thuộc vào VĐK nhóm chọn đặc trưng tương ứng cho phép, nhóm VĐK có port Trong có vài chân port I/O tích hợp với chức xen kẽ từ đặc trưng ngoại vi VĐK Nhóm VĐK có khả cung dòng port mạnh lên đến 25 mA Mỗi port có ghi hỗ trợ cho hoạt động nó: Thanh ghi TRIS: ghi trực tiếp liệu Thanh ghi PORT: liệu chân truy xuất nhờ ghi PORT tương ứng Việc đọc ghi PORT đọc giá trị chân I/O Trong đó, việc ghi ghi PORT ghi giá trị tới chốt liệu port Hơn nữa, việc ghi tới port ngụ ý chân port đọc, giá trị thay đổi, sau ghi tới bộ chốt liệu port Thanh ghi LAT (latch): ghi chốt liệu vào/ra Thanh ghi LAT liên kết với chân I/O tương ứng Thanh ghi cho phép đọc, ghi, thay đổi chốt liệu ngõ port Việc đọc ghi LAT để trả lại giá trị lưu giữ ngõ chốt port (thay cho giá trị chân I/O đọc ghi PORT) Sự khác ghi PORT LAT tóm lược sau: Sự ghi vào PORT ghi giá trị liệu vào chốt port Sự ghi vào LAT ghi giá trị liệu vào chốt port Việc đọc PORT đọc giá trị liệu chân I/O 155 Chương 5: cổng vào/ra ứng dụng Việc đọc LAT đọc giá trị liệu cất chốt port Hình 5.1: tổ chức port I/O tổng quát 5.1.1 PORT A PORTA port song hướng có độ rộng 8-bit Để chọn chiều vào/ra chân PORTA phải sử dụng ghi TRISA để đặt, chân ngõ vào bit TRISA tương ứng (lúc này, lái ngõ tương ứng trạng thái trở kháng cao), ngược lại ngõ bit TRISA tương ứng Ví dụ, TRISA = FFh: tồn PORTA ngõ vào TRISA = 00h: toàn PORTA ngõ Bảng 5.1: tóm tắt PORTA Chân RA0/AN0 RA1/AN1 Chức RA0 I/O Kiểu I/O Diễn giải Ra Số Vào TTL AN0 Vào Tương tự RA1 Ra Số Vào TTL Vào Tương tự Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTA; bị vô hiệu ngõ vào tương tự cho phép Ngõ vào A/D kênh ngõ vào so sánh C1- Mặc định cấu hình tác động POR; không ảnh hưởng ngõ số Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTA; tác động POR Ngõ vào A/D kênh ngõ vào so sánh C2- Mặc định cấu hình tác động POR; không ảnh hưởng ngõ số AN1 156 Đặt TRIS Chương 5: cổng vào/ra ứng dụng RA2/AN2/ VREF-/ CVREF RA3/AN3/ VREF+ RA4/ T0CKI/ C1OUT/ RCV RA5/AN4/ 𝑺𝑺/ HLVDIN/ C2OUT OSC2/ CLKO/RA6 RA2 Ra Số Vào TTL AN2 Vào Tương tự VREF- Vào Tương tự CVREF x Ra Tương tự RA3 Ra Số Vào TTL AN3 Vào Tương tự VREF+ Vào Tương tự RA4 Ra Số Vào ST T0CKI C1OUT Vào Ra ST Số RCV RA5 x Vào Ra TTL Số Vào TTL AN4 Vào Tương tự 𝑆𝑆 HLVDIN 1 Vào Vào TTL Tương tự C2OUT Ra Số RA6 Ra Số Vào TTL OSC2 x Ra Tương tự CLKO x Ra Số Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Bị vô hiệu ngõ CVREF cho phép Ngõ vào liệu PORTA Bị vô hiệu chức tương tự cho phép; bị huỷ bỏ ngõ CVREF cho phép Ngõ vào A/D kênh ngõ vào so sánh C2+ Mặc định cấu hình tác động POR; khơng bị ảnh hưởng ngõ tương tự Ngõ vào điện chuẩn thấp A/D so sánh Ngõ điện chuẩn so sánh Cho phép đặc trưng huỷ bỏ I/O số Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTA; bị vô hiệu ngõ vào tương tự cho phép Ngõ vào A/D kênh ngõ vào so sánh C1+ Mặc định cấu hình tác động POR Ngõ vào điện chuẩn cao A/D so sánh Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTA; bị vô hiệu ngõ vào tương tự cho phép Ngõ vào xung clock cho timer0 Ngõ so sánh 1; đảm bảo tính ưu tiên liệu port Ngõ vào RCV thu phát USB bên Ngõ liệu LATA; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTA; bị vô hiệu ngõ vào tương tự cho phép Ngõ vào A/D kênh Mặc định cấu hình tác động POR Ngõ vào chọn tớ cho SSP (khối MSSP) Ngõ vào phát điểm lỗi bên điện cao/thấp Ngõ so sánh 2; đảm bảo tính ưu tiên liệu port Ngõ liệu LATA Chỉ sử dụng chế độ ECIO, ECPIO, INTIO; mặt khác, đọc Ngõ vào liệu PORTA Chỉ sử dụng chế độ ECIO, ECPIO, INTIO; mặt khác, đọc Kết nối ngõ hồi tiếp dao động (các kiểu XT HS) Ngõ chu kỳ xung clock hệ thống (FOSC/4); hữu dụng kiểu EC, ECPLL 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 bị đè lựa chọn này); TTL = TTL buffer input 157 Chương 5: cổng vào/ra ứng dụng Bảng 5.2: ghi liên hợp với PORTA Tên PORTA LATA TRISA ADCON1 CMCON CVRCON UCON Bit C2OUT CVREN - Bit RA6(1) LATA6(1) TRISA6(1) C1OUT CVROE PPBRST Bit RA5 LATA5 TRISA5 VCFG1 C2INV CVRR SE0 Bit RA4 LATA4 TRISA4 VCFG0 C1INV CVRSS PKTDIS Bit RA3 LATA3 TRISA3 PCFG3 CIS CVR3 USBEN Bit RA2 LATA2 TRISA2 PCFG2 CM2 CVR2 RESUME Bit RA1 LATA1 TRISA1 PCFG1 CM1 CVR1 SUSPND Bit RA0 LATA0 TRISA0 PCFG0 CM0 CVR0 - Chú thích: “-”: khơng sử dụng, đọc 0; ô tô xám không sử dụng cho PORTA (1) RA6 chân I/O đặt bit cấu hình dao động phù hợp sau chọn bit TRISA6 phù hợp tương ứng Ngược lại, chân RA6 I/O, tất bit RA6, LATA6 TRISA6 đọc Ví dụ 5.1: viết chương trình khởi tạo PORTA với RA3:0 ngõ RA7:4 ngõ vào hợp ngữ C18 Giải pháp: Chương trình hợp ngữ: clrf PORTA ; Xoá PORTA clrf LATA ; Xoá nội dung LATA movlw 0xF0; movwf TRISA ; Đặt RA3:0 outputs, RA7:4 inputs Chương trình C: #include void main(void) { TRISA = 0xF0; } Ví dụ 5.2: viết chương trình khởi tạo chân PORTA RA3 RA5 ngõ vào chân RA2 RA4 ngõ C18 Giải pháp: #include void main(void) { TRISAbits.TRISA3 = 0x01; 158 Chương 5: cổng vào/ra ứng dụng TRISAbits.TRISA5 = 0x01; TRISAbits.TRISA2 = 0x0; TRISAbits.TRISA4 = 0x0; } Ví dụ 5.3: viết chương trình xuất PORTA giá trị 05h 0Ah, giá trị chốt khoảng thời gian chương trình lặp vơ tận Giải pháp: Chương trình hợp ngữ: Loop movlw 0x0 ; WREG = 0x00 movwf TRISA ; Make PORTA as output port movlw 0x05 ; WREG = 0x05 movwf PORTA ; Put 05h on PORTA call Delay movlw 0x0A ; WREG = 0x0A movwf PORTA ; Put 0Ah on PORTA call Delay goto Loop ; Repeat forever Chương trình C18: #include #include /*void Delay10KTCYx(unsigned char unit);*/ void main(void) { TRISA = 0; // Make PORTA as output port for (; ;) // Repeat forever { PORTA = 0x05; Delay10KTCYx(200); PORTA = 0x0A; 159 Chương 5: cổng vào/ra ứng dụng Delay10KTCYx(200); } } 5.1.2 PORT B PORTB port song hướng có độ rộng 8-bit Để chọn chiều vào/ra chân PORTB phải sử dụng ghi TRISB để đặt, chân ngõ vào bit TRISB tương ứng (lúc này, lái ngõ tương ứng trạng thái trở kháng cao), ngược lại ngõ bit TRISB tương ứng Mỗi chân PORTB có điện trở kéo lên bên Một bit điều khiển đơn ̅̅̅̅̅̅̅̅ (ở vị trí ghi INTCON2) cho phép sử dụng tồn điện trở kéo lên, bit RBPU Mặc định, điện trở kéo lên không sử dụng PORTB ngõ không cho phép trạng thái power-on reset Sau reset, RB4:RB0 cấu hình mặc định ngõ vào tương tự RB7:RB5 ngõ vào số Bằng cách lập trình bit cấu hình PBADEN = (CONFIG3H), RB4:RB0 cấu hình ngõ vào/ra số Bảng 5.3: tóm tắt PORTB Chân RB0/ AN12/ INT0/ FLT0/SDI/ SDA RB1/ AN10/ INT1/ SCK/SCL Chức RB0 Đặt TRIS I/O Kiểu I/O Ra Số Vào TTL Diễn giải Ngõ liệu LATB; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTB; sử dụng kéo ̅̅̅̅̅̅̅̅ = Bị vô hiệu lên bit RBPU ngõ vào tương tự cho phép(1) AN12 INT0 FLT0 1 Vào Vào Vào Tương tự ST ST SDI SDA 1 Vào Ra Vào ST Số I2C/SMB RB1 Ra Số Vào TTL Ngõ vào A/D kênh 12(1) Ngõ vào ngắt INT0 Ngõ vào lỗi PWM tăng cường; tích phần mềm Ngõ vào liệu SPI Ngõ liệu I2C (khối MSSP) Ngõ vào liệu I2C (khối MSSP); kiểu ngõ vào phụ thuộc vào cài đặt khối Ngõ liệu LATB; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTB; sử dụng kéo lên bit ̅̅̅̅̅̅̅̅ RBPU = Bị vô hiệu ngõ vào tương tự cho phép(1) AN10 INT1 SCK SCL RB2 160 1 1 Vào Vào Ra Vào Ra Vào Ra Tương tự ST Số ST Số I2C/SMB Số Ngõ vào A/D kênh 10(1) Ngõ vào ngắt INT1 Ngõ xung clock SPI Ngõ vào xung clock SPI Ngõ xung clock I2C Ngõ vào xung clock I2C Ngõ liệu LATB; không bị ảnh hưởng ngõ vào tương tự Chương 5: cổng vào/ra ứng dụng RB2/AN8/ INT2/ VMO RB3/ AN9/ CCP2/ VPO Vào TTL Ngõ vào liệu PORTB; sử dụng kéo lên bit ̅̅̅̅̅̅̅̅ RBPU = Bị vô hiệu ngõ vào tương tự cho phép(1) AN8 INT2 VMO 1 Vào Vào Ra Tương tự ST Số RB3 Ra Số Vào TTL Ngõ vào A/D kênh 8(1) Ngõ vào ngắt INT2 Ngõ liệu VMO thu phát USB bên Ngõ liệu LATB; không bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTB; sử dụng kéo ̅̅̅̅̅̅̅̅ = Bị vô hiệu lên bit RBPU ngõ vào tương tự cho phép(1) VPO 1 Vào Ra Vào Ra Tương tự Số ST Số RB4 Ra Số Vào TTL AN9 CCP2(2) RB4/ AN11/ KBI0/ CSSPP Ngõ vào A/D kênh 9(1) Ngõ so sánh CCP2 PWM Ngõ vào chụp CCP2 Ngõ liệu VPO thu phát USB bên ngồi Ngõ liệu LATB; khơng bị ảnh hưởng ngõ vào tương tự Ngõ vào liệu PORTB; sử dụng kéo ̅̅̅̅̅̅̅̅ = Bị vô hiệu lên bit RBPU ngõ vào tương tự cho phép(1) RB5/ KBI1/ PGM RB6/KBI2/ PGC RB7/KBI3/ PGD AN11 KBI0 CSSPP(4) RB5 1 0 Vào Vào Vào Ra Vào Tương tự TTL Số Số TTL KBI1 PGM x Vào Vào TTL ST RB6 Ra Vào Số TTL KBI2 PGC x Vào Vào TTL ST RB7 Ra Vào Số TTL KBI3 PGD x Vào Ra TTL Số x Vào ST Ngõ vào A/D kênh 11(1) Ngắt thay đổi chân Ngõ điều khiển lựa chọn chip SPP Ngõ liệu LATB Ngõ vào liệu PORTB; sử dụng kéo ̅̅̅̅̅̅̅̅ = lên bit RBPU Ngắt thay đổi chân Nhập chế độ lập trình nguồn đơn (ICSP) Được thực bit cấu hình LVP; tất chức khác chân bị vô hiệu Ngõ liệu LATB Ngõ vào liệu PORTB; sử dụng kéo lên bit ̅̅̅̅̅̅̅̅ RBPU = Ngắt thay đổi chân Ngõ vào xung clock (ICSP) thi hành nối tiếp cho hoạt động ICSP ICD(3) Ngõ liệu LATB Ngõ vào liệu PORTB; sử dụng kéo lên bit ̅̅̅̅̅̅̅̅ RBPU = Ngắt thay đổi chân Ngõ liệu thi hành nối tiếp cho hoạt động ICSP ICD(3) Ngõ vào liệu thi hành nối tiếp cho hoạt động ICSP ICD(3) Chú thích: (1) Cấu hình theo POR xác định bit cấu hình PBADEN Các chân cấu hình ngõ vào tương tự PBADEN = chân ngoã vào số PBADEN = (2) Chỉ định chân xen kẽ cho CCP2 CCP2MX = Chỉ định mặc định RC1 (3) Tất chức khác chân bị vô hiệu hoạg động ICSP ICD cho phép (4) Chỉ VĐK 40/44 chân 161 Chương 5: cổng vào/ra ứng dụng Bảng 5.4: tóm tắt ghi liên hợp với PORTB Tên PORTB LATB TRISB INTCON INTCON2 Bit RB7 LATB7 TRISB7 GIE/GIEH INTCON3 ADCON1 SPPCON(1) SPPCFG(1) UCON INT2IP CLKCFG1 - RBPU Bit RB6 LATB6 TRISB6 PEIE/GIEL INTEDG0 Bit RB5 LATB5 TRISB5 TMR0IE INTEDG1 Bit RB4 LATB4 TRISB4 INT0IE INTEDG2 Bit RB3 LATB3 TRISB3 RBIE - Bit RB2 LATB2 TRISB2 TMR0IF TMR0IP Bit RB1 LATB1 TRISB1 INT0IF - Bit RB0 LATB0 TRISB0 RBIF RBIP INT1IP CLKCFG0 PPBRST VCFG1 CSEN SE0 INT2IE VCFG0 CLK1EN PKTDIS INT1IE PCFG3 WS3 USBEN PCFG2 WS2 RESUME INT2IF PCFG1 SPPOWN WS1 SUSPND INT1IF PCFG0 SPPEN WS0 - Chú thích: “-”: không sử dụng, đọc 0; ô tô xám không sử dụng cho PORTB (1) Các ghi không thực VĐK 28 chân Ví dụ 5.4: dùng C18 để viết chương trình xuất PORTB có giá trị 99h 50,000 lần Giải pháp: #include void main(void) { unsigned int j; TRISB = 0; // Make PORTB as output port for (j = 0; j Author: LQ Dan LCD 2x16 Giải pháp: U1 VDD1 10k C1 32 R1 RESET VDD2 S1 11 5V MCLR RBA0 RBA1 0.1M RBA2 PIC18F4550 C2 22p 13 RB0 OSC1 RB1 Y1 16MHz 14 RB2 OSC2 RB3 C3 22p RB4 RB5 VSS2 RB7 33 34 35 36 37 38 39 40 31 12 VSS1 RB6 Hình 5.18: sơ đồ nguyên lý thiết kế ví dụ 5.13 191 Chương 5: cổng vào/ra ứng dụng Chương trình: //> Ví dụ 5.14: chân liệu LCD kết nối với PORTB PIC18F4550 Thông tin chốt vào LCD chân Enable thay đổi từ mức cao xuống mức thấp Dùng trình C18 để gửi chuỗi “Happy birthday to you!” hiển thị LCD 2x16 193 Chương 5: cổng vào/ra ứng dụng Giải pháp: Chương trình: //