首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

程序跑飞

没有看门狗? 硬件的问题?中断设置的问题?

Strongchen:
我按您的建议试运行了一个简单的for(;;)循环的一个开关控制的LED程序。输入控制口的动作现象如下:
(1)当我把开关打开(ON - 即把输入控制口的电位拉到"零"),LED变亮。只要不从ON打回到OFF。这一步从来都没问题。无论等多长时间程序也不飞掉。

(2)当我把开关恢复到关(OFF - 即把输入控制口的电位恢复到"高"-我是用一个电阻把+5V电源接到此控制口,没有加其他外接器件到地),程序要么中止,要么飞到循环外面,总是有问题。

根据(1), 好像我的程序里根本就没有看门狗? 再就是问题总是出现在输入控制口的电平有零到高的时候,难道说应为硬件的问题?或者中断设置的问题?

请指教。谢谢。

-
由于系统是由数个开关和按键组成混合逻辑,我用PT0-3和PU1-4端口作为输入状态判断口。PA0-5;PB0-5K0-5Q0-5为输出
用了一个‘合成’的字节寄存器来判断输入口的状态:
Tinputs = TInputs_GetVal(); //读PT3-PT0的状态
Uinputs = UInputs_GetVal(); //读PT3-PT0的状态
Iinputs = (Tinputs&0x0F)|((Uinputs&0x0F)<<4);//组成一个判断寄存器(由高到底字节位的顺序组成-PU4,PU3,PU2,PU1,PT3,PT2,PT1,PTO)。

举例如下:
for(;;)
{
if(((Iinputs&0xF4)==0xF4)&&ikey==0); 判断开关#1是否ON
// (PU4-PU1)=0000/(PT3-PT0)= 0100
{
OnGreen_SetBit(0); // PA0输出‘低‘,绿LED亮
delay(500000); // 5秒延迟
OnGreen_ClrBit(0); // PA0输出‘高‘,绿LED灭
ikey=1;
}
---------------以上从来没出现问题----下面总是出错------------------
else if((TUinputs==0xCE)&&(TUinputs!=0xF4)&&ikey==1) //判断开关是否扳回初始状态(TUinputs==0xCE)。
{
OnGreen_SetBit(1); // PA1输出‘低‘,绿LED亮
delay(500000); // 5秒延迟
OnGreen_ClrBit(1); // PA1输出‘高‘,绿LED灭
}
}
-
只动作不判断没问题。
只动作不判断就出现问题。
-
只动作不判断没问题。
只判断不动作就出现问题。
-
返回列表