Chào các bạn trong bài đăng này mình sẽ hướng dẫn về timer của PIC16F877A. Các bạn chú ý đây là 1 trong các modun của PIC16F877A và nó cũng rất quan trọng và được sử dụng rất nhiều nên các bạn phải chú ý để nắm rõ về nó.
1 Giới thiệu về Timers
a. Timer được sử dụng cho nhiều chức năng như :
- Định thì để tạo sự kiện
- Đếm sự kiện
-Tạo dạng sóng….
b. PIC16F877A có 3 Timers
- timer 0
- timer 1
- timer 2
c. So sánh các timer2. Đặc điểm timer 0
3. Sơ đồ khối timer 0
Các bạn tự lên mạng tìm cách tính thời gian để khởi tạo timer 0 nha ! Nếu không biết tính thì comment ở dưới mình chỉ cho !
- Đâ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)
unsigned int Count = 0;
void main(void) {
TRISCbits.TRISC0 = 0; //RC0 pin as output
//config timer0
TMR0 = 55;
OPTION_REGbits.PSA = 0;
OPTION_REGbits.PS2 = 0;
OPTION_REGbits.PS1 = 1;
OPTION_REGbits.PS0 = 0;
OPTION_REGbits.T0CS = 0;
while (1)
{
if(INTCONbits.TMR0IF == 1)
{
INTCONbits.TMR0IF = 0;
TMR0 = 55;
Count++;
if(Count == 125)
{
Count = 0;
PORTCbits.RC0 ^= 1; //toggle the LED
}
}
}
}
EmoticonEmoticon