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

📄 text1.lst

📁 双串口于单片机通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
  10      =1  #define __ABSACC_H__
  11      =1  
  12      =1  #define CBYTE ((unsigned char volatile code  *) 0)
  13      =1  #define DBYTE ((unsigned char volatile data  *) 0)
  14      =1  #define PBYTE ((unsigned char volatile pdata *) 0)
  15      =1  #define XBYTE ((unsigned char volatile xdata *) 0)
  16      =1  
  17      =1  #define CWORD ((unsigned int volatile code  *) 0)
  18      =1  #define DWORD ((unsigned int volatile data  *) 0)
  19      =1  #define PWORD ((unsigned int volatile pdata *) 0)
  20      =1  #define XWORD ((unsigned int volatile xdata *) 0)
  21      =1  
  22      =1  
  23      =1  #ifdef __CX51__
           =1 #define FVAR(object, addr)   (*((object volatile far *) (addr)))
           =1 #define FARRAY(object, base) ((object volatile far *) (base))
           =1 #define FCVAR(object, addr)   (*((object const far *) (addr)))
           =1 #define FCARRAY(object, base) ((object const far *) (base))
           =1 #else
  29      =1  #define FVAR(object, addr)    (*((object volatile far *) ((addr)+0x10000L)))
  30      =1  #define FCVAR(object, addr)   (*((object const far *) ((addr)+0x810000L)))
  31      =1  #define FARRAY(object, base)  ((object volatile far *) ((base)+0x10000L))
  32      =1  #define FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
  33      =1  #endif
  34      =1  
  35      =1  #endif
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          #define WAIT 100
   7          
   8          bit bdata bUart0RFlag, bUart1RFlag, bUart2RFlag, bUartRFlag;
   9          /** receiving memory of upper machine, read data while Uart0RFlag=1 */
  10          uchar idata Uart0RBuf,Uart1RBuf,Uart2RBuf;
  11          /** upper machine sends state flag, '1' means com port 'busy'
  12           * (sending data to sub com port, just sending new data to sending buffer of 
  13           * sub comport. '0' means idle, user application should set 'TI=1' to launch
  14           * data sending of sub comport
  15           */
  16          bit bdata bUartBusy;            
  17          /* upper request flag of sending instruction. Before sending upper machine must 
  18           * put instruction to be transmitted into 'InstructBuf'. Then set this flag to 
  19           * '1', after this flag being changed to '0', this process could be done again
  20          */                                                      
  21          bit bdata bInstructFlag;        
  22          
  23          uchar idata InstructBuf;        //指令缓冲(用户可将设置SP2328/SP2338的指令放入
  24                                                                  //该寄存器,由驱动程序自动完成指令发送)
  25          uchar idata UartPointer;        //子串口发送数据指针,中断服务程序通过该指针轮询
  26                                                                  //发送数据到各子串口,保证各子串口的数据不丢失
  27          
  28          uchar idata Uart0Tbuf[8];       /* sub Uart 0 data sending buffer*/
