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

📄 main.lst

📁 这是关于遥控的程序和一些资料
💻 LST
字号:
C51 COMPILER V7.09   MAIN                                                                  09/16/2005 13:44:09 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          /*----------------------------------------
   2          
   3          红外遥控解码
   4          (M50560电视遥控器)
   5          
   6          Copyright 2005/9/13
   7          All rights reserved.    
   8              
   9            明浩 E-mail: pnzwzw@163.com   pnzwzw@cdle.net
  10          
  11          一体化接收头输出端拉P3.2(int0),P1为控制输出端。
  12          可以扩展到32路或更多
  13          输出为低电平有效
  14          ----------------------------------------*/
  15          
  16          #include <AT89x051.h>
  17          
  18          void InitCom(void);
  19          void ComOutChar(unsigned char OutData);
  20          void DelayA(void);
  21          void DelayB(void);
  22          
  23          void main(void)
  24          {
  25   1        unsigned int TempCyc;
  26   1      
  27   1        InitCom(); //初始化串口
  28   1        EA = 1; //允许CPU中断
  29   1        IT0 = 1; //INT0下降沿有效
  30   1        EX0 = 1; //开INT0中断;
  31   1        ComOutChar(1);
  32   1        ComOutChar(5);
  33   1        ComOutChar(3);
  34   1        do
  35   1          { 
  36   2            for (TempCyc=0; TempCyc<35000; TempCyc++)
  37   2              P3_7 = 0;
  38   2            for (TempCyc=0; TempCyc<30000; TempCyc++)
  39   2              P3_7 = 1;   //工作指示LED
  40   2          }
  41   1        while(1);
  42   1      }
  43          
  44          //INT0中断
  45          void INT0Fun(void) interrupt 0 using 2
  46          {
  47   1        unsigned char IRCode[2], IROK;
  48   1        unsigned int TempCyc, TempCycB, TempCycA;
  49   1        EX0 = 0; //外部中断0关闭
  50   1        IROK = 0;
  51   1        DelayA(); //延时等待引导码的前半部结束
  52   1        DelayA();
  53   1        if (!P3_2)  //检验前半部是否过早结束,防干扰
  54   1          {
  55   2            for (TempCycA=0; TempCycA<2; TempCycA++)
C51 COMPILER V7.09   MAIN                                                                  09/16/2005 13:44:09 PAGE 2   

  56   2              {
  57   3                DelayA();
  58   3                if (P3_2)  //检验前半部是否过早结束,防干扰
  59   3                  {
  60   4                    for (TempCyc=0; TempCyc<300; TempCyc++)
  61   4                      if (!P3_2) break; //等待第一个位,
  62   4                    if (TempCyc<300) //超时检验
  63   4                      {
  64   5                        for (TempCyc=0; TempCyc<8; TempCyc++)
  65   5                          {
  66   6                            while(!P3_2); //等待P3_2拉高,开始位的下部分
  67   6                            DelayB(); //这里没设超时,实际应用在多功能的设计时应设超时
  68   6                            IRCode[TempCycA] = IRCode[TempCycA]>>1;
  69   6                            if (P3_2) //当延时750us后P3_2仍为高则当前位为1
  70   6                              {
  71   7                                IRCode[TempCycA] = IRCode[TempCycA] | 0x80;
  72   7                                for (TempCycB=0; TempCycB<100; TempCycB++)
  73   7                                  if (!P3_2) break; //等待下个位 当位1时高电平为1.5ms,
  74   7                                if (TempCycB>99) //之前已延时了750us, 所以超时应大于1.5ms-750us
  75   7                                  goto endchk; //这里最大为1ms
  76   7                              }
  77   6                          }
  78   5                      }
  79   4                    else
  80   4                      goto endchk;  //超时
  81   4                  }
  82   3                else
  83   3                  goto endchk;
  84   3                IROK++; //当自定码和数据码都完成时为2
  85   3              }
  86   2          }
  87   1      endchk:
  88   1        if (IROK==2)
  89   1          {
  90   2            ComOutChar(IRCode[0]);
  91   2            ComOutChar(IRCode[1]); //连接PC串口查看自定义码和数据码
  92   2            if (IRCode[1]==0x10) //1号键  //只演示点亮2只LED,读者可以自行扩展控制别的器件
  93   2              P1_7 = ~P1_7;
  94   2            if (IRCode[1]==0x11) //2号键
  95   2              P1_6 = ~P1_6;
  96   2            for (TempCyc=0; TempCyc<300; TempCyc++)
  97   2              DelayA(); //延时
  98   2          }
  99   1        EX0 = 1;
 100   1      }
 101          
 102          //向串口输出一个字符(非中断方式)
 103          void ComOutChar(unsigned char OutData)
 104          {
 105   1        SBUF = OutData; //输出字符
 106   1        while(!TI); //空语句判断字符是否发完
 107   1        TI = 0; //清TI
 108   1      }
 109          
 110          //串口初始化 晶振为12M 方式1 波特率4800
 111          void InitCom(void)
 112          {
 113   1        SCON = 0x50; //串口方式1,允许接收
 114   1        TMOD = 0x21; //定时器1定时方式2,定时0为模式1,16位模式
 115   1        TCON = 0x40; //设定时器1开始计数
 116   1        TH1 = 0xF3; //设波特率为4800
 117   1        TL1 = 0xF3;
C51 COMPILER V7.09   MAIN                                                                  09/16/2005 13:44:09 PAGE 3   

 118   1        PCON = 0x80; //波特率加倍控制,SMOD位
 119   1        RI = 0; //清收发标志
 120   1        TI = 0;
 121   1        TR1 = 1; //启动定时器
 122   1      }
 123          
 124          void  DelayA(void)
 125          {
 126   1        unsigned int TempCyc;
 127   1        for (TempCyc=0; TempCyc<650; TempCyc++); //3.5
 128   1      }
 129          
 130          void DelayB(void)
 131          {
 132   1        unsigned int TempCyc;
 133   1        for (TempCyc=0; TempCyc<93; TempCyc++); //  0.75ms
 134   1      }


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


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

⌨️ 快捷键说明

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