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

📄 serial.lst

📁 RM0038红外传感器接收电视机摇控的源码
💻 LST
字号:
C51 COMPILER V7.00  SERIAL                                                                 08/18/2007 19:53:32 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 ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "Serial.h"
   2          
   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^7;
  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              //P2_6 = 0;
  55   1              SBUF = sdata;
C51 COMPILER V7.00  SERIAL                                                                 08/18/2007 19:53:32 PAGE 2   

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

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


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