#include <STC8H.H> //8H头文件
#include <UART2.H>
#include <UART1.H>
bit busy2;
char Uart2_RecvBuf[30] = {0}; //串口数据缓存
char uart2Index = 0; //绶存指针
char uart2RXEnd = 0;
char Uart2RXLength = 0;
/*-------------------------------------------屏幕通信初始化----------------------------------------------*/
void Uart2Init(void) //9600bps@11.0592MHz
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器2时钟为Fosc,即1T
T2L = 0xE8; //设定定时初值
T2H = 0xFF; //设定定时初值
AUXR |= 0x10; //启动定时器2
S2CON |= 0x10; //使能接收 S2REN=1
IE2 |= 0x01; //使能串口2中断
EA = 1;
}
/*-------------------------------------------接收信息----------------------------------------------*/
void Uart2() interrupt 8{
if ((S2CON & S2RI) && uart2RXEnd == 0) {
S2CON &= ~S2RI; //清除S2RI位
P47 = ~P47;
Uart2_RecvBuf[uart2Index] =
S2BUF;
if (Uart2_RecvBuf[0] == 0xFE) //Uart2_RecvBuf协议第一个字节是0x5a
{
uart2Index++;
}
if (uart2Index > 5) {
uart2Index = 0;
uart2RXEnd = 1;
}
}
if (S2CON & S2TI) {
S2CON &= ~S2TI; //清除S2TI位
busy2 = 0; //清忙标志
}
}
char aaa[5] = {0xfe, 0xbb, 0x01, 0x00, 0x16};
void UartRx2(void) {
if (uart2RXEnd) {
uart2RXEnd = 0;
UART1_SendStr(Uart2_RecvBuf);
SendString2(aaa, 5);
}
}
/*-------------------------------------------发送----------------------------------------------*/
void SendData2(char dat) {
while (busy2); //等待前面的数据发送完成
//ACC = dat; //获取校验位P (PSW.0)
busy2 = 1;
S2BUF = dat; //写数据到UART2数据寄存器
}
void SendString2(char *s, char length) //发送字符串
{
while (length != 0) //检测字符串结束标志
{
SendData2(*s++); //发送当前字符
length--;
}
}