PIC16F877A TIMER1定時操作
/**********************
Title:PIC16F877A TIMER1定時操作
Author:hnrain
Date:2010-12-28
使用前置分頻器
T1CKPS1 T1CKPS1
0 0 1 分頻 TMR1時鐘為晶振時鐘/(4*1)
0 1 2 分頻 TMR1時鐘為晶振時鐘/(4*2)
1 0 4 分頻 TMR1時鐘為晶振時鐘/(4*4)
1 1 8 分頻 TMR1時鐘為晶振時鐘/(4*8)
TMR1是16位寬度的TMR1由2個8位的可讀寫的寄存器TMR1H和TMR1L組成。
TMR1有專門的啟停控制位TMR1ON,通過軟件可以任意啟動或暫停TMR1計數(shù)功能。
T1CON:TIMER1 CONTROL REGISTER
bit7-6 unimplemented :Read as ‘0’
bit5-4 T1CKPS1:T1CKPS0:Timer1 input Clock Prescale Select bits
11=1:8 prescale value
10=1:4 prescale value
01=1:2 prescale value
00=1:1 prescale value
bit3 T1OSCEN:Timer1 Oscillator Enable Control bit
1 = Oscillator is enable
0 = Oscillator is shut-off
bit2 T1SYNC:Timer1 External Clock Input Synchronization Control bit
when TMR1CS = 1
1= Do not synchronize external clock input
0= Synchronize external clock input
when TMR1CS = 0
This bit is ignored .Timer1 uses the internal clock when TMR1CS = 0.
bit1 TMR1CS:Timer1 Clock Source Select bit
1 = External clock from pin RC0/T1OSO/T1CKI
0 = Internal clock
bit0 TMR1ON:Timer1 on bit
1 = enables timer1
0 = stops timer1
***********************/
#include
#include "../head/config.h"
__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);
void Delayms(uint16 dly);
void main(void)
{
T1CKPS1 = 1;
T1CKPS0 = 1;
TMR1CS = 0;
TMR1L = (65536 - 37500)%256;
TMR1H = (65536 - 37500)/256;
GIE = 1;
PEIE = 1;
TMR1IE = 1;
TMR1ON = 1;
PORTD = 0x00;
TRISD = 0x00;
while(1){}
}
void interrupt ISR(void)
{
TMR1L = (65536 - 37500)%256;
TMR1H = (65536 - 37500)/256;
if(TMR1IF&&TMR1IE)
{
TMR1IF = 0;
PORTD = ~PORTD;
}
}