求助STC12C5A60S2第二串口
时停止发送
望大神们给看下,我的程序毫无反应。
void UartInit2(void) //9600bps@11.0592MHz
{
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR &= 0xfb; //独立波特率发生器时钟为Fosc/12,即12T
AUXR |= 0x10; //启动独立波特率发生器
IE2=0x01; //允许串口2中断ES2=1
}
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
void sendString(uchar *aaa)
{
while(*aaa!='\0')
{
sendoneByte(*aaa);
aaa++;
}
}
void Com2_Service(void) interrupt 8
{
if(S2CON & S2RI)
{
S2CON=S2CON&0xFE;//清标志位
accept=S2BUF;
if(accept==0xAA)//AA开始传送
{
com2flag=1;
//sendString(sendbuffer);
}
if(accept==0xFF)//结束命令
{
com2flag=0;
}
}
}
void main()
{
UartInit2();
EA=1;//开总中断
while(1)
{
if( com2flag==1)
{
sendString(sendbuffer);
}
if(com2flag==0)
{
IE2=0x00;
}
}
}
你一上电就把IE2关掉了。怎么能通信
观摩观摩学习了
/********************************************************************************
修改版
************************************************************************************/
void UartInit2(void) //9600bps@11.0592MHz
{
AUXR &= 0xf7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR &= 0xfb; //独立波特率发生器时钟为Fosc/12,即12T
AUXR |= 0x10; //启动独立波特率发生器
IE2=0x01; //允许串口2中断ES2=1
}
void sendoneByte(uchar c)
{//这句话不需要
//S2CON =S2CON&0xFD;//TI=0
//关串口2中断
IE2 = 0X00;
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
//打开串口2中断
IE2 = 0X01;
}
void sendString(uchar *aaa)
{
while(*aaa!='\0')
{
sendoneByte(*aaa);
aaa++;
}
}
void Com2_Service(void) interrupt 8
{
if(S2CON & S2RI)
{
S2CON=S2CON&0xFE;//清标志位
accept=S2BUF;
if(accept==0xAA)//AA开始传送
{
com2flag=1;
//sendString(sendbuffer);
}
if(accept==0xFF)//结束命令
{
com2flag=0;
}
}
}
void main()
{
UartInit2();
EA=1;//开总中断
while(1)
{
if( com2flag==1)
{
sendString(sendbuffer);
}
//不能加这句话,要不然,程序刚开始运行时候,com2flag=0的,则执行 IE2=0x00;将串口中断关闭,以后再也接收不到数据。
//if(com2flag==0)
// {
// IE2=0x00;
// }
}
}
学习技术。学习技术。学习技术。
!!1
谢谢,你的程序给了我提示,帮我解决了长延时不能发送的问题,真的谢谢你。同时你的程序好像还有存在一个问题,这里
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
这样的话一次不能发送太多字节,这样就可以
void sendoneByte(uchar c)
{
S2CON =S2CON&0xFD;//TI=0
S2BUF=c;
while(!(S2CON&0xFD));
S2CON =S2CON&0xFD;
}
希望这对其它朋友也有帮助
