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

📄 serial0.lst

📁 cygnal上的数据采集的程序(带实时时钟)
💻 LST
字号:
C51 COMPILER V7.50   SERIAL0                                                               11/15/2005 22:36:24 PAGE 1   


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

line level    source

   1          //-----------------------------------------------------------------------------
   2          // Net SERIAL.C
   3          //
   4          // This module handles RS-232 messages and associated tasks
   5          //-----------------------------------------------------------------------------
   6          #include <string.h>
   7          #include "C8051f.h"
   8          #include "intrins.h"
   9          #include "serial0.h"
  10          #include "Func.h"
  11          
  12          
  13          bit CommRecDataOverflowFlag,FlagRecComm,SendItComm;
  14          
  15          unsigned char CommSendBufferHead, CommSendBufferTail;
  16          unsigned char CommRecBufferHead, CommRecBufferTail;
  17          
  18          unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE] _at_ 0 ; //串行口缓冲区定位在内部4K XRAM中
  19          unsigned char xdata CommRecBuffer[DB_RECMAXSIZE] _at_ DB_SENDMAXSIZE; 
  20          
  21          void Delay1ms(unsigned char T);
  22          
  23          void ClearCommRecBuffer0(void)
  24          {
  25   1              unsigned char i;
  26   1              CommRecBufferHead=CommRecBufferTail=0;
  27   1              CommSendBufferHead=CommSendBufferTail=0;
  28   1              FlagRecComm=0;
  29   1              for (i=0;i<DB_SENDMAXSIZE;i++)
  30   1              {
  31   2                      CommSendBuffer[i]=0;
  32   2              }
  33   1              for (i=0;i<DB_RECMAXSIZE;i++)
  34   1              {
  35   2                      CommRecBuffer[i]=0;
  36   2              }
  37   1      }
  38          
  39          void init_serial0(unsigned int BaudRate)
  40          {
  41   1              ClearCommRecBuffer0();
  42   1              OpenComm0(BaudRate);
  43   1      }
  44          
  45          void OpenComm0(unsigned int BaudRate) 
  46          {
  47   1              PCON |= 0x80;           // SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
  48   1              TMOD |= 0x20;           // Configure Timer 1 for use by UART0
  49   1              CKCON |= 0x10;          // Timer 1 derived from SYSCLK
  50   1      
  51   1      //      RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
  52   1      //      RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
  53   1              RCAP2H=(65536-(SYSCLK/BaudRate/32))/256;
  54   1              RCAP2L=(65536-(SYSCLK/BaudRate/32))%256;
  55   1              TH2=RCAP2H;
C51 COMPILER V7.50   SERIAL0                                                               11/15/2005 22:36:24 PAGE 2   

  56   1              TL2=RCAP2L;
  57   1      
  58   1              CT2 = 0;                                //T2:timer mode 
  59   1              TR2 = 1;
  60   1      
  61   1              TCLK = 1;
  62   1              RCLK = 1;               //说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
  63   1                                                  //            SIO1只能用T1作为波特率发生器
  64   1                                                  //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
  65   1              CommSendBufferHead=CommSendBufferTail=0; // set the head and tail to the base of the ring buffer
  66   1              CommRecBufferHead=CommRecBufferTail=0;
  67   1      
  68   1              FlagRecComm=0;
  69   1              RI0 = 0;                                        // Clear HW_UART receive and transmit
  70   1              TI0 = 0;                                        // complete indicators.
  71   1              SCON0 = 0x50;                   // Configure UART0 for mode 1, receiver enabled.
  72   1              ES0 = 1;                                        // allow the serial interrupt
  73   1              SendItComm = 1;
  74   1      }
  75          
  76          
  77          
  78          void PutChar0(unsigned char Ch)
  79          {
  80   1              SBUF0 = Ch;
  81   1          while(!TI0)
  82   1          ;
  83   1          TI0 = 0;
  84   1      }
  85          
  86          void SendCommString0(unsigned char *base) 
  87          {
  88   1          unsigned int len;
  89   1          unsigned char i;
  90   1      
  91   1          len = strlen(base);
  92   1          for(i = 0; i<len; i++)
  93   1          {
  94   2              PutChar0(base[i]);
  95   2              Delay1ms(1);
  96   2          }
  97   1      }
  98          
  99          void serial_send_(unsigned char *base)
 100          {
 101   1              SendCommString0(base);
 102   1      }
 103          
 104          void CommISR0(void) interrupt 4
 105          {
 106   1              if (_testbit_(RI0))     
 107   1              {        
 108   2                      RI0=0;
 109   2                      if (CommRecBufferTail==CommRecBufferHead)
 110   2                      {
 111   3                              CommRecDataOverflowFlag=1;                              //接收缓冲区溢出
 112   3                      }
 113   2                      CommRecBuffer[CommRecBufferTail]=SBUF0;     //receive data           
 114   2                  CommRecBufferTail++;
 115   2                  if (CommRecBufferTail==DB_RECMAXSIZE)
 116   2                  {
 117   3                      CommRecBufferTail=0;
C51 COMPILER V7.50   SERIAL0                                                               11/15/2005 22:36:24 PAGE 3   

 118   3                  }
 119   2                      FlagRecComm=1;
 120   2              }
 121   1      }
 122          
 123          //从接收缓冲区读数据 ,无数据返回0,有数据返回1
 124          bit GetCommChar0(unsigned char  *ch)      
 125          { 
 126   1              if (CommRecBufferTail==CommRecBufferHead) return 0;     
 127   1              *ch=CommRecBuffer[CommRecBufferHead];
 128   1              CommRecBufferHead++;
 129   1              if (CommRecBufferHead==DB_RECMAXSIZE)
 130   1              {
 131   2                      CommRecBufferHead=0;
 132   2              }
 133   1              if (CommRecBufferTail==CommRecBufferHead) FlagRecComm=0;
 134   1              return 1;
 135   1      }
 136          
 137          
 138          
 139          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    679    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     22    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -