芯片 PIC16F877A 晶振4M 程序如下:
void timer0_init() //
{
//TMR0=61;的前提下:
OPTION=0x00;//不同的分频用示波器实测时间 00:410us 01:800us 02:1.58ms 03:3.16ms 04:6.24ms
//05:12.6ms 06:25ms 07:50ms
INTCON=0xa0;
TMR0=61;
}
中断如下:
void interrupt ISR()
{
/*******timer0********/
if(T0IE&&T0IF)//T0IE:timer0溢出中断使能位/T0IF:溢出标志位.要软件清零
{
T0IF=0;
TMR0=61;//初值61 50ms溢出一次
RD0=!RD0; //测RD0引脚的电平变化时间
}
}
当2分频的时候 初值61 定时的时间应该是 (256-61)*2=390us 实测有410us 这个误差很大,是怎么出现的?
是实测的准还是要看理论上算出来的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
T0IF=0; //1us
TMR0=61;//4us
RD0=!RD0;//2us
相差20us 加上这几个还是对不上时间差.
"tmr0=61;//初值61 50ms溢出一次 "
something like that should be avoided at all costs: because of interrupt latency, tmr0 has a value (of potentially 20 ticks or so) before the isr gets executed. so overwriting it with another value will lengthen the isr.
a better approach is
tmr0+=-tmr0_period + error_term;
where tmr0_period is the desired period for tmr0 (in ticks) and error_term is an error term to ad......
-----------------------------------------------------------------------
哪位朋友帮我将这段翻译一下好吗? 英文太差.看的沆沆洼洼的,不理解啊
一周热门 更多>