求助STC12C5A60S2第二串口

2019-07-16 03:35发布

期望实现的功能是:当串口调试助手发送给串口2 0xAA后 单片机通过串口2连续发送数组sendbuffer给上位机,当发送来的是0xFF
时停止发送
望大神们给看下,我的程序毫无反应。。。。。
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!='')
{
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;
          }
         }        

       
}

         
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
科技人生wzl
2019-07-17 00:03
谢谢,你的程序给了我提示,帮我解决了长延时不能发送的问题,真的谢谢你。同时你的程序好像还有存在一个问题,这里
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;

希望这对其它朋友也有帮助

一周热门 更多>