单片机I/O口模拟UART串口通信程序,最开始进入StartRXD()函数前检测低电平,写的是whike(PIN_RXD)。但是后面进入中断之后再次确认是否是低电平,又写的是if(!PIN_RXD),这里对PIN_RXD取非了,那么同样检测低电频,为什么两次程序不一样呢
程序如下

单片机I/O口模拟UART串口通信程序,两次检测低电平为什么一次取非,一次不取
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Star ZY 2022-11-03 14:06关注
额,我觉得你没理解好吧,你画出来书上的两条线也解释得很清楚了。第一次检测到低电平,开定时器,然后进入中断,在中断里面再次判断一下电平信号是不是还是处于低电平的状态,如果还是低电平那么if( !RXD ) 这个对RXD取非得条件就成立了,就清空缓冲区准备接收数据了。如果不是低电平,就是干扰信号不接收了。所以你前半段理解是对得,它确实是要再检测一次低电平,但是为什么是if( !RXD )呢,是因为它要利用这低电平做一个条件去执行一些东西。因为低电平RXD = 0,取非 (!RXD)就等于1,然后就能进去if()里面去干活去了。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报