本帖最后由 hzocce 于 2015-12-9 11:14 编辑
下面是STC官方的函数,对于串口3 :
void SendData(unsigned char dat)
{
while (Uart3busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
S3CON &= ~S3TB8; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
S3CON |= S3TB8; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
S3CON |= S3TB8; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
S3CON &= ~S3TB8; //设置校验位为0
#endif
}
Uart3busy = 1;
S3BUF = ACC; //写数据到UART2数据寄存器
}
改成:
void SendData(unsigned char dat)
{
while (Uart3busy); //等待前面的数据发送完成
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
S3CON &= ~S3TB8; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
S3CON |= S3TB8; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
S3CON |= S3TB8; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
S3CON &= ~S3TB8; //设置校验位为0
#endif
}
Uart3busy = 1;
S3BUF = dat; //写数据到UART2数据寄存器
』
也可以的, 为什么多写个ACC干嘛???????????????
void SendStringUart3(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符
}
}
|