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

📄 wdj.lst

📁 为红外遥控音源切换器的PC应用软件 CDLEB.hex CDLEB_Main.c CDLEB.hex为已编译的加强版的红外遥控音源切换器的单片机程序  红外遥控PC功能,PC软件可使用Grid
💻 LST
字号:
C51 COMPILER V8.08   WDJ                                                                   03/01/2008 06:27:14 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE WDJ
OBJECT MODULE PLACED IN wdj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wdj.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <AT892051.h>
   2          
   3          static unsigned char data CS;
   4          static unsigned char data IRCode[4],IRCON,IRCON2;
   5          
   6          void main(void)
   7          {
   8   1              unsigned int de;
   9   1              void InitCom(unsigned char BaudRate);
  10   1              void ComOutChar(unsigned char OutData);
  11   1              void CSToOut(void);
  12   1      
  13   1              InitCom(6); //设置波特率为9600 1-7波特率300-19200
  14   1              EA = 1; //允许CPU中断
  15   1              ES = 1; //开串口中断
  16   1              IT0 = 1; //INT0下降沿有效
  17   1              EX0 = 1; //开INT0中断
  18   1              CS = 0; //设置CS为0不选任何的音源,如为1则选第1路
  19   1              CSToOut();
  20   1              do
  21   1                      {       
  22   2                              if (P1_0 == 0)  //取按键值
  23   2                                      {
  24   3                                              CS = 1;
  25   3                                              P1 = 255; //P1口全为高电平,4-7通过反相为低不选任何音源,0-3为高用于
  26   3                                              CSToOut();
  27   3                                      }
  28   2                              if (P1_1 == 0)
  29   2                                      {
  30   3                                              CS = 2;
  31   3                                              P1 = 255;
  32   3                                              CSToOut();
  33   3                                      }
  34   2                              if (P1_2 == 0)
  35   2                                      {
  36   3                                              CS = 3;
  37   3                                              P1 = 255;
  38   3                                              CSToOut();
  39   3                                      }
  40   2                              if (P1_3 == 0)
  41   2                                      {
  42   3                                              CS = 4;
  43   3                                              P1 = 255;
  44   3                                              CSToOut();
  45   3                                      }
  46   2                              for (de=0; de<4000; de++);
  47   2                      }
  48   1              while(1);
  49   1      }
  50          
  51          
  52          //串口初始化 晶振为11.0592M 方式1 波特率300-57600
  53          void InitCom(unsigned char BaudRate)
  54          {
  55   1              unsigned char THTL;
C51 COMPILER V8.08   WDJ                                                                   03/01/2008 06:27:14 PAGE 2   

  56   1              switch (BaudRate)
  57   1                      {
  58   2                              case 1: THTL = 64; break; //波特率300
  59   2                              case 2: THTL = 160; break; //600
  60   2                              case 3: THTL = 208; break; //1200
  61   2                              case 4: THTL = 232; break; //2400
  62   2                              case 5: THTL = 244; break; //4800
  63   2                              case 6: THTL = 250; break; //9600
  64   2                              case 7: THTL = 253; break; //19200
  65   2                              case 8: THTL = 255; break; //57600
  66   2                              default: THTL = 208;
  67   2                      }
  68   1              SCON = 0x50; //串口方式1,允许接收
  69   1              TMOD = 0x21; //定时器1定时方式2定时器0方式1 用在别处可以不用定时器0,TMOD=0x20
  70   1              TCON = 0x40; //设定时器1开始计数
  71   1              TH1 = THTL;
  72   1              TL1 = THTL;
  73   1              PCON = 0x80; //波特率加倍控制,SMOD位
  74   1              RI = 0; //清收发标志
  75   1              TI = 0;
  76   1              TR1 = 1; //启动定时器
  77   1      }
  78          
  79          //向串口输出一个字符(非中断方式)
  80          void ComOutChar(unsigned char OutData)
  81          {
  82   1              SBUF = OutData; //输出字符
  83   1              while(!TI); //空语句判断字符是否发完
  84   1              TI = 0; //清TI
  85   1      }
  86          
  87          //串口接收中断
  88          void ComInINT(void) interrupt 4 using 1
  89          {
  90   1              if (RI) //判断是不收完字符
  91   1                      {
  92   2                              switch(SBUF)
  93   2                                      {
  94   3                                        case 0x61: CS = 1; break; //根据SBUF设置CS 接收'abcde'调试方便
  95   3                                              case 0x62: CS = 2; break;
  96   3                                              case 0x63: CS = 3; break;
  97   3                                              case 0x64: CS = 4; break;
  98   3                                              case 0x65: CS = 0; break;
  99   3                                      }
 100   2                              P1 = 255; //P1口全为高电平,4-7通过反相为低不选任何音源,0-3为高用于读取按键
 101   2                              RI = 0; //RI清零
 102   2                              CSToOut();
 103   2                      }
 104   1      }
 105          
 106          //定时器0中断处理
 107          void timeint(void) interrupt 1 using 2
 108          {
 109   1        //unsigned char a;
 110   1        TH0=0xFD;
 111   1        TL0=0x1E; //设定时值为800us
 112   1      
 113   1              if (IRCON<3)
 114   1          {
 115   2            if (IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
 116   2              {
 117   3                IRCON2++;
C51 COMPILER V8.08   WDJ                                                                   03/01/2008 06:27:14 PAGE 3   

 118   3                            IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
 119   3                            IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
 120   3              }
 121   2            else
 122   2              {
 123   3                IRCON++; //第填满一个字节,指向下一个变量
 124   3                IRCON2=0; //计数清零
 125   3              }
 126   2          }
 127   1       else
 128   1        {
 129   2                      TR0 = 0; //关闭定时器
 130   2                      ET0 = 0; //定时器0中断关闭
 131   2                      //for (a=0;a<3;a++)
 132   2                              //ComOutChar(IRCode[a]); //这两句可通过PC串口调试软件看接收到的数据,测试用
 133   2          if ((IRCode[1] == 0x55) && (IRCode[2] == 0xAB)) //取遥控值,取变量中的2,3字节
 134   2                              {                        //第一字节是引导码,第二、三字节是起始位、控制位和系统码
 135   3                                      CS = 1;               
 136   3                                      P1 = 255;
 137   3                                      CSToOut();
 138   3                                      }
 139   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0xAC))
 140   2                              {
 141   3                                      CS = 2;
 142   3                                      P1 = 255;
 143   3                                      CSToOut();
 144   3                              }
 145   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0xAD))
 146   2                              {
 147   3                                      CS = 3;
 148   3                                      P1 = 255;
 149   3                                      CSToOut();
 150   3                              }
 151   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0xB2))
 152   2                              {
 153   3                                      CS = 4;
 154   3                                      P1 = 255;
 155   3                                      CSToOut();
 156   3                              }
 157   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0xD2)) //关闭
 158   2                              {
 159   3                                      CS = 0;
 160   3                                      P1 = 255;
 161   3                                      CSToOut(); 
 162   3                              }
 163   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0xD3)) //静音
 164   2                              {
 165   3                                      ComOutChar(8);
 166   3                              }
 167   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0x2A)) //音量控制+
 168   2                              {
 169   3                                      ComOutChar(6);
 170   3                              }
 171   2                      if ((IRCode[1] == 0x55) && (IRCode[2] == 0x2B)) //音量控制-
 172   2                              {
 173   3                                      ComOutChar(7);
 174   3                              }
 175   2                      ES = 1; //打开串口中断
 176   2                      EX0 = 1; //打开
 177   2              } 
 178   1      }
 179          
