求大神帮忙解决STC15串口2通信问题

2019-07-15 14:27发布

新人小白,最近使用STC15W40S4串口2向便携打印机发送数据,但是始终无法调通,已经困扰好久,只能求大神帮忙,以下附上程序:

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define S2RI  0x01              //S2CON.0
#define S2ti  0x02              //S2CON.1
#define S2RB8 0x04              //S2CON.2
#define S2TB8 0x08              //S2CON.3

bit bdata busy;

/*----------------------------
UART2 中断服务程序
-----------------------------*/
void Uart2()                 interrupt 8
{
    if (S2CON & S2RI)
    {
        S2CON &= ~S2RI;         //清除S2RI位
    }
    if (S2CON & S2TI)
    {       
        S2CON &= ~S2TI;         //清除S2TI位
        busy = 0;               //清忙标志
    }
}

/*----------------------------
发送串口数据
----------------------------*/
void SendData(unsigned char dat)
{
  while (busy);      //等待前面的数据发送完成
  busy = 1;
  S2BUF = dat;      //写数据到UART数据寄存器
}

/*----------------------------
发送字符串
----------------------------*/
void SendString(unsigned char *s)
{
  while (*s)       //检测字符串结束标志
  {
    SendData(*s++);    //发送当前字符
  }
}

void UartInit2(void)                //115200bps@5.5296MHz
{
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xFB;                //定时器2时钟为Fosc/12,即12T
        T2L = 0xFF;                //设定定时初值
        T2H = 0xFF;                //设定定时初值
        AUXR |= 0x10;                //启动定时器2
        IE2 = 0x01;                 //使能串口2中断
        EA = 1;
        IP2 |= 0x00;    //串口2优先级0
}

void main()
{          unsigned char k=0;
        UartInit();
        busy = 0;
        SendData('A');
        SendData(0x0A);
        while(1){
    }  

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。