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

📄 sp2539 demo.lst

📁 C51串口扩展5个源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
  99   3                              bUart1RFlag=1;          //置子串口1收到数据标志,便于主程序查询
 100   3                      }
 101   2                      else {                                  //子串口0接收到一个字节(输入地址:000)
 102   3                              Uart0RBuf=SBUF;         //缓存子串口0收到的数据,以便接收后续数据
 103   3                              bUart0RFlag=1;          //置子串口0收到数据标志,便于主程序查询
 104   3                      }
 105   2              }
 106   1      
 107   1              else{
 108   2                      TI=0;                                   //已经产生发送中断,准备解析下一个需要发送的数据
 109   2                      switch(UartPointer){    //判断即将向哪个子串口发送数据?
 110   3                              case 0:{                        //准备向子串口0发送数据
 111   4                                      UartPointer++;  //下一次发送中断准备向子串口1发送数据
 112   4      //                              if((--Uart0CoefBuf)==0){        //由于子串口0的波特率为9600bps,
 113   4      //                                      Uart0CoefBuf=Uart0Coef; //所以程序中不用定义和使用这两个变量
 114   4                                              if(Uart0TNum){                  //串口0发送缓存区是否有数据需要发送?
 115   5                                                      AdrOut0=0;                      //有数据需要发送,则选通子串口0的地址
 116   5                                                      AdrOut1=0;
 117   5                                                      AdrOut2=0;
C51 COMPILER V7.20   SP2539_DEMO                                                           03/09/2006 09:30:40 PAGE 3   

 118   5                                                      SBUF=Uart0Tbuf[--Uart0TNum];//将串口0发送缓存中的一个字节
 119   5                                                      break;                                          //由子串口0发送到下位机
 120   5                                              }
 121   4                                              else goto T_NopInstruction;             //若子串口0没有数据发送则准备发送空指令
 122   4      //                              }
 123   4      //                              else goto T_NopInstruction;
 124   4                              }
 125   3      
 126   3                              case 1:{                        //准备向子串口1发送数据
 127   4                                      UartPointer++;  //下一次发送中断准备向串口2发送数据
 128   4                                      if((--Uart1CoefBuf)==0){        //由于子串口1的波特率为4800,需要进行二分
 129   5                                              Uart1CoefBuf=Uart1Coef; //频时序处理,只有时序到达后才可发送数据
 130   5                                              if(Uart1TNum){                  //串口1发送缓存区是否有数据需要发送?
 131   6                                                      AdrOut0=1;                      //有数据需要发送,则选通子串口1的地址
 132   6                                                      AdrOut1=0;
 133   6                                                      AdrOut2=0;
 134   6                                                      SBUF=Uart1TBuf[--Uart1TNum];//将串口1发送缓存中的一个字节
 135   6                                                      break;                                          //由子串口1发送到下位机
 136   6                                              }
 137   5                                              else goto T_NopInstruction;             //若子串口1没有数据发送则准备发送空指令
 138   5                                      }
 139   4                                      else goto T_NopInstruction; //若分频时间没有到则不能向子串口1发送数据
 140   4                              }                                                               //而只能够发送一条空指令用于时序配合
 141   3      
 142   3                              case 2:{                        //准备向子串口2发送数据
 143   4                                      UartPointer++;  //下一次发送中断准备向串口3发送数据
 144   4                                      if((--Uart2CoefBuf)==0){        //由于子串口2的波特率为2400,需要进行四分
 145   5                                              Uart2CoefBuf=Uart2Coef; //频时序处理,只有时序到达后才可发送数据
 146   5                                              if(Uart2TNum){                  //串口2发送缓存区是否有数据需要发送?
 147   6                                                      AdrOut0=0;                      //有数据需要发送,则选通子串口2的地址
 148   6                                                      AdrOut1=1;
 149   6                                                      AdrOut2=0;
 150   6                                                      SBUF=Uart2TBuf[--Uart2TNum];//将串口2发送缓存中的一个字节
 151   6                                                      break;                                          //由子串口2发送到下位机
 152   6                                              }
 153   5                                              else goto T_NopInstruction;             //若子串口2没有数据发送则准备发送空指令
 154   5                                      }
 155   4                                      else goto T_NopInstruction; //若分频时间没有到则不能向子串口2发送数据
 156   4                              }                                                               //而只能够发送一条空指令用于时序配合
 157   3      
 158   3                              case 3:{                        //准备向子串口3发送数据
 159   4                                      UartPointer++;  //下一次发送中断准备向串口4发送数据
 160   4                                      if((--Uart3CoefBuf)==0){        //由于子串口3的波特率为1200,需要进行四分
 161   5                                              Uart3CoefBuf=Uart3Coef; //频时序处理,只有时序到达后才可发送数据
 162   5                                              if(Uart3TNum){                  //串口3发送缓存区是否有数据需要发送?
 163   6                                                      AdrOut0=1;                      //有数据需要发送,则选通子串口3的地址
 164   6                                                      AdrOut1=1;
 165   6                                                      AdrOut2=0;
 166   6                                                      SBUF=Uart3TBuf[--Uart3TNum];//将串口3发送缓存中的一个字节
 167   6                                                      break;                                          //由子串口3发送到下位机
 168   6                                              }
 169   5                                              else goto T_NopInstruction;             //若子串口3没有数据发送则准备发送空指令
 170   5                                      }
 171   4                                      else goto T_NopInstruction; //若分频时间没有到则不能向子串口3发送数据
 172   4                              }                                                               //而只能够发送一条空指令用于时序配合
 173   3      
 174   3                              case 4:{                        //准备向子串口4发送数据
 175   4                                      UartPointer++;  //下一次发送中断准备发送空指令
 176   4                                      if((--Uart4CoefBuf)==0){        //由于子串口4的波特率为600,需要进行四分
 177   5                                              Uart4CoefBuf=Uart4Coef; //频时序处理,只有时序到达后才可发送数据
 178   5                                              if(Uart4TNum){                  //串口4发送缓存区是否有数据需要发送?
 179   6                                                      AdrOut0=0;                      //有数据需要发送,则选通子串口2的地址
C51 COMPILER V7.20   SP2539_DEMO                                                           03/09/2006 09:30:40 PAGE 4   

 180   6                                                      AdrOut1=0;
 181   6                                                      AdrOut2=1;
 182   6                                                      SBUF=Uart4TBuf[--Uart4TNum];//将串口4发送缓存中的一个字节
 183   6                                                      break;                                          //由子串口4发送到下位机
 184   6                                              }
 185   5                                              else goto T_NopInstruction;             //若子串口4没有数据发送则准备发送空指令
 186   5                                      }
 187   4                                      else goto T_NopInstruction; //若分频时间没有到则不能向子串口4发送数据
 188   4                              }                                                               //而只能够发送一条空指令用于时序配合
 189   3      
 190   3                              default:{
 191   4                                      UartPointer=0;                  //下一次发送中断准备向串口0发送数据
 192   4      T_NopInstruction:
 193   4                                      AdrOut0=1;                              //选通目串口准备发送空指令或者其他指令
 194   4                                      AdrOut1=0;
 195   4                                      AdrOut2=1;
 196   4                                      if(bInstructFlag){              //判断是否需要发送其他指令?
 197   5                                              bInstructFlag=0;        //清除指令发送标志
 198   5                                              SBUF=InstructBuf;       //将需要发送的指令发送到串口扩展IC
 199   5                                              break;
 200   5                                      }
 201   4                                      else if(Uart0TNum|Uart1TNum|Uart2TNum|Uart3TNum|Uart4TNum){
 202   5                                              SBUF=0;                         //判断所有子串口是否都已发送完毕

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -