9194|6

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

pic定时器0的初始值 [复制链接]

  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的值,定时中断并没有改变呢?这个计算公式是什么

最新回复

超郁闷的,是不是这个晶振做不到很快的速度  详情 回复 发表于 2010-2-23 14:44
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
楼主看看我的代码吧。

  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. }
复制代码
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感觉你的中断初始化程序有点问题。

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

另外你的 PSA=1;                    //TMR0不用分频
也没有。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
我把程序改了一下
还是一样的效果
  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. }
复制代码

是什么地方设置的不对吗
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

5
 
我用的是PIC16F72的片子,外部晶振4M,我想定时2us,可以做到吗?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
没用过PIC,但感觉一点问题都没有!
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
超郁闷的,是不是这个晶振做不到很快的速度
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表