📄 uart.c
字号:
/*
void Uart0SendData()
{
byte i,Dat;
i=5;
while(i--)
{
if(!Uart0SendTask)break;
//DelayMs(1);
}
Uart0SendBuff[0] = 0x55;
Uart0SendBuff[1] = 0xaa;
Uart0SendBuff[2] = 0;;
//*
Uart0SendBuff[3] = 0;
Uart0SendBuff[4] = 1;
Uart0SendBuff[5] = 18;
Uart0SendBuff[6] = 4;
Uart0SendBuff[7] = 8;
Uart0SendBuff[8] = 0;
Uart0SendBuff[9] = 8;
Uart0SendBuff[10] = 3;
Uart0SendBuff[11] = 8;
Uart0SendBuff[12] = 2;
Uart0SendBuff[13] = 8;
Uart0SendBuff[14] = 6;
Uart0SendBuff[15] = 0;
Uart0SendBuff[16] = 0;
Uart0SendBuff[17] = 0;
Uart0SendBuff[18] = 0;
Uart0SendBuff[19] = 0;
Uart0SendBuff[20] = 0;
for(Dat=0,i=2;i<21;i++)
Dat += Uart0SendBuff[i];
Uart0SendBuff[21] = Dat;
Uart0SendBuff[22] = 0xbb;
Uart0SendBuff[23] = 0xcc;
Uart0SendAll = 24; //要发送数量
Uart0SendTask = 1; //发送标志为1
Uart0SendNum = 0; //已发字节个数
TI0 = 1;
}
*/
//多串口设置及处理
void Init8123()
{
byte i=0;
RST8123 = 1;
while(i--);
RST8123 = 0;
SetTChannelsNo(1);
SetRChannelsNo(1);
SetWorkModel(1);
//i = ;
//SCON1 = 0xf0;
//while(i--);
//SCON1=SCON1&0xFD;
//
//SetTChannelsNo(1);
//SetRChannelsNo(1);
//SetWorkModel(M_CHANNELS);
}
void SetWorkModel(bit model) //model==0:多通道模式; ==1:单通道模式。
{
MS8123 = model;
}
void SetTChannelsNo(byte no)
{
switch(no)
{
case 1:
STADDR0 = 1;
STADDR1 = 0;
break;
case 2:
STADDR0 = 0;
STADDR1 = 1;
break;
case 3:
STADDR0 = 1;
STADDR1 = 1;
break;
case 0:
STADDR0 = 0;
STADDR1 = 0;
break;
}
}
void SetRChannelsNo(byte no)
{
switch(no)
{
case 1:
SRADDR0 = 1;
SRADDR1 = 0;
break;
case 2:
SRADDR0 = 0;
SRADDR1 = 1;
break;
case 3:
SRADDR0 = 1;
SRADDR1 = 1;
break;
case 0:
SRADDR0 = 0;
SRADDR1 = 0;
break;
}
}
/*
BYTE Read8123Cmd()
{
return 0;
}
void Write8123Cmd(byte cmd)
{
}
*/
/*
void Uart1RecPro()
{
if(Uart1RecTask) //接收数据完毕
{
Uart1RecTask = 0;
}
}
*/
void Uart1Send()
{
byte Dat,i;
// i=5;
// while(i--)
// {
// if(!Uart1SendTask)
// break;
// }
Uart1SendBuff[0] = 0x55;
Uart1SendBuff[1] = 0xaa;
Uart1SendBuff[2] = 0;
Uart1SendBuff[3] = 0;
Uart1SendBuff[4] = 0;
Uart1SendBuff[5] = 0;
Uart1SendBuff[6] = 0;
Uart1SendBuff[7] = 0;
Uart1SendBuff[8] = 0;
Uart1SendBuff[9] = 0;
Uart1SendBuff[10] = 0;
Uart1SendBuff[11] = 0;
Uart1SendBuff[12] = 0;
Uart1SendBuff[13] = 0;
Uart1SendBuff[14] = 0;
Uart1SendBuff[15] = 0;
Uart1SendBuff[16] = 0;
Uart1SendBuff[17] = 0;
Uart1SendBuff[18] = 0;
Uart1SendBuff[19] = 0;
for(Dat=0,i=2;i<20;i++)
Dat += Uart1SendBuff[i];
Uart1SendBuff[20] = Dat;
Uart1SendBuff[21] = 0xbb;
Uart1SendBuff[22] = 0xcc;
Uart1SendAll = 2; //要发送数量
Uart1SendTask = 1; //发送标志为1
Uart1SendNum = 0; //已发字节个数
SCON1 = SCON1|0X02;
}
void UART0_INT() interrupt 4 //串行口0中断,使用
{
byte Dat,i;
if(TI0==1) //查询发送串行口0
{
TI0=0;
if(Uart0SendTask==1) //先执行了发送函数
{
SBUF0 = Uart0SendBuff[Uart0SendNum];
Uart0SendNum++;
if(Uart0SendNum>=Uart0SendAll)
Uart0SendTask=0; //已发个数=发送数量,则发送标志清0
}
}
if(RI0==1)
{
RI0 = 0;
Dat = SBUF0;
if((Dat==0xaa)&&(preDat==0x55))
{
Uart0RecBuff[0] = 0x55;
Uart0RecBuff[1] = 0xaa;
Uart0RecNum = 2;
}
else if((Dat==0xcc)&&(preDat==0xbb))
{
for(i=0;i<Uart0RecNum;i++)
Uart0RecBuf[i] = Uart0RecBuff[i];
Uart0RecBuf[Uart0RecNum] = 0xcc;
Uart0RecLen = Uart0RecNum+1;
Uart0RecTask=1;
}
else
{
Uart0RecBuff[Uart0RecNum] = Dat;
if(Uart0RecNum<30)
Uart0RecNum++;
}
preDat = Dat;
}
}
void UART1_INT() interrupt 20 //串行口中断1,使用
{
byte Dat,i;
if((SCON1&0x02)!=0) //查询发送串行口1,TI1
{
SCON1=SCON1&0xFD;
if(Uart1SendTask==1) //先执行了发送函数
{
SBUF1=Uart1SendBuff[Uart1SendNum];
Uart1SendNum++;
if(Uart1SendNum>=Uart1SendAll)
Uart1SendTask=0; //实发个数=发送总和,则发送标志清0
}
}
if((SCON1&0X01)!=0)
{
SCON1=SCON1&0XFE;
Dat = SBUF1;
if((Dat==0xaa)&&(preDat1==0x55))
{
Uart1RecBuff[0] = 0x55;
Uart1RecBuff[1] = 0xaa;
Uart1RecNum = 2;
}
else if((Dat==0xcc)&&(preDat1==0xbb))
{
for(i=0;i<Uart1RecNum;i++)
Uart1RecBuf[i] = Uart1RecBuff[i];
Uart1RecBuf[Uart1RecNum] = 0xcc;
Uart1RecLen = Uart1RecNum+1;
Uart1RecTask=1;
}
else
{
Uart1RecBuff[Uart1RecNum] = Dat;
if(Uart1RecNum<30)
Uart1RecNum++;
}
preDat1 = Dat;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -