在读取并行IO口时,先通过软件程序写入什么

在读取并行IO口时,先通过软件程序写入什么,第1张

在读取并行I0口时,先通过软件程序写入内部总线上的数据写入输出锁存器

在读引脚时,该端口的锁存储器必须事先写1,这是因为该端口既是输出端同时也是外部信号的输入端。假设该端口的状态此时为0,则驱动器的下方场效应管导通,此时相当于输出0。缺碧如果有一外部输入信号是高电平且加到该引脚上枣滑,则该引脚伏岩举会被强行箝拉到低电平,故造成读到CPU中的数据为0,同时也可能造成器件损环。

一直循环检测IO口状态,检测到起始信号边缘(如51单御答片机IO口一直是高电平,当检简唯测到出现低电平即为启动信号),然后利用延时程序延时0.5ms,读取每个数据位的中间位置,判断是0还是1。

根据你的实际要求,第一次读取肯定是高电平,第二次读取为低电平,你需要再判断第三次和第四次,如果第三、四次均为低电平则为数据1,如果不是则为数据0。

个人感觉你这个通信协议有点问题,需要改进。原因如下:

比如顺氦矗份匪莓睹逢色抚姬序出现高、低、低电平时已经可以判断为1了,第四个电平是没有作用的。还有你这个协议由于数据1传输结尾时低电平,因此需要以高电平作为镇咐慧启动信号,而大部分单片机都是以低电平为启动信号的。

本来要说明具体在什么地方用,但是只按你的要求处理的话脊宏段如下

假设IO的脚位是P1^0

int DELAY_CNT

if(P1^0==X)

{

DELAY_CNT++

if(DELAY_CNT>樱誉10000)

{

if(P1^0==X)

CNT++

if(CNT>4)

{

FLAG_X=1

}

}

}

在主函数里判断FLAG_X是否等于1如果是,那就处理你要处理的,如果不是,就说明没达绝搜到处理要求。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12396423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存