⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sp23x8.txt

📁 sp2338扩展串口的通信程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   
            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 + -