📄 sp23x8.txt
字号:
case 2:{ //准备向子串口2发送数据
UartPointer++; //下一次发送中断准备发送空指令
if(Uart2TNum){ //串口2发送缓存区是否有数据需要发送?
AdrOut0=0; //有数据需要发送,则选通子串口2的地址
AdrOut1=1;
SBUF=Uart2TBuf[--Uart2TNum];//将串口2发送缓存中的一个字节
break; //由子串口2发送到下位机
}
else goto T_NopInstruction; //若子串口2没有数据发送则准备发送空指令
} //而只能够发送一条空指令用于时序配合
default:{
UartPointer=0; //下一次发送中断准备向串口0发送数据
T_NopInstruction:
AdrOut0=1; //选通目串口准备发送空指令或者其他指令
AdrOut1=1;
if(bInstructFlag){ //判断是否需要发送其他指令?
bInstructFlag=0; //清除指令发送标志
SBUF=InstructBuf; //将需要发送的指令发送到串口扩展IC
break;
}
else if(Uart0TNum|Uart1TNum|Uart2TNum){//判断所有子串口的数据是否
SBUF=0; //都已经全部发送完毕?若没有完毕则发送空指令
break;
}
else {bUartBusy=0;break;}//若所有子串口数据都已经发送完毕,则立即
} //清除"串口忙"标志(主程序将根据该标志来决定是否执行"TI=1"这条指令)
}
}
}
/*****************************************************************************
功能:初始化上位机串口波特率为38400BPS(采用TIMER 2),子串口1波特率为:9600;
子串口1波特率为:9600;子串口2波特率为:9600;
输入:无
输出:无
*****************************************************************************/
void init_serialcomm(void){
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
T2CON |= 0x34; //TMOD: timer 2, mode 2, 16-bit reload,timer 2 run
//RCAP2H = 0xFF; //Baud:38400 fosc=11.0592MHz
//RCAP2L = 0xF7; //Baud:38400 fosc=11.0592MHz
RCAP2H = 0xFF; //Baud:19200 fosc=11.0592MHz
RCAP2L = 0xEE; //Baud:19200 fosc=11.0592MHz
// RCAP2H = 0xFF; //Baud:19200 fosc=22.1184MHz
// RCAP2L = 0xDC; //Baud:19200 fosc=22.1184MHz
// RCAP2H = 0xFF; //Baud:38400 fosc=22.1184MHz
// RCAP2L = 0xEE; //Baud:38400 fosc=22.1184MHz
// RCAP2H = 0xFF; //Baud:76800 fosc=22.1184MHz
// RCAP2L = 0xF7; //Baud:76800 fosc=22.1184MHz
IE |= 0x90; //Enable Serial Interrupt
IP = 0x10; //只允许串口中断为最高优先级,其它为次优先级。
Uart0TNum=0; //初始化串口0发送缓冲区"空"
Uart1TNum=0; //初始化串口1发送缓冲区"空"
Uart2TNum=0; //初始化串口2发送缓冲区"空"
}
#ifdef _DEBUG_SUB_MODULE
main(){
init_serialcomm(); //初始化MCU串口波特率
// while(1) {
if(Uart0TNum==0){ //若子串口0发送缓存为"空",则以9600bps向子
uchar i=0; //串口0依次发送"0x37"、"0x36" ..."0x30"
Uart0Tbuf[i++]=0x30;
Uart0Tbuf[i++]=0x31;
Uart0Tbuf[i++]=0x32;
Uart0Tbuf[i++]=0x33;
Uart0Tbuf[i++]=0x34;
Uart0Tbuf[i++]=0x35;
Uart0Tbuf[i++]=0x36;
Uart0Tbuf[i++]=0x37;
Uart0TNum=i;
if(bUartBusy==0){ //判断发送中断是否处于激活状态,若没有激活则:
TI=1; //激活MCU的串口发送程序
bUartBusy=1; //置发送程序已经激活的标志
}
}
if(Uart1TNum==0){ //若子串口1发送缓存为"空",则以9600bps向子
uchar i=0; //串口1依次发送"0x4F"、"0x4E" ..."0x4A"
Uart1TBuf[i++]=0x4A;
Uart1TBuf[i++]=0x4B;
Uart1TBuf[i++]=0x4C;
Uart1TBuf[i++]=0x4D;
Uart1TBuf[i++]=0x4E;
Uart1TBuf[i++]=0x4F;
Uart1TNum=i;
if(bUartBusy==0){ //判断发送中断是否处于激活状态,若没有激活则:
TI=1; //激活MCU的串口发送程序
bUartBusy=1; //置发送程序已经激活的标志
}
}
if(Uart2TNum==0){ //若子串口2发送缓存为"空",则以9600bps向子
uchar i=0; //串口2依次发送"0x57"、"0x56" ..."0x50"
Uart2TBuf[i++]=0x50;
Uart2TBuf[i++]=0x51;
Uart2TBuf[i++]=0x52;
Uart2TBuf[i++]=0x53;
Uart2TBuf[i++]=0x54;
Uart2TBuf[i++]=0x55;
Uart2TBuf[i++]=0x56;
Uart2TBuf[i++]=0x57;
Uart2TNum=i;
if(bUartBusy==0){ //判断发送中断是否处于激活状态,若没有激活则:
TI=1; //激活MCU的串口发送程序
bUartBusy=1; //置发送程序已经激活的标志
}
// }
}
while(1){
if(bUart1RFlag==1) {
bUart1RFlag=0;
if(Uart0TNum==0){ //若子串口0发送缓存为"空",则以9600bps向子
uchar i=0; //串口0依次发送"0x37"、"0x36" ..."0x30"
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0Tbuf[i++]=Kbuf[i] ;
Uart0TNum=i;
if(bUartBusy==0){ //判断发送中断是否处于激活状态,若没有激活则:
TI=1; //激活MCU的串口发送程序
bUartBusy=1; //置发送程序已经激活的标志
}
}
}
}
}
#endif // _DEBUG_SUB_MODULE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -