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

📄 serial.lst

📁 控制X射线和高压源的典型应用程序
💻 LST
字号:
C51 COMPILER V7.50   SERIAL                                                                06/13/2007 22:16:10 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial.c LARGE BROWSE FLOATFUZZY(7) INCDIR(C:\KEIL\C51\测厚仪\X-RAY\AD\) DE
                    -BUG OBJECTEXTEND

line level    source

   1          
   2          
   3          //*************************************************************************
   4          //串口中断服务程序
   5          //*************************************************************************
   6          //#include "TestSerial.h" 
   7          #include <c8051f060.h>                    // SFR declarations
   8          #include <stdio.h>
   9          
  10          #define DB_SENDMAXSIZE 30                  //上传最大可能长度 30 字节。
  11          #define DB_RECMAXSIZE  9                   //下传最大可能长度 9 字节。
  12          //#define UpSize         13
  13          #define ModuAddr     170                //= 170 ;0XAA
  14          #define  SYSCLK 24500000  //22118400                   // SYSCLK frequency in Hz   24500000 //
  15          #define  BAUDRATE   9600                   // 115200用户定义的timer1 波特率
  16          
  17          
  18          unsigned char UpSize = 13  ;
  19          bit CommRecDataOverflowFlag,FlagRecComm,SendItComm;
  20          unsigned char Count1ms,DownSize = 3 , AddSum ;
  21          unsigned char CommSendBufferHead, CommSendBufferTail;
  22          unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE] ; 
  23          unsigned char CommRecBufferHead, CommRecBufferTail;
  24          unsigned char xdata CommRecBuffer[DB_RECMAXSIZE]; 
  25          
  26          sbit R485 = P2^1;  //P0^2 ; //P5^3;                              //485 接收/发送, 选择位。
  27          
  28          void ClearCommRecBuffer(void)
  29          {
  30   1        char   data  old_SFRPAGE ;
  31   1        old_SFRPAGE = SFRPAGE  ;
  32   1          SFRPAGE = 0X00 ;
  33   1              CommRecBufferTail=0;
  34   1              FlagRecComm=0;
  35   1          CommRecBuffer[0]  = 0x00;
  36   1          CommRecBuffer[1]  = 0x00;
  37   1          CommRecBuffer[40] = 0x00;
  38   1          DownSize = 3;
  39   1      
  40   1        SFRPAGE = old_SFRPAGE ;
  41   1      }
  42          
  43          void OpenComm(void) 
  44          {
  45   1         char   data  old_SFRPAGE ;
  46   1          old_SFRPAGE = SFRPAGE  ;
  47   1          SFRPAGE = 0X00 ;
  48   1          R485 = 0;                               // 0:接收数据。
  49   1         
  50   1              
  51   1         // FOLLOW IS FOR TIMER0,1 INIT.
  52   1          PCON  |= 0x80;                      // 电源控制寄存器
  53   1              TMOD   = 0x21;              // Configure Timer 0,1 for use.
  54   1              CKCON |= 0x12;                  // Timer 1 derived from SYSCLK.
C51 COMPILER V7.50   SERIAL                                                                06/13/2007 22:16:10 PAGE 2   

  55   1          TH1    = -(SYSCLK/BAUDRATE/16);  //SYSCLK = 22.1168 ,BAUDRATE/16 
  56   1              TR1    = 1  ;                               // Start Timer 1
  57   1              TR0    = 1 ;
  58   1              CommSendBufferHead=CommSendBufferTail=0; // set the head and tail to the base of the ring buffer
  59   1              CommRecBufferHead=CommRecBufferTail=0;
  60   1              FlagRecComm=0;
  61   1      
  62   1              // FOLLOW IS FOR UART0 INIT.
  63   1         SFRPAGE = UART0_PAGE;        
  64   1         SCON0   = 0x50;                     // SCON: mode 1, 8-bit UART, enable RX
  65   1         SSTA0   = 0x10;                     // BY Timer 1 generates UART0 baud rate and
  66   1                                             // 禁止UART0 的波特率/2 功能.
  67   1          RI0=0;                                      // Clear UART0 receive.
  68   1              TI0=0;                                  // Clear UART0  transmit.
  69   1              
  70   1              ES0=1;                                  // allow the serial interrupt
  71   1      
  72   1              SendItComm=1;           //      enable send the data to SBUF0.
  73   1         
  74   1              SFRPAGE = old_SFRPAGE ;
  75   1              }
  76          //---------------------------------------------------------------------
  77          //通信预置数据
  78          //-----------------------------------------------------------------------
  79          
  80          void SendCommBuffer(unsigned char *base, unsigned char Len)  //  UpSize = 8 个上传数据
  81          {
  82   1        unsigned char i=0, AddSum ;
  83   1              
  84   1              if (SendItComm)
  85   1              {
  86   2             R485 = 1;                                 // 1;发送数据。
  87   2             i = 0 ;
  88   2             AddSum = 0; 
  89   2                 while (i<Len-1)                 //i = 0 --- 6 为要传送的数据,放入缓冲区。 
  90   2               {       
  91   3                     AddSum +=  base[i] ;
  92   3                         CommSendBuffer[i]=base[i]; 
  93   3                     i++;
  94   3                    }
  95   2                CommSendBuffer[Len-1] =  AddSum;  // [7] 为ADDSUM at end, place the addsum.
  96   2             }
  97   1        CommSendBufferHead=0;
  98   1        SBUF0=CommSendBuffer[CommSendBufferHead];          // send the first  byte,开始通讯.
  99   1      }
 100          
 101          //--------------------------------------------------------------------------
 102          //通信中断程序
 103          //---------------------------------------------------------------------------
 104          
 105          void CommISR(void) interrupt 4  using 3
 106          {
 107   1        
 108   1          unsigned char i=0;
 109   1              if (TI0)                                          //清除发送中断标志
 110   1              {
 111   2                  TI0=0;
 112   2              CommSendBufferHead++;   
 113   2                      
 114   2                      if (CommSendBufferHead != (UpSize) )  //UpSize = 8 则上传0--7 共8个数据 ,
 115   2                         {     
 116   3                              SBUF0=CommSendBuffer[CommSendBufferHead]; // < 13 ,0--12 共13个数据被发送.send the next byte
C51 COMPILER V7.50   SERIAL                                                                06/13/2007 22:16:10 PAGE 3   

 117   3                              SendItComm=0;
 118   3                         }
 119   2             else                                        // = 13 相等,本次通讯完成。
 120   2                  {
 121   3                      SendItComm=1;                             //允许进行下一次通讯。
 122   3                      R485 = 0;                                 // 0:接收数据。
 123   3                  DownSize = 3;
 124   3                              }
 125   2          }
 126   1      
 127   1              if (RI0)
 128   1              {        
 129   2                      RI0=0;                                      //清除接收中断标志
 130   2                      CommRecBuffer[CommRecBufferTail]=SBUF0;     //receive data。           
 131   2                  CommRecBufferTail++;
 132   2              if (CommRecBufferTail >= DB_RECMAXSIZE)
 133   2                       {
 134   3                         CommRecBufferTail = 0 ;                 //如果接受的数据比缓冲区还长,指针清零.
 135   3                       }
 136   2                      if ( CommRecBuffer[0]== ModuAddr )        //是本设备接收的地址吗?
 137   2                       {
 138   3                          if (CommRecBufferTail==2)           //先加指针,因此=2。
 139   3                             {
 140   4                            DownSize = CommRecBuffer[1];      //指针在0Xa5后第一个单元。
 141   4                                     }
 142   3                              if (CommRecBufferTail>=DownSize)         //本次通讯,数据已传输完了吗?
 143   3                             {
 144   4                                              for (i=0; i<DownSize-1 ;i++)
 145   4                                 {
 146   5                                   AddSum =  AddSum +  CommRecBuffer[ i ] ;
 147   5                                                         }
 148   4                                      if ( CommRecBuffer[ DownSize-1 ]== AddSum)  // 累加和相等吗?
 149   4                                             { 
 150   5                                              FlagRecComm=1;          //本次通讯数据正确,通知主程序取数。
 151   5                                      DownSize = 3;               //否则只修改指针,不通知主程序取数。
 152   5                                      REN0 = 0;               //禁止UART0 接收数据,主程序取数后再打开
 153   5                                                     }
 154   4                          CommRecBufferTail = 0x00;           //只要指针大于DownSize,将指针恢复到起始地址。
 155   4                          AddSum = 0;                         //清除累加和。
 156   4                          CommRecBuffer[ 0 ] = 0;
 157   4                          DownSize = 3; 
 158   4                                 }                                 
 159   3                
 160   3                    }
 161   2                        if ( CommRecBuffer[0]!= ModuAddr )
 162   2                        {
 163   3                  CommRecBufferTail = 0x00;              //第一个字符不相等,将指针恢复到起始地址。
 164   3                  AddSum = 0;                            //清除累加和。
 165   3                        }
 166   2           } 
 167   1      }
 168          
 169          
 170          
 171          
 172          
 173          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    434    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V7.50   SERIAL                                                                06/13/2007 22:16:10 PAGE 4   

   XDATA SIZE       =     47       3
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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