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

📄 serial.lst

📁 本人写的测试CS5530芯片代码,大部分功能和CS5532相同
💻 LST
字号:
C51 COMPILER V7.00  SERIAL                                                                 10/16/2007 16:20:00 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Serial.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "Serial.h"
   2          #include "STC89C51RC_RD_PLUS.H"
   3          //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理
   4          //出入均设有缓冲区,大小可任意设置。
   5          //可供使用的函数名:
   6          //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
   7          //************************************************************************* 
   8          bit m_bSendEnd = 0;
   9          #define  ILEN  30                     /* size of serial receiving buffer */
  10          xdata   unsigned char  inbuf[ILEN]; 
  11          xdata uchar xdata *inlast=inbuf;  //最后由中断进入接收缓冲区的字节位置
  12          xdata uchar xdata *getlast=inbuf;  //最后取走的字节位置
  13          bit   inbufsign;      //接收缓冲区非空标志   有=1
  14          bit   inbufful;       //输入缓冲区满标志  满=1
  15          
  16          //#define StateIO StateIO_3
  17          //#define bSerialRSLed bSerialRSLed_3
  18          //char bdata StateIO _at_ 0x20;
  19          //sbit bSerialRSLed = StateIO^5;
  20          
  21          //串口初始化 晶振为11.0592M 方式1 波特率300-57600
  22          void InitCom(uchar BaudRate)
  23          {
  24   1              uchar THTL;
  25   1              switch (BaudRate)
  26   1              {
  27   2              case 1: THTL = 64; break; //波特率300
  28   2              case 2: THTL = 160; break; //600
  29   2              case 3: THTL = 208; break; //1200
  30   2              case 4: THTL = 232; break; //2400
  31   2              case 5: THTL = 244; break; //4800
  32   2              case 6: THTL = 250; break; //9600
  33   2              case 7: THTL = 253; break; //19200
  34   2              case 8: THTL = 255; break; //57600
  35   2              default: THTL = 208;
  36   2              }
  37   1              
  38   1              SCON = 0x50; //串口方式1,允许接收
  39   1              TMOD |= 0x20; //定时器1定时方式2
  40   1              TCON |= 0x40; //设定时器1开始计数 
  41   1              TH1 = THTL;
  42   1              TL1 = THTL;
  43   1              PCON = 0x80; //波特率加倍控制,SMOD位
  44   1              RI = 0; //清收发标志
  45   1              TI = 0;
  46   1              TR1 = 1; //启动定时器
  47   1              ES = 1;
  48   1      }
  49          
  50          //串口发送
  51          void Send(uchar sdata)
  52          {
  53   1              //bSerialRSLed = 1;
  54   1              SBUF = sdata;
  55   1              m_bSendEnd = 1;
C51 COMPILER V7.00  SERIAL                                                                 10/16/2007 16:20:00 PAGE 2   

  56   1              while(m_bSendEnd){};
  57   1      }
  58          
  59          bit SerialCheck()
  60          {
  61   1              return inbufsign;
  62   1      }
  63          //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
  64          uchar Getbyte (void)      
  65          { 
  66   1              char idata c ;
  67   1              while (!inbufsign);     //缓冲区空等待
  68   1              ES=0;  
  69   1              c= *getlast;            //取数据 
  70   1              getlast++;              //最后取走的数据位置加一
  71   1              inbufful=0;            //输入缓冲区的满标志清零   
  72   1              if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部
  73   1              if (getlast==inlast) inbufsign=0;       //地址相等置接收缓冲区空空标志,再取数前要检该标志
  74   1              ES=1;
  75   1              return (c);        //取回数据
  76   1      }
  77          
  78          //****************************
  79          void putinbuf(uchar c)
  80          {
  81   1              ES=0;   
  82   1              if(!inbufful)
  83   1              {
  84   2              *inlast= c;            //放入数据            
  85   2              inlast++;                    //最后放入的位置加一  
  86   2              if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
  87   2              if (inlast==getlast)    inbufful=1;  //接收缓冲区满置满标志
  88   2              inbufsign=1;     
  89   2              }
  90   1              ES=1;
  91   1      }
  92          
  93          xdata unsigned long IspReset = 0;
  94          //串行中断程序
  95          void int_s(void) interrupt 4 {
  96   1              if (TI ) 
  97   1          {
  98   2              TI = m_bSendEnd = 0;
  99   2          }
 100   1          if (RI)  
 101   1          {  
 102   2                      //bSerialRSLed = 1;
 103   2                      RI = 0; 
 104   2                      //---ISP重启
 105   2                      if(SBUF == 0x12)
 106   2                      {
 107   3                              IspReset = 0;
 108   3                      }
 109   2                      IspReset += SBUF;
 110   2                      if(SBUF == 0x78&&IspReset == 0x114)
 111   2                      {
 112   3                              unsigned long   j;
 113   3                              for(j=0;j<60000;j++);for(j=0;j<60000;j++);
 114   3                              ISP_CONTR = 0x60;
 115   3                      }
 116   2                      //-----------------------------------------------
 117   2              if(!inbufful)
C51 COMPILER V7.00  SERIAL                                                                 10/16/2007 16:20:00 PAGE 3   

 118   2              {
 119   3                              *inlast= SBUF;            //放入数据
 120   3                      inlast++;                    //最后放入的位置加一 
 121   3                      inbufsign=1; 
 122   3                      if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
 123   3                      if (inlast==getlast)    inbufful=1;  //接收缓冲区满置满标志
 124   3              }
 125   2          }
 126   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    630    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     38    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----       1
   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 + -