飞思卡尔16位单片机SCI串行通信里, While(!(SCI0SR1&0X80));这行什么作用啊?下面是写输出寄存器的一个子

2025-04-13 10:12:16
推荐回答(4个)
回答1:

SCI0SR1的最高位为TDRE,为发送数据寄存器空标志位。当发送数据寄存器中的数据转移到了移位寄存器中时,该标志位置1,此时发送数据寄存器为空,可以接收新的数据。
While(!(SCI0SR1&0X80))即为判断SCI0SR1的最高位即TDRE位是否为1,如果为1则退出循环往数据寄存器写要发送的数据(后两行的意思)

希望对你有帮助。

回答2:

While(!(SCI0SR1&0X80))
其中是利用WHILE判断SCI0SR1&0X80是否为1
(!大概是判断的意思 是个基础知识 书本上咋个写的忘记了)
也就是SCI0SR1_OR为溢出的时候
while为真 程序停止在这个语句不动
直到SCI0SR1_OR为溢出标志位为0的时候
执行
SCI0DRH=0;//输出数据寄存器
SCI0DRL=sendchar;

回答3:

这条语句是等待作用,意思就是SCI0SR1寄存器中的最高位如果是0的话,程序会一直停留在这句话上,不会执行下面的语句,直到!(SCI0SR1&0X80)=0的时候,程序跳出while循环,执行下面的语句。最高位的寄存器的意思好像是判断输出寄存器是否为空的,印象不是很深了,你可以去买本书看看或者到网上转转。

回答4:

查询发送寄存器是否为空,如果为空就发送,不为空就继续查询。

SCI0SR1的第8位是发送数据寄存器空标志位