继续之前的串口调试,使用如下代码:
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 32k/9600 – 3.41
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; // Initialize USART state machine
// Mainloop
for (;;)
{
while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
TXBUF1 = 0xA5;
}
}
上述代码在CCS5.1下单步执行,可以产生正确的结果,但持续运行,则没有连续的数据产生,暂停后结果偶尔不正确,请问是什么原因呢?
是因为采用轮询的方式造成CPU阻塞吗?
Shi JianHua:
增加些延时试试。
yffy:
轮询方式没有问题,看看波特率是不是一致。
Sheldon Song:
回复 Shi JianHua:
@Shi JianHua
增加了延迟也不行
Sheldon Song:
回复 yffy:
@yffy
不知道您说得波特率一致指得是什么?
yffy:
串口接收端和你的单片机发送端的波特率,之前碰到过两个单片机都设置为9600但是通信有问题,有误差。
Sheldon Song:
回复 yffy:
@yffy
我现在是使用PC机和单片机通讯,而且单步执行会有正确的数据产生,应该不是波特率设置的问题。