永发信息网

pic12F675单片机制作一个打开关设备出现疑难问题!是不是堆栈层数超了的问题?

答案:2  悬赏:0  手机版
解决时间 2021-04-01 09:46
  • 提问者网友:心如荒岛囚我终老
  • 2021-03-31 18:42
pic12F675单片机制作一个打开关设备出现疑难问题!是不是堆栈层数超了的问题?
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-03-31 19:07
你的delay延时多长时间,定时器设置多长时间,追问延迟函数delay(1)延时时间1毫秒追答定时器追问TMR1L=(65536-3000)%256;
TMR1H=(65536-3000)/256;
这样子设置是定时器3毫秒延时追答delay延时怎么测试出来的,
怀疑你延时Delay的时间,60S进开关一次,进一次运行时间是10S以下,时序没有问题,建议把while(1)里面这么写if(i>=20000) //开关设置
{
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开
delay(1000);
GPIO2=~GPIO2;//关
delay(1000);
GPIO2=~GPIO2;//开
i=0; }追问这个延迟时间是很精准的,调试软件自动计算的数值。不是这个原因。核心问题是开关次数超过5次就会程序跑飞。我想解决这个问题。追答while(1)里面按我给的函数有改善吗?追问不行,这种类似的修改我已经试过 了没有改善的追答你是用实物调试的还是仿真的追问实物调试的,仿真是没用的追答你的跑飞怎么判断的,单片机应该可以调试的,跑飞的时候i的值
只开T1这一个中断吗?其他的都关了或者
void interrupt kk()
{
T1IF=0;
TMR1L=(65536-3000)%256;
TMR1H=(65536-3000)/256;
i++;
}
这个改成
void interrupt kk()
{
if(T1IF == 1)
{
T1IF = 0;
TMR1L=(65536-3000)%256;
TMR1H=(65536-3000)/256;
i++;
}
}
全部回答
  • 1楼网友:神的生死簿
  • 2021-03-31 20:22
进入if之后把定时器关掉,执行完再打开追问不行还是一样的现象,只要是书写的函数重复出现超过几次就会这样!不知道是不是PIC单片机才会这样没有具体试过其他的品牌芯片追答把中断也关了试试看追问已经是试过了追答是不是配置的地方没有把看门狗关掉应该是看门狗把单片机复位了追问根本就没有开启开门狗定时器!!追答你确定没开起吗?你代码里面的第四行配置看门狗是关闭的吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