今天遇到一个很奇怪的问题,有没有高手能解答解答
M128的定时器有点蒙我了 , 时间减半!!!void timer0_init(void)
{
TCCR0= 0x00;//停止定时器
TCNT0= 0x06;//初始值 //16M 1ms
OCR0 = 0x05;//匹配值
TIMSK |= 0x01;//中断允许
TCCR0= 0x03;//启动定时器//64分频
}
SIGNAL(SIG_OVERFLOW0) //全局中断禁止,不允许中断嵌套.
{
TCNT0= 0x06;//初始值 1ms 定时 系统时钟 16M
OCR0 = 0x05;//匹配值
Timer_kick++; //系统定时节拍
MilionSecond_kick++;
PORTA ^=0x01; //IO 测量
if(MilionSecond_kick>2000)//????
{
Second_kick++;
Second_cnt++;
MilionSecond_kick = 0;
}
}
在IO测量处测出频率是 1K ,按道理这里应该测出0.5K才对 ,MilionSecond_kick 要记到 2000才得到1S的定时 16M的系统时钟,64分频。
void timer3_init(void)
{
TCCR3B = 0x00;//停止定时器
ETIMSK |= 0x04;//中断允许
TCNT3H = 0xFF;
TCNT3L = 0xF0;//初始值 16M --> 10us
OCR3AH = 0xFF;
OCR3AL = 0xFF;//匹配A值
OCR3BH = 0xFF;
OCR3BL = 0xFF;//匹配B值
ICR3H= 0xFF;
ICR3L= 0xFF;//输入捕捉匹配值
TCCR3A = 0x00;
TCCR3B = 0x02;//启动定时器 8分频
}
SIGNAL(SIG_OVERFLOW3) //全局中断禁止,不允许中断嵌套.
{//10us
TCNT3H = 0xff;
TCNT3L = 0xf0;//初始值
LoadSuplyTimer++;
PORTA ^=0x04;
}
这个时钟却是准确的,百思不得其解!请教高手 //TIMER0 initialize - prescale:64
// WGM: Normal
// desired value: 1mSec
// actual value:1.000mSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR= 0x00; //set async mode
TCNT0 = 0x06; //set count
OCR0= 0xFA;
TCCR0 = 0x04; //start timer
}
页:
[1]