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

📄 serial.lst

📁 适合初学者学习的UPSD的点阵LCD汉字显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE serial.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          名称:main.c
   3          日期:2005.01.12
   4          作者:廖志凯
   5          功能:
   6          说明:程序使用RTX51实时多任务系统,
   7          */
   8          #pragma large
   9          #include        "serial.h"
  10          /*------------------------------------------------------------------------------*/
  11          //定义串口缓冲区
  12          uchar xdata     cRecvBuff[RECV_GRUOP][RECV_LENGTH];     //接收缓冲区
  13          uchar xdata     cRecvBuffNum;                                                   //已接收数据的字节数
  14          uchar xdata     cRecvBuffPtr;                                                   //接收缓冲区有效数据起始指针
  15          uchar xdata     cRecvBuffCnt;                                                   //接收缓冲区有效数据总数
  16          
  17          uchar xdata     cTranBuff[TRAN_GRUOP][TRAN_LENGTH];             //发送缓冲区
  18          uchar xdata     cTranBuffNum;                                                   //已发送数据的字节数
  19          uchar xdata     cTranBuffPtr;                                                   //发送缓冲区有效数据起始指针
  20          uchar xdata     cTranBuffCnt;                                                   //发送缓冲区有效数据总数
  21          /*------------------------------------------------------------------------------*/
  22          uchar xdata     cRecvBuff2[RECV_LENGTH2];                               //接收缓冲区
  23          uchar xdata     cRecvBuffNum2;                                                  //已接收数据的字节数
  24          uchar xdata     cTranBuff2[TRAN_GRUOP2][TRAN_LENGTH2];  //发送缓冲区
  25          uchar xdata     cTranBuffNum2;                                                  //已发送数据的字节数
  26          uchar xdata     cTranBuffPtr2;                                                  //发送缓冲区有效数据起始指针
  27          uchar xdata     cTranBuffCnt2;                                                  //发送缓冲区有效数据总数
  28          /*===============================================================
  29          功能:串口初始化
  30          参数:
  31          返回:
  32          说明:
  33          ===============================================================*/
  34          void Init_Serial(void)
  35          {
  36   1              //初始化串口寄存器
  37   1              SCON = 0x50;                    //模式1,8位通讯,允许接收
  38   1              SCON2 = 0x50;                   //模式1,8位通讯,允许接收
  39   1              PCON = 0x00;                    //SMOD,SMOD1=0;                                         
  40   1              TMOD |= 0x20;                   //模式2,8位自载
  41   1              TH1 = 0xFA;
  42   1              TL1 = 0xFA;                             //波特率9600
  43   1              TR1 = 1;                                //启动Timer1
  44   1              ET1 = 0;                                //禁止Timer1中断
  45   1              os_enable_isr(SIO_VECTOR);
  46   1              os_enable_isr(SI1_VECTOR);
  47   1              //os_disable_isr(SI1_VECTOR);
  48   1              //初始化缓冲区
  49   1              memset(cRecvBuff,0x00,RECV_GRUOP*RECV_LENGTH);
  50   1              cRecvBuffNum    = 0x00;
  51   1              cRecvBuffPtr            = 0x00;
  52   1              cRecvBuffCnt            = 0x00;
  53   1              memset(cTranBuff,0x00,TRAN_GRUOP*TRAN_LENGTH);
  54   1              cTranBuffNum    = 0x00;
  55   1              cTranBuffPtr            = 0x00;
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 2   

  56   1              cTranBuffCnt            = 0x00;
  57   1              memset(cRecvBuff2, 0x00, RECV_LENGTH2);
  58   1              cRecvBuffNum2 = 0x00;
  59   1              memset(cTranBuff2, 0x00, TRAN_GRUOP2*TRAN_LENGTH2);
  60   1              cTranBuffNum2 = 0x00;
  61   1              cTranBuffPtr2 = 0x00;
  62   1              cTranBuffCnt2 = 0x00;
  63   1      }
  64          /*===============================================================
  65          功能:
  66          参数:
  67          返回:
  68          说明:
  69          ===============================================================*/
  70          void Write_serial_buff(uchar *buff, uchar len)
  71          {
  72   1              uchar _index;
  73   1              if(cTranBuffCnt < TRAN_GRUOP)
  74   1              {
  75   2                      _index = (cTranBuffPtr + cTranBuffCnt) % TRAN_GRUOP;
  76   2                      memcpy(cTranBuff[_index], buff, len);
  77   2                      cTranBuffCnt++;
  78   2                      //os_send_message(MBX_SERAIL_TRAN, 0x00, T10MS);
  79   2              }
  80   1      }
  81          
  82          /*===============================================================
  83          功能:串口0  中断程序
  84          参数:无
  85          返回:无
  86          说明:只给相应任务发送信号
  87          ===============================================================*/
  88          void Int_Serial0(void) interrupt  SIO_VECTOR
  89          {
  90   1              uchar xdata _index;
  91   1              uchar xdata _data;
  92   1              
  93   1              if(RI)
  94   1              {//接收中断
  95   2                      RI = 0;
  96   2                      _data = SBUF;
  97   2                      //isr_send_message(MBX_SERAIL_RECV, SBUF);
  98   2                      if(cRecvBuffCnt < RECV_GRUOP)
  99   2                      {//接收缓冲区未满
 100   3                              _index = (cRecvBuffPtr+cRecvBuffCnt) % RECV_GRUOP;      //缓冲区的偏移地址
 101   3                              if(_data == 0xFF)
 102   3                              {//如果收到起始符
 103   4                                      cRecvBuff[_index][0] = 0xFF;    
 104   4                                      cRecvBuffNum = 0x01;
 105   4                              }
 106   3                              else if( (cRecvBuffNum > 0x00)  && (cRecvBuffNum < RECV_LENGTH) )
 107   3                              {//其他数据
 108   4                                      cRecvBuff[_index][cRecvBuffNum] = _data;
 109   4                                      cRecvBuffNum++;
 110   4                                      if(cRecvBuffNum == (cRecvBuff[_index][1] + 3) )
 111   4                                      {//接收完毕
 112   5                                              cRecvBuffCnt++;
 113   5                                              cRecvBuffNum = 0x00;
 114   5                                      }
 115   4                              }
 116   3                              else if(cRecvBuffNum > RECV_LENGTH)
 117   3                              {//接收的数据超过缓冲区容量清除当前接收的数据
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 3   

 118   4                              cRecvBuffNum = 0x00;
 119   4                              memset(&cRecvBuff[_index][0],0x00,RECV_LENGTH);
 120   4                              }
 121   3                      }
 122   2              }
 123   1              if(TI)
 124   1              {//发送中断
 125   2                      TI = 0;
 126   2                      isr_send_signal(STRAN_TASK_ID);
 127   2              }
 128   1      }
 129          /*===============================================================
 130          功能:串口1  中断程序
 131          参数:无
 132          返回:无
 133          说明:只给相应任务发送信号
 134          ===============================================================*/
 135          void Int_Serial1(void) interrupt  SI1_VECTOR
 136          {
 137   1              if(SCON2&0x01)
 138   1              {//接收中断
 139   2                      SCON2 &= 0xFE;
 140   2                      cRecvBuff2[cRecvBuffNum2] = SBUF2;
 141   2                      if( ((cRecvBuff2[cRecvBuffNum2] == 'D') || (cRecvBuff2[cRecvBuffNum2] == 'W'))
 142   2                              && (cRecvBuff2[cRecvBuffNum2-1] == 'D') )
 143   2                      {//接收到数据头
 144   3                              cRecvBuff2[0] = 'D';
 145   3                              cRecvBuff2[1] = cRecvBuff2[cRecvBuffNum2];
 146   3                              cRecvBuffNum2 = 1;
 147   3                      }
 148   2                      else if( (cRecvBuff2[cRecvBuffNum2] == 0x0A) && (cRecvBuff2[cRecvBuffNum2-1] == 0x0D) )
 149   2                      {//接收完毕
 150   3                              isr_send_signal(CONFIG_TASK_ID);
 151   3                      }
 152   2                      cRecvBuffNum2++;
 153   2              }
 154   1              if(SCON2&0x02)
 155   1              {//发送中断
 156   2                      SCON2 &= 0xFD;
 157   2                      isr_send_signal(DEBUG_TASK_ID);
 158   2              }
 159   1      }

⌨️ 快捷键说明

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