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

BÀI 25 : COUNTER CỦA TIMER 1 PIC16F877A CCS

Chào các bạn trong bài đăng này mình sẽ giới thiệu với các bạn về chế độ Counter của TIMER 1 PIC16F877A. Chúng ta sẽ đi tìm các lệnh để cấu hình cho TIMER 1 như sau :
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()
2.  LỆNH SETUP_TIMER_1(MODE)
- Cú pháp:    setup_timer_1(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
T1_DISABLED, T1_INTERNAL, T1_EXTERNAL, T1_EXTERNAL_SYNC
TC_CLK_OUT, T1_DIV_BY_1, T1_DIV_BY_2, T1_DIV_BY_4, T1_DIV_BY_8.
Các hằng số từ nhiều nhóm khác nhau thì có thể or với nhau.
- Chức năng:
  • Khởi tạo cho TIMER1.
  • Với tần số thạch anh  là 20MHz và khởi tạo T1_DIV_BY_8 thì timer sẽ tăng giá trị sau
mỗi khoảng thời gian 1.6µs. Timer sẽ tràn sau 104.8576 ms.
- Có hiệu lực:  cho tất cả các vi điều khiển PIC có timer 1.
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 1 pic16f877a ccs

- Đây là code chương trình.
#INCLUDE <16F877a.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=16000000)
CONST UNSIGNED CHAR MA7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90};
INT16 DEM;
UNSIGNED CHAR DONVI,CHUC, TRAM, NGHIN; 
VOID TACHSO (INT16 COUNT)
{    
NGHIN = COUNT/1000;
TRAM = (COUNT - NGHIN*1000)/100;
CHUC = (COUNT - NGHIN*1000 - TRAM*100)/10;
DONVI = COUNT - NGHIN*1000 - TRAM*100 - CHUC*10;
}
VOID DISPLAY ()
{    
OUTPUT_B(MA7SEG[NGHIN]);    
OUTPUT_HIGH(PIN_D0);
DELAY_MS(5);    
OUTPUT_LOW(PIN_D0);

OUTPUT_B(MA7SEG[TRAM]);    
OUTPUT_HIGH(PIN_D1);
DELAY_MS(5);    
OUTPUT_LOW(PIN_D1);

OUTPUT_B(MA7SEG[CHUC]);    
OUTPUT_HIGH(PIN_D2);
DELAY_MS(5);    
OUTPUT_LOW(PIN_D2);

OUTPUT_B(MA7SEG[DONVI]);    
OUTPUT_HIGH(PIN_D3);
DELAY_MS(5);    
OUTPUT_LOW(PIN_D3);
VOID MAIN()
{    
SET_TRIS_B(0x00); 
SET_TRIS_D(0x00);
OUTPUT_B(0);
OUTPUT_D(0);
SETUP_TIMER_1(T1_EXTERNAL | T1_DIV_BY_1); 
SET_TIMER1(0); 
WHILE(1)
{
DEM = GET_TIMER1();
TACHSO(DEM);
DISPLAY();
IF(DEM==1500)
{
SET_TIMER1(0);
DEM=0;
}
}
}
- Link download project Click here


EmoticonEmoticon