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

📄 serial1.lst

📁 c8051f020实现4个 产UART 口
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   SERIAL1                                                               06/10/2007 23:11:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL1
OBJECT MODULE PLACED IN .\out\Serial1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial1.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\K
                    -eil\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\Serial1.obj)

line level    source

   1          
   2          //*************************************************************************
   3          #include "all.h"
   4          
   5          void Open_URRA_1(void);
   6          
   7          
   8          
   9          uchar xdata DiZh_Rx_Buff[DiZh_BUFF_MAX];    //地震
  10          uchar xdata DiZh_Tx_Buff[DiZh_BUFF_MAX];
  11          
  12          uchar xdata  KEY_RX_Buff[KEY_BUFF_MAX];    //屏
  13          uchar xdata  KEY_TX_Buff[KEY_BUFF_MAX];
  14          
  15          uchar xdata  F76_RX_Buff[F76_BUFF_MAX];   //床体
  16          uchar xdata  F76_TX_Buff[F76_BUFF_MAX];
  17          
  18          bit  XinKey_Sound_b=0;   //用于发声音
  19          bit  Xin_KeyJTX_RX_B=0;   //甲天行来的标志位
  20           bit XinKey_b=0;             //手柄来的键值标志
  21           uchar xdata   XinKey_Value, itask;   //手柄来的键值
  22          
  23          bit Dis_All_Key_B=0;     //不检测按键标志位   1:不检测   0:检测
  24          
  25          void  Fa_F76_buffer_0xee0xee(uchar Fun,uchar *Poit,uint Lenthg) reentrant ;
  26          
  27          
  28          bit  bUartBusy;         //上位机串口发送状态标志,"1"表示上位机串口"忙"(正发送数据
  29                                                                  //到子串口,新数据只需送入子串口发送缓冲区即可,"0"表示上位
  30                                                                  //机串口"空闲",需用户程序将"TI=1"来启动子串口数据发送
  31          
  32          bit  bInstructFlag;     //上位机发送指令请求标志,上位机需要发送指令时必须
  33                                                                  //先将待发发送指令放到"InstructBuf",之后将该
  34                                                                  //标志设置为"1"即可.标志变为"0"后可继续发送指令
  35          
  36          bit    KEY_TX_is_over_Start_cnt_B=0;   // 帧间隔计时位
  37                //    //发送数据时要先检测此位为0才能发送数据
  38                                          
  39          uchar      KEY_TX_is_over_Start_cnt=0;     // 帧间隔计时计数器
  40          
  41          
  42          uchar xdata UartPointer;        //子串口发送数据指针,中断服务程序通过该指针轮询
  43                                                                  //发送数据到各子串口,保证各子串口的数据不丢失
  44          
  45          uchar xdata InstructBuf;        //指令缓冲(用户可将设置SP2328/SP2338的指令放入
  46                                                                  //该寄存器,由驱动程序自动完成指令发送)
  47          
  48          
  49          
  50          uchar  MY_P4L;   
  51          
  52                                                                  
  53          
  54          
C51 COMPILER V7.50   SERIAL1                                                               06/10/2007 23:11:20 PAGE 2   

  55          uchar xdata Uart0RBuf,Uart1RBuf,Uart2RBuf;      //接收子串口数据缓
  56                                                                  
  57          
  58          unsigned char xdata  F76_RX_Sta=0;
  59          unsigned char xdata   F76_RX_cnt=0;
  60          unsigned char    F76_Es_jie_cnt;
  61           bit  Xin_F76_RX_B=0;
  62          
  63          
  64          
  65          unsigned char xdata  KEY_RX_Sta=0;
  66          unsigned int xdata   KEY_RX_cnt=0;
  67          unsigned char    KEY_Es_jie_cnt;
  68           bit  Xin_KEY_RX_B=0;
  69          
  70          
  71          unsigned char xdata  DiZh_RX_Sta=0;
  72          unsigned int xdata   DiZh_RX_cnt=0;
  73          unsigned char    DiZh_Es_jie_cnt;
  74           bit  Xin_DiZh_RX_B=0;
  75          
  76          
  77          
  78          uint xdata DiZh_TX_Len;   //发送长度
  79          uint xdata  DiZh_TX_cnt=0;    //发送计数器
  80          bit DiZh_TX_is_over_B=1;    //所完标志位
  81                                            // GPRS_TX_is_over_B=0表示串口忙被 占用,
  82                                            //谁得到 GPRS_TX_is_over_B=1谁就得到串口生理权
  83          
  84          uint xdata KEY_TX_Len;    //发送长度
  85          uint xdata  KEY_TX_cnt=0;   //发送计数器
  86          bit KEY_TX_is_over_B=1;    //所完标志位
  87                                            // KEY_TX_is_over_B=0表示串口忙被 占用,
  88                                            //谁得到 KEY_TX_is_over_B=1谁就得到串口生理权
  89                                            
  90          bit  KEY_TX_Right_B=1;    //key发送权标志
  91            
  92          
  93          uint xdata F76_TX_Len;     //发送长度
  94          uint xdata  F76_TX_cnt=0;  //发送计数器
  95          bit F76_TX_is_over_B=1;    //所完标志位
  96                                            // F76_TX_is_over_B=0表示串口忙被 占用,
  97                                            //谁得到 F76_TX_is_over_B=1谁就得到串口生理权
  98          
  99          
 100          //void  Fa_F76_buffer(uint Lenthg);
 101          //void  Fa_Key_buffer(uint Lenthg);
 102          //void  Fa_DiZh_buffer(uint Lenthg);
 103          
 104          
 105          
 106          /*****************************************************************************
 107          功能:设定SP2328/SP2338输入、输出地址,可根据实际电路修改
 108          *****************************************************************************/
 109          //sbit  AdrIn0 =P1^0;           /* 连接到SP2328/SP2338的PIN0 (ADRO0)*/
 110          //sbit  AdrIn1 =P1^1;           /* 连接到SP2328/SP2338的PIN1 (ADRO1)*/
 111          //sbit  AdrOut0=P1^2;           /* 连接到SP2328/SP2338的PIN18(ADRI0)*/
 112          //sbit  AdrOut1=P1^3;           /* 连接到SP2328/SP2338的PIN17(ADRI1)*/
 113          
 114          
 115          void  Fa_F76_buffer(uchar Fun,uchar *Poit,uint Lenthg) reentrant ;
 116          
