打印
[PIC®/AVR®/dsPIC®产品]

PIC16F1936内部定时器0不准

[复制链接]
3037|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhaomcu|  楼主 | 2014-6-8 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用Protues对PIC16F1936进行仿真其内部定时器0,可是仿真实际值与理想值就是不同,真不知道怎么回事了!求大家指教,下面是代码部分:
__CONFIG(FOSC_INTOSC & WDTE_OFF & IESO_OFF);
int main()
{
  PEIE = 1;
  TMR0IE = 1;
  GIE = 1;
  OSCCONbits.SCS = 3;
  OSCCONbits.IRCF = 13;
  PIN_DIR(LED,PIN_OUTPUT);
  OPTION_REGbits.PS = 0;
  OPTION_REGbits.PSA = 1;         // 禁止预分频器
  OPTION_REGbits.T0SE = 0;
  OPTION_REGbits.T0CS = 0;   // Tcy = 4MHz/4 = 1us
  TMR0 = 242;                          // 定时10us,TMR0 = 255-(10us/Tcy)-2(延时)-1;
  while(1);
  return 1;
}

void interrupt ISR(void)
{
  if(T0IF)
  {
    T0IF = 0;
    TMR0 = 245;
    cnt++;
    if(cnt>=100)
    {
      cnt = 0;
      PIN_INV(LED);           //反转二极管
    }  
  }  
}

沙发
zhimagod| | 2014-6-8 09:12 | 只看该作者
用什么仿真的?结果是多少?每次都相同还是每次不一样?具体问题具体分析嘛。而且……你定时间是不是短点了?跟踪下看看此次中断到下次中断之间都跑了哪些指令

使用特权

评论回复
板凳
huhaomcu|  楼主 | 2014-6-8 09:23 | 只看该作者
zhimagod 发表于 2014-6-8 09:12
用什么仿真的?结果是多少?每次都相同还是每次不一样?具体问题具体分析嘛。而且……你定时间是不是短点了 ...

我是用的Protues进行的软件仿真(软件仿真一般不会出现很大的问题),软件仿真中每次时间间隔相同,我设定的是1ms可软件却是3ms.想问一下关于TMR0的计算方式是不是这样的:
比如说我的FOSC=4MHz.定时时间为10us,那么Tcy =FOSC/4 = 1us.TIMER0的不分频.则TMRO = 255 - (10us/Tcy) - 2 -1;
减2的原因是因为在数据手册中有写到当向TMR0内写入值后,它会延时2个Tcy后才会开如递增.软件设置时应该考虑这一影响,不知这样算是否正确???

使用特权

评论回复
地板
zhimagod| | 2014-6-8 11:32 | 只看该作者
huhaomcu 发表于 2014-6-8 09:23
我是用的Protues进行的软件仿真(软件仿真一般不会出现很大的问题),软件仿真中每次时间间隔相同,我设定的 ...

原理问题是不大的
但10us的定时要注意中断服务函数执的行时间了

使用特权

评论回复
5
yklstudent| | 2014-6-8 21:33 | 只看该作者
10us 楼主显然要累死单片机了

使用特权

评论回复
6
huhaomcu|  楼主 | 2014-6-8 22:06 | 只看该作者
yklstudent 发表于 2014-6-8 21:33
10us 楼主显然要累死单片机了

好像是定时时间过短的原因,现我将周期设为8ms后,Protues仿真为7.9ms,但还是不能到达8ms,以前仿真PIC24F32KA304基本上能到达我的理想值的@

使用特权

评论回复
7
yklstudent| | 2014-6-9 08:10 | 只看该作者
huhaomcu 发表于 2014-6-8 22:06
好像是定时时间过短的原因,现我将周期设为8ms后,Protues仿真为7.9ms,但还是不能到达8ms,以前仿真PIC24F32 ...

你就不应该这么使用,直接定义8ms的中断好了
要么就使用16位的TIMER1吧

使用特权

评论回复
8
yewuyi| | 2014-6-9 09:08 | 只看该作者
你首先要确定到底谁有问题?
Protues的问题,你应该去问Protues。
MCHP的问题,你应该去问MCHP。


你这标题“PIC16F1936内部定时器0不准”,你确定是PIC16F1936不准?

另外,你那中断函数写的有问题,十分怀疑‘仿真PIC24F32KA304基本上能到达我的理想值的’,你连PIC的基本的中断函数应该怎么写都没弄清楚啊!!!

使用特权

评论回复
9
huhaomcu|  楼主 | 2014-6-9 20:23 | 只看该作者
yewuyi 发表于 2014-6-9 09:08
你首先要确定到底谁有问题?
Protues的问题,你应该去问Protues。
MCHP的问题,你应该去问MCHP。

我不知你说的中断函数有什么问题,事实是我确实能进入中断服务函数内部.还有编译器是HI-TECH!

使用特权

评论回复
10
忘记梦| | 2014-6-9 22:58 | 只看该作者
建议配置成毫秒级别的,单片机达到微妙级别很累,加上你没有用预分频,这样配置显然不会太准,有可能差好多

使用特权

评论回复
11
yewuyi| | 2014-6-10 08:14 | 只看该作者
huhaomcu 发表于 2014-6-9 20:23
我不知你说的中断函数有什么问题,事实是我确实能进入中断服务函数内部.还有编译器是HI-TECH! ...

都提示你有问题了,自己还不愿意思考到底有什么问题?还停留在反驳别人的层次上。

一个中断函数有没有问题是用可不可以进入来衡量的吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

189

主题

508

帖子

3

粉丝