先列出程序吧:
void void DoRS232 (void) { uint8_t i; for (i = 0; i < 10; ++i) { // '0'的ASCII为0x30 uart_putchar ('0' + i); } }
DoThing (void) { // SCL是22脚、SDA是23脚 DoI2C(); // RXD是14脚、TXD是15脚 DoRS232(); // MEGA16: SS是5脚、MOSI是6脚、MISO是7脚、SCK是8脚 DoSPI(); wdt_reset(); }
我本来以为‘0’到‘9’的字符都发送玩才会开始的做DoSPI(),但是,我用逻辑分析仪采集的数据来看,在开始发送‘8’的时候,就开始执行DoSPI函数了。不同的波特率,结果是一样的。
如果说发送‘9’的时候,开始执行DoSPI还好理解:将‘9’放入发送寄存器后,CPU就不管它了,执行后续代码。问题是怎么会提早2个字符啊,难道除了发送寄存器外,还有一个缓冲的发送寄存器?
哪位大侠可以为我答疑解惑。 |