Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn về Counter của Timer 0 của Vi Điều Khiển PIC16F877A dử dụng trình biên dịch PIC C Compiler để viết và biện dịch code.
1. CÁC LỆNH CỦA TIMER – COUNTER TRONG NGÔN NGỮ PIC-C
Các lệnh của ngôn ngữ lập trình C liên quan đến timer/counter bao gồm:
Cú pháp: setup_timer_0(mode)
Thông số: mode có thể là 1 hoặc 2 hằng số định nghĩa trong file device.h. Các thông số gồm :
Chức năng: Định cấu hình cho TIMER0.
Có hiệu lực: cho tất cả các vi điều khiển PIC.
3. LỆNH SET_TIMERx(value)
Cú pháp: set_timerX(value) ; x là 0, 1, 2
Thông số: value là hằng số nguyên 8 hoặc 16 bit dùng để thiết lập giá trị mới cho timer.
Chức năng: thiết lập giá trị bắt đầu cho TIMER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
4. LỆNH GET_TIMERx()
Cú pháp: value = get_timerX() ; x là 0, 1, 2
Thông số: không có.
Chức năng: đọc giá trị của TIMER/COUNTER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình.
1. CÁC LỆNH CỦA TIMER – COUNTER TRONG NGÔN NGỮ PIC-C
Các lệnh của ngôn ngữ lập trình C liên quan đến timer/counter bao gồm:
- Lệnh SETUP_TIMER_X()
- Lệnh SET_TIMER_X()
- Lệnh SETUP_COUNTERS()
- Lệnh SETUP_WDT()
- Lệnh RESTART_WDT()Lệnh GET_TIMER_X()
Cú pháp: setup_timer_0(mode)
Thông số: mode có thể là 1 hoặc 2 hằng số định nghĩa trong file device.h. Các thông số gồm :
- RTCC_INTERNAL, RTCC_EXT_L_TO_H hoặc RTCC_EXT_H_TO_L
- RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32,
- RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256.
Chức năng: Định cấu hình cho TIMER0.
Có hiệu lực: cho tất cả các vi điều khiển PIC.
3. LỆNH SET_TIMERx(value)
Cú pháp: set_timerX(value) ; x là 0, 1, 2
Thông số: value là hằng số nguyên 8 hoặc 16 bit dùng để thiết lập giá trị mới cho timer.
Chức năng: thiết lập giá trị bắt đầu cho TIMER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
4. LỆNH GET_TIMERx()
Cú pháp: value = get_timerX() ; x là 0, 1, 2
Thông số: không có.
Chức năng: đọc giá trị của TIMER/COUNTER.
Có hiệu lực: cho tất cả các vi điều khiển PIC có timer.
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình.
#INCLUDE <16F877A.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
CONST UNSIGNED CHAR MA7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90};
INT DEM;
UNSIGNED CHAR CHUC, DONVI;
VOID TACHSO (INT COUNT)
{
CHUC = COUNT/10;
DONVI = COUNT%10;
}
VOID DISPLAY ()
{
OUTPUT_B(MA7SEG[CHUC]);
OUTPUT_HIGH(PIN_D0);
DELAY_MS(5);
OUTPUT_LOW(PIN_D0);
OUTPUT_B(MA7SEG[DONVI]);
OUTPUT_HIGH(PIN_D1);
DELAY_MS(5);
OUTPUT_LOW(PIN_D1);
}
VOID MAIN()
{
SET_TRIS_B(0x00);
SET_TRIS_D(0x00);
OUTPUT_D(0);
OUTPUT_B(0);
SETUP_TIMER_0(RTCC_EXT_L_TO_H | RTCC_DIV_1);
SET_TIMER0(0);
WHILE(TRUE)
{
DEM=GET_TIMER0();
TACHSO(DEM);
DISPLAY();
IF(DEM==99)
{
SET_TIMER0(0);
DEM = 0;
}
}
}
- Link download project Click here#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16M)
CONST UNSIGNED CHAR MA7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90};
INT DEM;
UNSIGNED CHAR CHUC, DONVI;
VOID TACHSO (INT COUNT)
{
CHUC = COUNT/10;
DONVI = COUNT%10;
}
VOID DISPLAY ()
{
OUTPUT_B(MA7SEG[CHUC]);
OUTPUT_HIGH(PIN_D0);
DELAY_MS(5);
OUTPUT_LOW(PIN_D0);
OUTPUT_B(MA7SEG[DONVI]);
OUTPUT_HIGH(PIN_D1);
DELAY_MS(5);
OUTPUT_LOW(PIN_D1);
}
VOID MAIN()
{
SET_TRIS_B(0x00);
SET_TRIS_D(0x00);
OUTPUT_D(0);
OUTPUT_B(0);
SETUP_TIMER_0(RTCC_EXT_L_TO_H | RTCC_DIV_1);
SET_TIMER0(0);
WHILE(TRUE)
{
DEM=GET_TIMER0();
TACHSO(DEM);
DISPLAY();
IF(DEM==99)
{
SET_TIMER0(0);
DEM = 0;
}
}
}
EmoticonEmoticon