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

📄 uart.lst

📁 单片机P89V51RD2在操纵系统RTX下的各个功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   UART                                                                  10/01/2007 00:33:27 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\obj\uart.obj
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\uart.lst) OBJECT(.\obj\uart.ob
                    -j)

line level    source

   1          //uart.c
   2          //
   3          
   4                            
   5          #include "AppDefine.h"                 
   6          
   7          
   8          bit bdata bFrameSt;                     //帧头
   9          
  10          extern unsigned int  Val_Mytime, Val_Uptime, Val_ad, Val_Actdata, Val_Actdir;
  11          extern unsigned char Val_Mystatus;
  12          
  13          extern unsigned char COMMFlag;          //
  14          
  15          unsigned char COMMInLenght;             //
  16          unsigned char COMMInIndex;              //
  17          unsigned char COMMInSum;                //
  18          unsigned char COMMInBuff[8];            //
  19          
  20          extern unsigned char RUNflag;           //
  21          
  22          /*****************************通讯程序***********************************/
  23          /**************************************************************************/
  24          void Uart_Init(unsigned char smod, unsigned char ctime)
  25          {
  26   1              SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 
  27   1              TMOD  = 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 
  28   1              switch(smod)
  29   1              {
  30   2              case 1:
  31   2                      PCON  = 0x80;       //SMOD=1; 
  32   2                      break;
  33   2              case 0:
  34   2              default:
  35   2                      PCON  = 0x00;       //SMOD=0; 
  36   2                      break;
  37   2              }
  38   1              TL1   = ctime;       
  39   1              TH1   = TL1;       
  40   1              TR1   = 1;          // timer 1 run 
  41   1              
  42   1              //中断
  43   1              ES = 1;
  44   1              //
  45   1              EN485 = 0;//RECEIVE
  46   1              //
  47   1              COMMInLenght = 0;
  48   1              COMMInIndex = 0;
  49   1              COMMInSum = 0;
  50   1              bFrameSt = 0;
  51   1      
  52   1      }
  53          
  54          
C51 COMPILER V8.02   UART                                                                  10/01/2007 00:33:27 PAGE 2   

  55          //向串口发送一个字符 data
  56          void Uart_SendChar(unsigned char ch)  
  57          {
  58   1              EN485 = T_EN485;
  59   1              ES = 0;
  60   1        SBUF = ch;
  61   1        while(TI==0);
  62   1        TI = 0;
  63   1              ES = 1;
  64   1              EN485 = R_EN485;
  65   1      }
  66          
  67          //向串口发送一帧数据 address + data
  68          unsigned char Uart_SendFrame(unsigned char addr, unsigned char *ch, unsigned char datalen)  
  69          {
  70   1              unsigned char i, sendlen=0, sum=0;
  71   1      
  72   1              EN485 = T_EN485;
  73   1              ES = 0;
  74   1              
  75   1        SBUF = 0x7f;
  76   1        while(TI==0);
  77   1        TI = 0;
  78   1        sendlen++;
  79   1        
  80   1        SBUF = addr;
  81   1        while(TI==0);
  82   1        TI = 0;
  83   1        sum += addr;
  84   1        sendlen++;
  85   1          
  86   1              for(i=0;i<datalen;i++)
  87   1              {
  88   2                      sum += *ch;
  89   2                  SBUF = *ch++;
  90   2                  while(TI==0);
  91   2                  TI=0;
  92   2                      sendlen++;
  93   2              }
  94   1              
  95   1        SBUF = sum;
  96   1        while(TI==0);
  97   1        TI = 0;
  98   1        sendlen++;
  99   1      
 100   1              ES = 1;
 101   1              EN485 = R_EN485;
 102   1              return sendlen;
 103   1      }
 104          
 105          //串口接收中断函数,分为接收4字节和8字节 
 106          void Uart_INT () interrupt 4 using 1 
 107          {
 108   1          if(RI)
 109   1          {
 110   2              unsigned char ch;//,i;
 111   2             ES = 0;
 112   2             RI = 0;
 113   2              ch = SBUF;
 114   2              if(bFrameSt == 0)//bFrameSt=0
 115   2                      {
 116   3                              if(ch == 0x7f){//帧头
C51 COMPILER V8.02   UART                                                                  10/01/2007 00:33:27 PAGE 3   

 117   4                                      bFrameSt = 1;
 118   4                              }
 119   3                      }
 120   2                      else{//bFrameSt=1
 121   3                              switch(COMMFlag)
 122   3                              {
 123   4                              case CMD_NO_FLAG:
 124   4                                      if(ch == BG485ADDR){//广播地址
 125   5                                              COMMFlag = CMD_RESET_FLAG;
 126   5                                              COMMInLenght = CMD_RESET_NUM;
 127   5                                              COMMInIndex = 0;
 128   5                                              COMMInSum = 0;
 129   5                                              COMMInBuff[COMMInIndex] = ch;
 130   5                                      }
 131   4                                      else if(ch == MY485ADDR){//data
 132   5                                              if(RUNflag != RUN_NO_FLAG){
 133   6                                                      COMMFlag = CMD_DATA_FLAG;
 134   6                                                      COMMInLenght = CMD_DATA_NUM;
 135   6                                                      COMMInIndex = 0;
 136   6                                                      COMMInBuff[COMMInIndex] = ch;
 137   6                                              }else{
 138   6                                                      COMMFlag = CMD_NO_FLAG;
 139   6                                                      COMMInLenght = 0;
 140   6                                                      COMMInIndex = 0;
 141   6                                                      COMMInBuff[COMMInIndex] = 0x0;
 142   6                                                      bFrameSt = 0;
 143   6                                              }
 144   5                                      }
 145   4                                      break;

⌨️ 快捷键说明

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