C51 COMPILER V8.02   TEXT1                                                                 10/28/2008 04:20:49 PAGE 4   

  29          uchar idata Uart1TBuf[8];       /* sub Uart 1 data sending buffer*/
  30          uchar idata Uart2TBuf[8];       /* sub Uart 2 data sending buffer*/
  31          uchar idata Uart0RBuf,Uart1RBuf,Uart2RBuf;      //上位机接收子串口数据缓
  32                                                                  //冲存储器,上位机通过判断"bUart0RFlag"等标志
  33                                                                  //是否为"1",来决定是否读取该寄存器的数据
  34          uchar idata Uart0TNum,Uart1TNum,Uart2TNum;      //等待发送到各
  35                                                                  //子串口的字节数,"0"表示相应子串口发送缓冲区"空"
  36                                                                  //主程序可以通过判断该标志是否为"0"来决定是否向
  37                                                                  //相应子串口发送后续数据
  38          
  39          sbit    AdrIn0 =P1^0;   
  40          sbit    AdrIn1 =P1^1;           
  41          sbit    AdrOut0=P1^2;           
  42          sbit    AdrOut1=P1^3;   
  43                                                                  
  44          
  45          uint data buffer1=0, buffer0=0;  //定时器计数变量
  46          sbit green=P1^4;           
  47          sbit red=P1^5;
  48          
  49          /*串口服务子程序*/
  50          serial () interrupt 4
  51          {
  52   1              if(RI)
  53   1              {
  54   2                      RI=0;                   //准备解析刚接收到的数据来自于哪个子串口
  55   2                      bUartRFlag=1;           //产生串口中断标志位
  56   2                      if(AdrIn1){                             //子串口2接收到一个字节(未用)
  57   3                              Uart2RBuf=SBUF;         //缓存子串口2收到的数据,以便接收后续数据
  58   3                              bUart2RFlag=1;          //置子串口2收到数据标志,便于主程序查询
  59   3                      } else if(AdrIn0){              //子串口1接收到一个字节
  60   3                              Uart1RBuf=SBUF;         //缓存子串口1收到的数据,以便接收后续数据
  61   3                              bUart1RFlag=1;          //置子串口1收到数据标志,便于主程序查询
  62   3                      }
  63   2                      else {                                  //子串口0接收到一个字节
  64   3                              Uart0RBuf=SBUF;         //缓存子串口0收到的数据,以便接收后续数据
  65   3                              bUart0RFlag=1;          //置子串口0收到数据标志,便于主程序查询
  66   3                      }
  67   2              }else{
  68   2                      TI=0;                                                   //已经产生发送中断,准备解析下一个需要发送的数据
  69   2                      switch(UartPointer){                    //判断即将向哪个子串口发送数据?
  70   3                              case 0:{                                        //准备向子串口0发送数据
  71   4                                      UartPointer++;                  //下一次发送中断准备向子串口1发送数据
  72   4                                      if(Uart0TNum){                  //串口0发送缓存区是否有数据需要发送?
  73   5                                              AdrOut0=0;                      //有数据需要发送,则选通子串口0的地址
  74   5                                              AdrOut1=0;
  75   5                                              SBUF=Uart0Tbuf[--Uart0TNum];//将串口0发送缓存中的一个字节
  76   5                                              break;                                          //由子串口0发送到下位机
  77   5                                      }
  78   4                                      else goto T_NopInstruction;     //若子串口0没有数据发送则准备发送空指令
  79   4                              }
  80   3      
  81   3                              case 1:{                                        //准备向子串口1发送数据
  82   4                                      UartPointer++;                  //下一次发送中断准备向串口2发送数据
  83   4                                      if(Uart1TNum){                  //串口1发送缓存区是否有数据需要发送?
  84   5                                              AdrOut0=1;                      //有数据需要发送,则选通子串口1的地址
  85   5                                              AdrOut1=0;
  86   5                                              SBUF=Uart1TBuf[--Uart1TNum];//将串口1发送缓存中的一个字节
  87   5                                              break;                                          //由子串口1发送到下位机
  88   5                                      }
  89   4                                      else goto T_NopInstruction;     //若子串口1没有数据发送则准备发送空指令
  90   4                              }                                                               //而只能够发送一条空指令用于时序配合
C51 COMPILER V8.02   TEXT1                                                                 10/28/2008 04:20:49 PAGE 5   

  91   3      
  92   3                              case 2:{                        //准备向子串口2发送数据
  93   4                                      UartPointer++;  //下一次发送中断准备发送空指令
  94   4                                      if(Uart2TNum){                  //串口2发送缓存区是否有数据需要发送?
  95   5                                              AdrOut0=0;                      //有数据需要发送,则选通子串口2的地址
  96   5                                              AdrOut1=1;
  97   5                                              SBUF=Uart2TBuf[--Uart2TNum];//将串口2发送缓存中的一个字节
  98   5                                              break;                                          //由子串口2发送到下位机
  99   5                                      }
 100   4                                      else goto T_NopInstruction;     //若子串口2没有数据发送则准备发送空指令
 101   4                              }                                                               //而只能够发送一条空指令用于时序配合
 102   3      
 103   3                              default:{
 104   4                                      UartPointer=0;                  //下一次发送中断准备向串口0发送数据
 105   4      T_NopInstruction:
 106   4                                      AdrOut0=1;                              //选通目串口准备发送空指令或者其他指令
 107   4                                      AdrOut1=1;
 108   4                                      if(bInstructFlag){              //判断是否需要发送其他指令?
 109   5                                              bInstructFlag=0;        //清除指令发送标志
 110   5                                              SBUF=InstructBuf;       //将需要发送的指令发送到串口扩展IC
 111   5                                              break;
 112   5                                      }
 113   4                                      else if(Uart0TNum|Uart1TNum|Uart2TNum){//判断所有子串口的数据是否
 114   5                                              SBUF=0;                         //都已经全部发送完毕

⌨️ 快捷键说明

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