pic定时器0的初始值

2019-03-25 19:47发布

  1. void init_tmr0()
  2. {
  3.      T0CS=0;             //TMR0工作于定时器方式
  4.      T0IE=1;//Timer0中断允许
  5.      GIE=1;
  6.      TMR0=0xFF;
  7.      T0IF=0;                 //清除TMR0的中断标志
  8. }
  9. void interrupt compare()
  10. {
  11.      if(T0IF && T0IE)
  12.      {
  13.          TMR0=0xFF;            //对TMR0写入一个调整值。因为写入TMR0后接着的
  14.                              //两个周期不能增量,中断需要3个周期的响应时间,
  15.                              //以及C语言自动进行现场保护要消耗周期
  16.          T0IF=0;             //清除中断标志
  17.          if(++ms==25)
  18.          {
  19.              ms=0;
  20.              if(++s==1000)
  21.              {
  22.                  s=0;
  23.                  RB3=!RB3;
  24.              }
  25.          }                     
  26.     }
  27. }
复制代码
为什么我改变TMR0的值,定时中断并没有改变呢?这个计算公式是什么 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
troy
1楼-- · 2019-03-26 02:15
楼主看看我的代码吧。

  1. /TMR0初始化子程序
  2. void                tmint()
  3. {
  4.         T0CS=0;                                //TMR0工作于定时器方式
  5.         PSA=1;                                        //TMR0不用分频
  6.         T0IF=0;                                        //清除TMR0的中断标志
  7.         T0IE=1;                                        //TMR0中断允许
  8. }
复制代码
  1. //中断服务程序
  2. void                interrupt        clkint(void)
  3. {
  4.         TMR0=0X13;                        //对TMR0写入一个调整值。因为写入TMR0后接着的
  5.         //两个周期不能增量,中断需要3个周期的响应时间,
  6.         //以及C语言自动进行现场保护要消耗周期
  7.         T0IF=0;                                        //清除中断标志
  8.         CLRWDT();
  9.         sreg=sreg+1;                                //中断计数器加1
  10.         if(sreg==40)                                //中断次数为40后,才对S0,S1,S2,S3 操作
  11.         {
  12.                 sreg=0;
  13.                 s0=s0+1;
  14.                 if(s0==10){
  15.                         s0=0        ;
  16.                         s1=s1+1;
  17.                         if(s1==10){
  18.                                 s1=0        ;
  19.                                 s2=s2+1;
  20.                                 if(s2==10){
  21.                                         s2=0;
  22.                                         s3=s3+1;
  23.                                         if(s3==10)        s3=0        ;
  24.                                 }
  25.                         }
  26.                 }
  27.         }
  28.         s[0]=s0;
  29.         s[1]=s1;
  30.         s[2]=s2;
  31.         s[3]=s3;
  32. }
复制代码
罗马后裔
2楼-- · 2019-03-26 04:00
感觉你的中断初始化程序有点问题。

一般是先
T0IF=0;  //清除TMR0的中断标志
然后在
T0IE=1;                    //TMR0中断允许

另外你的 PSA=1;                    //TMR0不用分频
也没有。
hy6383
3楼-- · 2019-03-26 07:49
我把程序改了一下
还是一样的效果
  1. //------------------------------------------------------------------
  2. //TMR0初始化子程序
  3. void init_tmr0()
  4. {
  5.         //Timer0初始化设置
  6.         T0CS=0;
  7.     PSA=1;//Timer0不使用预分频器
  8.         //外部时钟定时方式
  9.     T0IF=0;//清除TMR0的中断标志
  10.         T0IE=1;//Timer0中断允许
  11.         //GIE=1;       
  12. }//------------------------------------------------------------------
  13. //中断入口函数
  14. void interrupt compare()
  15. {//定时器中断
  16.         if(T0IF && T0IE)
  17.         {
  18.                 TMR0=0xFF;                        //对TMR0写入一个调整值。因为写入TMR0后接着的
  19.                                                         //两个周期不能增量,中断需要3个周期的响应时间,
  20.                                                         //以及C语言自动进行现场保护要消耗周期
  21.                 T0IF=0;                            //清除中断标志
  22.                 if(++ms==25)
  23.                 {
  24.                         ms=0;
  25.                         if(++s==1000)
  26.                         {
  27.                                 s=0;
  28.                                 RB3=!RB3;
  29.                         }
  30.                 }               
  31.         }

  32. }
复制代码
是什么地方设置的不对吗
shortt
4楼-- · 2019-03-26 10:48
我用的是PIC16F72的片子,外部晶振4M,我想定时2us,可以做到吗?
mcd511786450
5楼-- · 2019-03-26 15:27
没用过PIC,但感觉一点问题都没有!
oliver22414
6楼-- · 2019-03-26 16:08
 精彩回答 2  元偷偷看……

一周热门 更多>