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