今天在调试的过程中,发现了个奇葩的问题,我按照datasheet上面的程序测试Uart2,但是只能发送一个字节,当通过uart和uart2交叉发送数据时,可以一直发送,但是当我禁掉uart只用Uart2发送时,却出现了问题:不能连续发送。。我纳闷了,这到底是怎么回事,后来才发现原来是TI=1时,影响了Uart2的发送,必须申明的是,Uart的S2TI是通过串口中断的方式清零的,如果是程序等待S2TI==0后直接发送不会出现该问题。具体程序如下:
bit busy;
void main(){
S2CON=0x50; //8位Uart
无奇偶校验
BRT=-(FOSC/32/BAUD2);
AUXR=0x14;
IE2=0x01;
//Enable Uart2
Interrupt
EA =
1;
//打开总中断
TI=1;
while(1) //在网络正常后跳出循环
{
send_uart2(‘O‘);
send_uart2(‘K‘);
send_uart2(‘K‘);
}
}
void serial2 () interrupt 8 using 1
{
if
(S2CON&S2RI)
{
S2CON &= ~S2RI ;
//清除接收结束标志位
}
if(S2CON&S2TI)//S2TI变为1时清除标志位1
{
S2CON
&= ~S2TI;
busy=0;
}
}
void send_uart2( unsigned char ch)
{
while(busy);
busy=1;
S2BUF=ch;
}
如上所示,如果TI=1的话,就不能连续发送了,此时TI必须为0(不知道是什么原因)
当然也可以这样写
void send_uart2( unsigned char ch)
{
S2BUF=ch;
while(!(S2CON&S2TI));
S2CON &=
~S2TI;
}
这样的话TI等不等于1就无关紧要了
STC12LE5A60S2第二串口出现的奇葩问题,布布扣,bubuko.com
原文:http://www.cnblogs.com/ltfbk/p/3596699.html