打印

STM8S读IDR老出错

[复制链接]
2291|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
motor666|  楼主 | 2013-8-12 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8S105F的PE7接一个安键对地。配置成上拉输入,用万用表侧PE7,当按键不按下,始终是5V,在程序头上定义:_Bool  KEY_IN    @ PE_IDR:7; 定时器中断中判断:if(KEY_IN==0){},结果读出的始终是0,观察寄存器窗口发现 PE_IDR的第7位却是1,认为上述布尔定义不管用,改用读整个IDR:
unsigned char  Read_PE ;
Read_PE = PE_IDR;
if((Read_PE&0x80)==0)
{}
这样处理后,大部分时候是正确的,但偶尔会出现错误,谁给个解释?




沙发
feilusia| | 2013-8-12 14:54 | 只看该作者
赋值来赋值去的干嘛?为什么不直接if((PE_IDR&0x80)==0)??

使用特权

评论回复
板凳
chuangpu| | 2013-8-12 19:24 | 只看该作者
在不断的重复赋值的问题上出了问题   我是这样理解的  楼主  

使用特权

评论回复
地板
chuangpu| | 2013-8-12 19:25 | 只看该作者
尽量将需要的数值   一步到位   我感觉这样会比较靠谱  

使用特权

评论回复
5
motor666|  楼主 | 2013-8-15 10:19 | 只看该作者
感谢各位的回复,像这样if((PE_IDR&0x80)==0)直接判断依然没能解决问题,是否因为这个脚是模拟输入脚,用作数字输入是否要把模拟功能关闭,但是我不知道怎么关闭,如果知道可以试一下。

使用特权

评论回复
6
feilusia| | 2013-8-15 10:28 | 只看该作者
motor666 发表于 2013-8-15 10:19
感谢各位的回复,像这样if((PE_IDR&0x80)==0)直接判断依然没能解决问题,是否因为这个脚是模拟输入脚,用 ...

你电平可能没有拉高。

使用特权

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

本版积分规则

173

主题

419

帖子

1

粉丝