新人小白,最近使用STC15W40S4串口2向便携打印机发送数据,但是始终无法调通,已经困扰好久,只能求大神帮忙,以下附上程序:
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define S2RI 0x01 //S2CON.0
#define S2
ti 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){
}
}
一周热门 更多>