- void init_tmr0()
- {
- T0CS=0; //TMR0工作于定时器方式
- T0IE=1;//Timer0中断允许
- GIE=1;
- TMR0=0xFF;
- T0IF=0; //清除TMR0的中断标志
- }
- void interrupt compare()
- {
- if(T0IF && T0IE)
- {
- TMR0=0xFF; //对TMR0写入一个调整值。因为写入TMR0后接着的
- //两个周期不能增量,中断需要3个周期的响应时间,
- //以及C语言自动进行现场保护要消耗周期
- T0IF=0; //清除中断标志
- if(++ms==25)
- {
- ms=0;
- if(++s==1000)
- {
- s=0;
- RB3=!RB3;
- }
- }
- }
- }
复制代码
为什么我改变TMR0的值,定时中断并没有改变呢?这个计算公式是什么
此帖出自
小平头技术问答
还是一样的效果
- //------------------------------------------------------------------
- //TMR0初始化子程序
- void init_tmr0()
- {
- //Timer0初始化设置
- T0CS=0;
- PSA=1;//Timer0不使用预分频器
- //外部时钟定时方式
- T0IF=0;//清除TMR0的中断标志
- T0IE=1;//Timer0中断允许
- //GIE=1;
- }//------------------------------------------------------------------
- //中断入口函数
- void interrupt compare()
- {//定时器中断
- if(T0IF && T0IE)
- {
- TMR0=0xFF; //对TMR0写入一个调整值。因为写入TMR0后接着的
- //两个周期不能增量,中断需要3个周期的响应时间,
- //以及C语言自动进行现场保护要消耗周期
- T0IF=0; //清除中断标志
- if(++ms==25)
- {
- ms=0;
- if(++s==1000)
- {
- s=0;
- RB3=!RB3;
- }
- }
- }
- }
复制代码是什么地方设置的不对吗
一周热门 更多>