jhjkdz 发表于 2013-12-21 09:17:16

求助M8端口识别电平问题

AVR M8识别io口怎样区分两个都是低电平?
代码如下:
第一种状态:
if(!(PINB & (1<< 4)))//PB4口开始是低电平
{
    LED灭;
}
第二种状态:
if(PINB & (1 << 4))//PB4有高电平
{
   LED亮;
}
第三种状态:
if(。。。。。)//PB4口恢复到低电平
{
   LED闪;
}
前面两个状态都能实现,第三个状态和第一个状态的输入条件一样,但输出要求不一样,求助坛友有什么思路?

liudingding 发表于 2013-12-21 09:43:36

就是PB4从低电平变高电平,再变低电平,LED就闪烁吗?
那增加一个变量,初始0,PB4变高时变量变1,PB4为0该变量为1时LED 闪烁,不就行了

jhjkdz 发表于 2013-12-21 10:21:40

liudingding 发表于 2013-12-21 09:43
就是PB4从低电平变高电平,再变低电平,LED就闪烁吗?
那增加一个变量,初始0,PB4变高时变量变1,PB4为0该 ...

谢谢!这个检测是不是脉冲上升沿检测?那如果检测输入是方波呢?
就是说开始是低电平,然后有方波,最后方波撤销。

liudingding 发表于 2013-12-21 09:17:17

检测50Hz的方波,不难吧,定时器中断,用远高于50Hz的频率中断,每次中断检测一次,上升沿检测还需要检测下降沿,一个端口只能检测上升沿或下降沿,需要两个中断端口,

jhjkdz 发表于 2013-12-21 11:40:18

liudingding 发表于 2013-12-21 11:09
检测50Hz的方波,不难吧,定时器中断,用远高于50Hz的频率中断,每次中断检测一次,上升沿检测还需要检测下 ...

谢谢你的回复!我想用一个端口的思路,因为这个端口是用来做故障检测的,只要有方波出现过,我要记住这个方波是有过的,方波撤销了要有记录。平时这个端口一直是低电平。有故障才有方波。
那么它的逻辑关系是这样的,开始端口一直是低电平(无故障),LED灭。端口有方波了,LED亮。(有故障),然后故障消失了,检测端口恢复到低电平。这时要求LED闪,告诉用户有故障了,等待用户按复位键,解除告警。


liudingding 发表于 2013-12-21 16:49:39

那就用外部上升沿中断+定时器中断,上升沿中断灯亮,设置一个变量,从零变为1,定时器不断中断检测脉冲是否结束,没结束一直亮灯,结束变为低电平,端口低电平,变量位1,灯闪烁

jhjkdz 发表于 2013-12-21 20:46:22

liudingding 发表于 2013-12-21 16:49
那就用外部上升沿中断+定时器中断,上升沿中断灯亮,设置一个变量,从零变为1,定时器不断中断检测脉冲是否 ...

谢谢!我试试
页: [1]
查看完整版本: 求助M8端口识别电平问题