Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn về I/O của PIC16F877A cụ thể là chớp tắt led. Nhưng trước tiên chúng ta tìm hiểu về các PORT của PIC16F877A.
- Chức năng các chân của PORTA
1 Chân RB0/INT
Trong bài này thì mình sẽ hướng dẫn các bạn mắc led theo 2 kiểu đó là Anode chung theo hình bên dưới.- Chức năng các chân của PORTA
1. Chân RA0/AN0
- RA0: xuất/ nhập số - bit thứ 0 của port A.
- AN0: ngõ vào tương tự của kênh thứ 0.
2. Chân RA1/AN1
- RA1: xuất/nhập số - bit thứ 1 của port A.
- AN1: ngõ vào tương tự của kênh thứ 1.
3. Chân RA2/AN2/VREF-/CVREF
- RA2: xuất/nhập số - bit thứ 2 của port A.
- AN2: ngõ vào tương tự của kênh thứ 2.
- VREF-: ngõ vào điện áp chuẩn (thấp) của bộ ADC.
- CVREF: điện áp tham chiếu VREF ngõ vào bộ so sánh.
4. Chân RA3/AN3/VREF+
- RA3: xuất/nhập số - bit thứ 3 của port A.
- AN3: ngõ vào tương tự kênh thứ 3.
- VREF+: ngõ vào điện áp chuẩn (cao) của bộ A/D.
5. Chân RA4/TOCKI/C1OUT
- RA4: xuất/nhập số – bit thứ 4 của port A.
- TOCKI: ngõ vào xung clock từ bên ngoài cho Timer0.
- C1OUT: ngõ ra bộ so sánh 1.
6. Chân RA5/AN4/ SS/ C2OUT
- RA5: xuất/nhập số – bit thứ 5 của port A.
- AN4: ngõ vào tương tự kênh thứ 4.
- SS : ngõ vào chọn lựa SPI tớ (Slave SPI device).
- C2OUT: ngõ ra bộ so sánh 2.
- Chức năng các chân của PORTB
- RB0: xuất/nhập số – bit thứ 0 của port B.
- INT: ngõ vào nhận tín hiệu ngắt ngoài.
2. Chân RB1
- INT: ngõ vào nhận tín hiệu ngắt ngoài.
2. Chân RB1
- RB1: xuất/nhập số – bit thứ 1 của port B.
3. Chân RB2
- RB2: xuất/nhập số – bit thứ 2 của port B.
4. Chân RB3
- RB3: xuất/nhập số – bit thứ 3 của port B.
5. Chân RB4
- RB4: xuất/nhập số – bit thứ 4 của port B.
6. Chân RB5
- RB5: xuất/nhập số – bit thứ 5 của port B.
7.Chân RB6
- RB6: xuất/nhập số.
8. Chân RB7
- RB7: xuất/nhập số.
1. Chân RC0/T1OSO/T1CKI (15): có 3 chức năng:
- RC0: xuất/nhập số – bit thứ 0 của port C.
- T1OSO: ngõ ra của bộ dao động Timer1.
- T1CKI: ngõ vào xung clock từ bên ngoài Timer1.
2. Chân RC1/T1OSI/CCP2 (16): có 3 chức năng:
- RC1: xuất/nhập số – bit thứ 1 của port C.
- T1OSI: ngõ vào của bộ dao động Timer1.
- CCP2: ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2.
3. Chân RC2 /P1A/CCP1 (17): có 3 chức năng:
- RC2: xuất/nhập số – bit thứ 2 của port C.
- P1A: ngõ ra PWM.
- CCP1: ngõ vào Capture1, ngõ ra compare1, ngõ ra PWM1 .
4. Chân RC3/SCK/SCL (18): có 3 chức năng:
- RC3: xuất/nhập số – bit thứ 3 của port C.
- SCK: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ SPI.
- SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ I2C.
5. Chân RC4/SDI/SDA (23): có 3 chức năng:
- RC4: xuất/nhập số – bit thứ 4 của port C.
- SDI: ngõ vào dữ liệu trong truyền dữ liệu kiểu SPI.
- SDA: xuất/nhập dữ liệu I2C.
6. Chân RC5/SDO (24): có 2 chức năng:
- RC5: xuất/nhập số – bit thứ 5 của port C.
- SDO: ngõ xuất dữ liệu trong truyền dữ liệu kiểu SPI.
7. Chân RC6/TX/CK (25): có 3 chức năng:
- RC6: xuất/nhập số – bit thứ 6 của port C.
- TX: ngõ ra phát dữ liệu trong chế độ truyền bất đồng bộ USART.
- CK: ngõ ra cấp xung clock trong chế độ truyền đồng bộ USART.
8. Chân RC7/RX/DT
- RC7: xuất/nhập số – bit thứ 7 của port C.
- RX: ngõ vào nhận dữ liệu trong chế độ truyền bất đồng bộ EUSART.
- DT: ngõ phát và nhận dữ liệu ở chế độ truyền đồng bộ EUSART.
1. Chân RD0
- RD0: xuất/nhập số – bit thứ 0 của port D.
- Chân RD1
2.RD1: xuất/nhập số – bit thứ 1 của port D.
3. Chân RD2
- RD2: xuất/nhập số – bit thứ 2 của port D.
4.Chân RD3
- RD3: xuất/nhập số – bit thứ 3 của port D.
5. Chân RD4
- RD4: xuất/nhập số – bit thứ 4 của port D.
6. Chân RD5
- RD5: xuất/nhập số – bit thứ 5 của port D.
- ngõ ra PWM.
7. Chân RD6
- RD6: xuất/nhập số – bit thứ 6 của port D.
8. Chân RD7
- RD7: xuất/nhập số – bit thứ 7 của port D.
3. Chân RB2
- RB2: xuất/nhập số – bit thứ 2 của port B.
4. Chân RB3
- RB3: xuất/nhập số – bit thứ 3 của port B.
5. Chân RB4
- RB4: xuất/nhập số – bit thứ 4 của port B.
6. Chân RB5
- RB5: xuất/nhập số – bit thứ 5 của port B.
7.Chân RB6
- RB6: xuất/nhập số.
8. Chân RB7
- RB7: xuất/nhập số.
- Chức năng các chân của PORC
- RC0: xuất/nhập số – bit thứ 0 của port C.
- T1OSO: ngõ ra của bộ dao động Timer1.
- T1CKI: ngõ vào xung clock từ bên ngoài Timer1.
2. Chân RC1/T1OSI/CCP2 (16): có 3 chức năng:
- RC1: xuất/nhập số – bit thứ 1 của port C.
- T1OSI: ngõ vào của bộ dao động Timer1.
- CCP2: ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2.
3. Chân RC2 /P1A/CCP1 (17): có 3 chức năng:
- RC2: xuất/nhập số – bit thứ 2 của port C.
- P1A: ngõ ra PWM.
- CCP1: ngõ vào Capture1, ngõ ra compare1, ngõ ra PWM1 .
4. Chân RC3/SCK/SCL (18): có 3 chức năng:
- RC3: xuất/nhập số – bit thứ 3 của port C.
- SCK: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ SPI.
- SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ I2C.
5. Chân RC4/SDI/SDA (23): có 3 chức năng:
- RC4: xuất/nhập số – bit thứ 4 của port C.
- SDI: ngõ vào dữ liệu trong truyền dữ liệu kiểu SPI.
- SDA: xuất/nhập dữ liệu I2C.
6. Chân RC5/SDO (24): có 2 chức năng:
- RC5: xuất/nhập số – bit thứ 5 của port C.
- SDO: ngõ xuất dữ liệu trong truyền dữ liệu kiểu SPI.
7. Chân RC6/TX/CK (25): có 3 chức năng:
- RC6: xuất/nhập số – bit thứ 6 của port C.
- TX: ngõ ra phát dữ liệu trong chế độ truyền bất đồng bộ USART.
- CK: ngõ ra cấp xung clock trong chế độ truyền đồng bộ USART.
8. Chân RC7/RX/DT
- RC7: xuất/nhập số – bit thứ 7 của port C.
- RX: ngõ vào nhận dữ liệu trong chế độ truyền bất đồng bộ EUSART.
- DT: ngõ phát và nhận dữ liệu ở chế độ truyền đồng bộ EUSART.
- Chức năng các chân của PORD
- RD0: xuất/nhập số – bit thứ 0 của port D.
- Chân RD1
2.RD1: xuất/nhập số – bit thứ 1 của port D.
3. Chân RD2
- RD2: xuất/nhập số – bit thứ 2 của port D.
4.Chân RD3
- RD3: xuất/nhập số – bit thứ 3 của port D.
5. Chân RD4
- RD4: xuất/nhập số – bit thứ 4 của port D.
6. Chân RD5
- RD5: xuất/nhập số – bit thứ 5 của port D.
- ngõ ra PWM.
7. Chân RD6
- RD6: xuất/nhập số – bit thứ 6 của port D.
8. Chân RD7
- RD7: xuất/nhập số – bit thứ 7 của port D.
- Chức năng các chân của PORE
1 Chân RE0/AN5 (8): có 2 chức năng:
- RE0: xuất/nhập số.
- AN5: ngõ vào tương tự 5.
2.Chân RE1/AN6 (9): có 2 chức năng:
- RE1: xuất/nhập số.
- AN6: ngõ vào tương tự kênh thứ 6.
3. Chân RE2/AN7 (10): có 2 chức năng:
- RE2: xuất/nhập số.
- AN7: ngõ vào tương tự kênh thứ 7.
- AN5: ngõ vào tương tự 5.
2.Chân RE1/AN6 (9): có 2 chức năng:
- RE1: xuất/nhập số.
- AN6: ngõ vào tương tự kênh thứ 6.
3. Chân RE2/AN7 (10): có 2 chức năng:
- RE2: xuất/nhập số.
- AN7: ngõ vào tương tự kênh thứ 7.
Nếu nối led theo kiểu này thì muốn led sáng ta phải xuất ra mức 0 thì led mới sáng được.
Còn đây là cách nối led theo kiểu Cathode chung.
Nếu nối led theo kiểu này thì muốn led sáng ta phải xuất ra mức 1 thì led mới sáng được.
- Dưới đây là ảnh mô phỏng Protues.- Đây là code chương trình.
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000
#include <xc.h>
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void GPIO_init (void);
void Anode (void);
void Cathode (void);
void main (void)
{
GPIO_init();
while(1)
{
__delay_ms(100);
Anode();
Cathode();
__delay_ms(100);
}
}
void GPIO_init(void)
{
TRISBbits.TRISB0 = 0; // RB0 LÀ OUTPUT
TRISBbits.TRISB7 = 0; // RB7 LÀ OUTPUT
PORTBbits.RB0 = 1; // OFF LED RB0
PORTBbits.RB7 = 0; // OFF LED RB7
}
void Anode (void)
{
PORTBbits.RB0 = 0;
__delay_ms(500);
PORTBbits.RB0 = 1;
}
void Cathode (void)
{
PORTBbits.RB7 = 1;
__delay_ms(500);
PORTBbits.RB7 = 0;
}
- Video mô phỏng protues.#include <stdlib.h>
#define _XTAL_FREQ 4000000
#include <xc.h>
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void GPIO_init (void);
void Anode (void);
void Cathode (void);
void main (void)
{
GPIO_init();
while(1)
{
__delay_ms(100);
Anode();
Cathode();
__delay_ms(100);
}
}
void GPIO_init(void)
{
TRISBbits.TRISB0 = 0; // RB0 LÀ OUTPUT
TRISBbits.TRISB7 = 0; // RB7 LÀ OUTPUT
PORTBbits.RB0 = 1; // OFF LED RB0
PORTBbits.RB7 = 0; // OFF LED RB7
}
void Anode (void)
{
PORTBbits.RB0 = 0;
__delay_ms(500);
PORTBbits.RB0 = 1;
}
void Cathode (void)
{
PORTBbits.RB7 = 1;
__delay_ms(500);
PORTBbits.RB7 = 0;
}
2 nhận xét
Write nhận xétanh cho e hỏi e không tìm thấy file def_877a để xem như thế nào, nên nó báo lỗi
ReplyFile đó lên mạng download về chứ k có sẵn đây ak ! Mà bài này viết bằng XC8 mà sao hỏi về CCS !
ReplyEmoticonEmoticon