C51 COMPILER V7.50   SERIAL1                                                               06/10/2007 23:11:20 PAGE 3   

 117          
 118          
 119          void UART_1_ISR () interrupt 20 {
 120   1        
 121   1              
 122   1              if (SCON1&0x01) //if (_testbit_(RI_1))  
 123   1              {       
 124   2                        
 125   2                      //RI=0;                                 //准备解析刚接收到的数据来自于哪个子串口
 126   2                      if(AdrIn1)
 127   2                      {               //子串口2接收到一个字节
 128   3                                               //子串口2 来键盘的数据
 129   3                              Uart2RBuf=SBUF1;                //缓存子串口2收到的数据,以便接收后续数据
 130   3                     
 131   3                           
 132   3                              switch(KEY_RX_Sta)   {
 133   4                                    case 0:
 134   4                                                if(Uart2RBuf==0xee)
 135   4                                                        KEY_RX_Sta=1;
 136   4                                               
 137   4                                        break;
 138   4                                        case 1:
 139   4                                                if(Uart2RBuf!=0xee)  {
 140   5                                                                              KEY_Es_jie_cnt=10; //时限计时值 500ms     in : TIME_LIMITED (void) _task_ TIMELIMITED   
 141   5                                                                              KEY_RX_Sta=2;
 142   5                                                                              KEY_RX_Buff[0]=Uart2RBuf;
 143   5                                                                              KEY_RX_cnt=1;
 144   5                                                }        
 145   4      
 146   4                                        break;
 147   4                                           case 2:
 148   4                                                       KEY_RX_Buff[KEY_RX_cnt++]=Uart2RBuf;
 149   4                                                       if( KEY_RX_cnt>=KEY_BUFF_MAX)  {
 150   5                                                               KEY_RX_Sta=0;
 151   5      
 152   5                                                       }
 153   4                                                       if(Dis_All_Key_B==1)     //不检测按键标志位   1:不检测   0:检测==1)
 154   4                                                               break;
 155   4                                                       if(Uart2RBuf==0xab)  {    //  over byte  flag
 156   5                                                                              
 157   5                                                                                Xin_KEY_RX_B=1;
 158   5                                                                                XinKey_b=1;             //手柄来的键值标志
 159   5                                                                                
 160   5                                                                                              
 161   5                                                                              
 162   5                                                                              //XinKey_Value=KEY_RX_Buff[2];   //手柄来的键值
 163   5                                                                              KEY_RX_Sta=0;
 164   5      
 165   5                                                                              //========以下是优先电话功能==只允许挂机和接听键有效================
 166   5                                                                      
 167   5                                                                      
 168   5      
 169   5                                                                               ima_cnt=0;    //键盘拔号复0 计数器,超过16秒没人按键则复位为   ima=3;
 170   5                                                       }
 171   4      
 172   4                                        break;
 173   4      
 174   4                                        default:
 175   4                                                KEY_RX_Sta=0;
 176   4      
 177   4                                        break;
 178   4                                      
C51 COMPILER V7.50   SERIAL1                                                               06/10/2007 23:11:20 PAGE 4   

 179   4                               }
 180   3                   
 181   3                    //Out55:;            
 182   3                      
 183   3                      }
 184   2                      else if(AdrIn0)
 185   2                      {                               //子串口1接收到一个字节
 186   3                                           //子串口1 来自报警板的数据
 187   3                              Uart1RBuf=SBUF1;                //缓存子串口1收到的数据,以便接收后续数据
 188   3                            F76_RX_Buff[F76_RX_cnt++]=Uart1RBuf;
 189   3                               F76_Es_jie_cnt=16;                     //80ms 时限到认为接收结束in: 
 190   3                               if(F76_RX_cnt>=F76_BUFF_MAX)
 191   3                                                F76_RX_cnt=0;
 192   3                                                
 193   3      
 194   3                                                /*
 195   3                              switch(F76_RX_Sta)   {
 196   3                                    case 0:
 197   3                                                if(Uart1RBuf==0xee)
 198   3                                                        F76_RX_Sta=1;
 199   3      
 200   3      
 201   3                                        break;
 202   3                                        case 1:
 203   3                                                if(Uart1RBuf!=0xee)  {
 204   3                                                         F76_Es_jie_cnt=10; //时限计时值 500ms          in : TIME_LIMITED (void) _task_ TIMELIMITED   

⌨️ 快捷键说明

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