打印

请帮忙分析一下原因

[复制链接]
1860|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不亦心|  楼主 | 2009-11-10 00:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不亦心 于 2009-11-10 12:10 编辑

被这个问题折磨的受不了,

问题是:不管定时器初值是什么,second的值是什么,程序每运行131S,second就被赋值为1,(定义second的时候,是赋值为1的)
配置中关了WDT。
配置位见下图,p18f4520的片子,MCC18编译器。
大致程序就像下面。
void timr0 (void)//定时器tmr0中断函数
{
TMR0H=0x0b;
TMR0L=0xdd;
INTCONbits.TMR0IF=0;
++second;
if(second>60) second=1;
}

void main(void)
{
tmr0_init();//初始化
while(1)
{
  sec=second;
  flag=sec&0x01;
  if(sec<=22)
//下面全是对sec等其他变量的操作,没有动过second
}
}

沙发
su_mj000| | 2009-11-10 08:10 | 只看该作者
基本上可以认定是复位引起的(大部分C编译器在进入main()之前,会总清RAM)。就这点代码而言,MPLAB上模拟、调试就可解决问题。
(在0地址设断点,先单步走几步,随后连续运行)。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
不亦心 + 1
板凳
不亦心|  楼主 | 2009-11-10 12:03 | 只看该作者
请问你说的复位引起的是指硬件上的问题嘛,

我用MPLAB    SIM调试的时候,程序运行正常,

用Proteus调试的时候,就出现上述情况。


2# su_mj000

使用特权

评论回复
地板
su_mj000| | 2009-11-10 12:51 | 只看该作者
从来没用过Proteus,只知道它是个模拟仿真软件。相比之下,我更愿意相信MPLAB的结果。

软件、硬件上的因素都可能造成系统复位。LZ难道就没有在实际硬件上试过?

使用特权

评论回复
5
不亦心|  楼主 | 2009-11-10 13:47 | 只看该作者
谢谢LS啊

确实MPLAB  SIM可靠性高一点,呵呵

问题解决了,程序没问题


4# su_mj000

使用特权

评论回复
6
cheungman| | 2009-11-10 15:14 | 只看该作者
proteus确实很好, 初学玩玩proteus挺好的, 但千万别把proteus太当一回事, 做实际项目就不能太依赖仿真软件了.

使用特权

评论回复
7
不亦心|  楼主 | 2009-11-10 15:34 | 只看该作者
嗯嗯
俺学51的时候全靠Proteus,没有做实验板


6# cheungman

使用特权

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

本版积分规则

个人签名:电源方案,可批量订做供货。 微信:红红橙黄棕红紫白黑。TEL:棕绿灰灰白紫紫绿棕黄黑

2993

主题

10032

帖子

212

粉丝