各位大虾:通讯仪器协议为8位数据位,1位偶校验,2位停止位,波特率600,用电脑串口用1.5停止位、2停止位跟仪器通讯能成功,1停止位通讯失败;用STC8A向电脑串口发送也能正确接收,但用STC8A跟仪器通讯就没反应,是不是软件模拟2停止位不对?请各位大神指点,程序如下
串口发送数据程序:
void SendDataByUart1(u8 dat)
{
ACC=dat; //增加偶校验,是否正确?
TB8=P; // 增加偶校验,是否正确?
SBUF = dat; //写数据到UART数据寄存器
_nop_();
while(TI == 0); //在停止位没有发送时,TI为0即一直等待
delay_ms(1); //模拟2位停止位?是否正确
TI = 0; //清除TI位(该位必须软件清零)
_nop_();
}
串口初始化程序
void Uart1_Init(void)
{
PCON &= 0x3f; //波特率不倍速,串行口工作方式由SM0、SM1决定
SCON = 0xd0; //9位数据,可变波特率,启动串行接收器
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TL1 = 0x00; //设定定时初值
TH1 = 0xee; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1; // 串口1中断打开
EA = 1; // 总中断打开
} |