请帮忙分析一下原因

[复制链接]
2863|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难道就没有在实际硬件上试过?
 楼主| 不亦心 发表于 2009-11-10 13:47 | 显示全部楼层
谢谢LS啊

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

问题解决了,程序没问题


4# su_mj000
cheungman 发表于 2009-11-10 15:14 | 显示全部楼层
proteus确实很好, 初学玩玩proteus挺好的, 但千万别把proteus太当一回事, 做实际项目就不能太依赖仿真软件了.
 楼主| 不亦心 发表于 2009-11-10 15:34 | 显示全部楼层
嗯嗯
俺学51的时候全靠Proteus,没有做实验板


6# cheungman
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2993

主题

10032

帖子

211

粉丝
快速回复 在线客服 返回列表 返回顶部