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

📄 main.lst

📁 P89LV51RD2单片机控制红外收发
💻 LST
字号:
C51 COMPILER V7.09   MAIN                                                                  06/15/2006 17:32:03 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Main.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2                  Main.C
   3                  红外收发实验
   4          */
   5          
   6          
   7          #include <reg51.h>
   8          
   9          
  10          sbit LED = P0^0;        //定义指示灯,收到正确数据后点亮
  11          sbit CLK = P3^4;        //定义红外管时钟信号,产生38kHz方波
  12          
  13          
  14          //参数配置
  15          #define MCLK            11059200L       //定义CPU主频(Hz)
  16          #define BAUD_RATE       2400L           //设置波特率
  17          
  18          
  19          volatile bit _TI_;      //定义发送辅助标志
  20          volatile unsigned char cnt;     //定义接收计数器
  21          
  22          
  23          /*
  24          函数:UartINTSVC()
  25          功能:T0定时中断服务程序
  26          */
  27          void T0INTSVC() interrupt 1
  28          {
  29   1              CLK = !CLK;
  30   1      }
  31          
  32          
  33          /*
  34          函数:UartINTSVC()
  35          功能:串行口中断服务程序
  36          */
  37          void UartINTSVC() interrupt 4
  38          {
  39   1              unsigned char c;
  40   1              if ( RI )       //接收中断
  41   1              {
  42   2                      c = SBUF;
  43   2                      RI = 0;
  44   2                      if ( c == 0x5A ) cnt++;
  45   2              }
  46   1              if ( TI )       //发送中断
  47   1              {
  48   2                      TI = 0;
  49   2                      _TI_ = 1;
  50   2              }
  51   1      }
  52          
  53          
  54          /*
  55          函数:UartInit()
C51 COMPILER V7.09   MAIN                                                                  06/15/2006 17:32:03 PAGE 2   

  56          功能:串行口初始化
  57          */
  58          void UartInit()
  59          {
  60   1              EA = 0;
  61   1              TR1 = 0;
  62   1              RXD = 1;
  63   1              TXD = 1;
  64   1              _TI_ = 1;
  65   1              SCON = 0x50;    //串口方式1(8位Uart),允许接收
  66   1              PCON |= 0x80;   //波特率加倍
  67   1              TMOD &= 0x0F;
  68   1              TMOD |= 0x20;
  69   1              TH1 = 256 - ( MCLK / 12 ) / ( 16 * BAUD_RATE );
  70   1              TL1 = TH1;              //设置波特率
  71   1              TR1 = 1;
  72   1              ES = 1;                 //使能串行口中断
  73   1              EA = 1;                 //使能总中断
  74   1      }
  75          
  76          
  77          /*
  78          函数:UartSendChar()
  79          功能:通过串行口发送单个字节
  80          参数:
  81                  c:被发送的字节数据,取值0x00~0xFF
  82          */
  83          void UartSendChar(char c)
  84          {
  85   1              while ( !_TI_ );
  86   1              _TI_ = 0;
  87   1              SBUF = c;
  88   1      }
  89          
  90          
  91          /*
  92          函数:Delay()
  93          功能:延时(t*0.1)ms
  94          */
  95          void Delay(unsigned char t)
  96          {
  97   1              unsigned char n;
  98   1              do
  99   1              {
 100   2                      n = 49;
 101   2                      while ( --n != 0 );
 102   2              } while ( --t != 0 );
 103   1      }
 104          
 105          
 106          /*
 107          函数:SysInit()
 108          功能:系统初始化
 109          */
 110          void SysInit()
 111          {
 112   1              TMOD &= 0xF0;
 113   1              TMOD |= 0x02;   //设置T0为8位定时器,自动重装
 114   1              TH0 = 256 - ((MCLK / 12) / 38000L) / 2;
 115   1              TL0 = TH0;              //设置T0初值,对应38kHz
 116   1              PT0 = 1;                //设置T0中断为高级优先级
 117   1              ET0 = 1;                //使能T0中断
C51 COMPILER V7.09   MAIN                                                                  06/15/2006 17:32:03 PAGE 3   

 118   1              EA = 1;                 //使能总中断
 119   1              TR0 = 1;                //启动定时器T0
 120   1              UartInit();             //串行口初始化
 121   1      }
 122          
 123          
 124          void main()
 125          {
 126   1              unsigned char i;
 127   1              SysInit();
 128   1              for (;;)
 129   1              {
 130   2                      cnt = 0;        //接收计数器清0
 131   2                      for ( i=0; i<10; i++)   //发送10次0x5A
 132   2                      {
 133   3                              UartSendChar(0x5A);
 134   3                              Delay(10);
 135   3                      }
 136   2                      if ( cnt > 5 )  //如果收到一半以上的0x5A
 137   2                      {
 138   3                              LED = 0;        //点亮LED
 139   3                      }
 140   2                      else
 141   2                      {
 142   3                              LED = 1;        //否则熄灭LED
 143   3                      }
 144   2                      Delay(100);
 145   2              }
 146   1      }
 147          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    148    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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