C51 COMPILER V8.08   WDJ                                                                   03/01/2008 06:27:14 PAGE 4   

 180          //INT0中断
 181          void INT0Fun(void) interrupt 0 using 2
 182          {
 183   1              ES = 0; //串口中断关闭
 184   1        EX0 = 0; //外部中断0关闭
 185   1        ET0 = 1; //定时器0中断打开
 186   1        TH0=0xFD;
 187   1        TL0=0x1E; //设定时值为800us
 188   1        
 189   1              for (IRCON=0; IRCON<3; IRCON++)
 190   1                      IRCode[IRCON] = 0;
 191   1              IRCON = 0;
 192   1              IRCON2 = 0; //计数清零
 193   1      
 194   1              TR0 = 1;//开始计数
 195   1      }
 196          
 197          //根据全局变量输出相应的控制信号
 198          void CSToOut(void)
 199          {
 200   1              P3_3 = 0;
 201   1              P3_4 = 0;
 202   1              P3_5 = 0;
 203   1              P3_7 = 0; //用P3=0则烧到片上无法运行,原因不明,可能串口P3_0,P3_1有关
 204   1              switch(CS)
 205   1                      {
 206   2                              case 0:
 207   2                                      P1 = 255; //P1口全为高电平,0-3通过反相为低不选任何音源,4-7为高用于读取按键
 208   2                                      ComOutChar(5); //发0x05到PC
 209   2                                      break;
 210   2                              case 1:
 211   2                                      P1_4 = 0; //为0反相后高电平选指定的音源
 212   2                                      P3_3 = 1;
 213   2                                      ComOutChar(1);
 214   2                                      break;
 215   2                              case 2:
 216   2                                      P1_5 = 0;
 217   2                                      P3_4 = 1;
 218   2                                      ComOutChar(2);
 219   2                                      break;
 220   2                              case 3:
 221   2                                      P1_6 = 0;
 222   2                                      P3_5 = 1;
 223   2                                      ComOutChar(3);
 224   2                                      break;
 225   2                              case 4:
 226   2                                      P1_7 = 0;
 227   2                                      P3_7 = 1;
 228   2                                      ComOutChar(4);
 229   2                                      break;
 230   2                      }
 231   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    622    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V8.08   WDJ                                                                   03/01/2008 06:27:14 PAGE 5   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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