T个月 2022-11-02 21:00 采纳率: 79.2%
浏览 25
已结题

单片机I/O口模拟UART串口通信程序,两次检测低电平为什么一次取非,一次不取

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

img

img

img

img

  • 写回答

1条回答 默认 最新

  • Star ZY 2022-11-03 14:06
    关注

    额,我觉得你没理解好吧,你画出来书上的两条线也解释得很清楚了。第一次检测到低电平,开定时器,然后进入中断,在中断里面再次判断一下电平信号是不是还是处于低电平的状态,如果还是低电平那么if( !RXD ) 这个对RXD取非得条件就成立了,就清空缓冲区准备接收数据了。如果不是低电平,就是干扰信号不接收了。所以你前半段理解是对得,它确实是要再检测一次低电平,但是为什么是if( !RXD )呢,是因为它要利用这低电平做一个条件去执行一些东西。因为低电平RXD = 0,取非 (!RXD)就等于1,然后就能进去if()里面去干活去了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 创建了问题 11月2日