Thứ Năm, 14 tháng 1, 2016

BÀI 24 : COUNTER CỦA TIMER 0 PIC16F877A CCS

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:
  1. Lệnh   SETUP_TIMER_X()
  2. Lệnh   SET_TIMER_X()
  3. Lệnh   SETUP_COUNTERS()
  4. Lệnh   SETUP_WDT()
  5. Lệnh   RESTART_WDT()Lệnh   GET_TIMER_X()
2.  LỆNH SETUP_TIMER_0(MODE) 
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.
Các hằng số từ nhiều nhóm khác nhau thì có thể or với nhau.
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.

counter timer 0 pic16f877a ccs

- Đâ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


EmoticonEmoticon