单片机/MCU论坛
直播中

6年用户 13经验值
擅长:电源/新能源 嵌入式技术 控制/MCU
私信 关注
[问答]

STC12C5A60S2串口2通信问题,每次复位后第一次能接收到数据,然后十几次才接收到一次数据,请问如何解决?

每次复位后第一次能接收到数据,然后十几次才接收到一次数据,数据:A5 5A 05 82 01 80 00 00,各位大神看看程序哪里出错了。
#include
#define  uchar  unsigned  char
#define  uint  unsigned  int
#define S2RI 0x01        //串口2接收中断请求标志位
#define S2ti 0x02        //串口2发送中断请求标志位
unsigned char a,flag2;
uchar  dat[8]=0;


/****************串行口初始化函数****************/
void InitUART(void)
{
    S2CON = 0x50;   //串口2工作在方式1  10位异步收发 S2REN=1允许接收
    BRT = 0xFD;           //独立波特率发生器初值
    AUXR = 0x10;    //BRTR=1 独立波特率发生器开始计数        
    IE2 =0x01;        //开串口2中断  ES2=1
        EA =1;        //开总中断
}
void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
                for(j=1000;j>0;j--);
}
void UART_2SendOneByte(uchar dat)
{                                                                                   
        S2BUF =dat;
    while(!(S2CON&S2TI));  //若S2TI=0,在此等待
    S2CON&=~S2TI;          //S2TI=0
}
void main(void)
{
    InitUART();        //串行口初始化
        
        while(1)
        {
                if(flag2==1)
                {
                        
                        flag2=0;
                                                for(a=0;a<8;a++)
                                          UART_2SendOneByte(dat[a]);
                                           delay(50);
                                                dat[8]=0;
                                IE2=0X01;
                }
              
        }
}


void UART_2Interrupt(void) interrupt 8
{
        if(S2CON&S2RI)
        {
                S2CON&=~S2RI;
                                dat[a++]=S2BUF;
                                if(a==8)
                                {
                a=0;
                                IE2=0X00;
                flag2=1;
                                
                }
        }
}

更多回帖

发帖
×
20
完善资料,
赚取积分