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

📄 saa3010.lst

📁 红外解码程序特别好用51单片机与接收头的解码 液晶显示
💻 LST
字号:
C51 COMPILER V6.12  SAA3010                                                                02/11/2006 10:45:42 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SAA3010
OBJECT MODULE PLACED IN .\SAA3010.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\SAA3010.c DEBUG OBJECTEXTEND

stmt level    source

   1          #define SAA3010_GLOBALS
   2          #include <reg51.h>
   3          #include "SAA3010.h"
   4          #include "main.h"
   5          
   6          
   7          //========================================================================================================
             -===
   8          // 该函数的作用是每调用一次就在temp1-4组成的32bit长度的最低位上移入
   9          // 一个0或者1,数据由bitdata确定
  10          void SAA3010_cycle_data(unsigned char bitdata)
  11          {
  12   1      	temp4=temp4<<1;
  13   1      	if((temp3&0x80)==1) temp4=temp4|0x01;
  14   1      	else temp4=temp4&0xfe;
  15   1      
  16   1      	temp3=temp3<<1;
  17   1      	if((temp2&0x80)==1) temp3=temp3|0x01;
  18   1      	else temp3=temp3&0xfe;
  19   1      
  20   1      	temp2=temp2<<1;
  21   1      	if((temp1&0x80)==1) temp2=temp2|0x01;
  22   1      	else temp2=temp2&0xfe;
  23   1      
  24   1      	temp1=temp1<<1;
  25   1      	if(bitdata==1) temp1=temp1|0x01;
  26   1      	else temp1=temp1&0xfe;
  27   1      }
  28          
  29          //========================================================================================================
             -===
  30          // 解码出错返回1,对则返回0
  31          unsigned char SAA3010_decode(void)
  32          {
  33   1      //--------------------------------------------------------------------------------------------------------
             ----
  34   1      	unsigned char count=0;
  35   1      
  36   1      	TR1=1;                                 // 启动计时
  37   1      	while(1)
  38   1      	{
  39   2      		while(ir_receive==0);                  // 等待电平变高,不需要超时监测
  40   2      		TR1=0;                                 // 高电平(对发射电路而言)测试结束		
  41   2      		high_level_time=TH1*256+TL1;           // 记录高电平的数据
  42   2      //--------------------------------------------------------------------------------------------------------
             ----
  43   2      		TH1=0;	TL1=0; TR1=1;                  // 启动对低电平的测试
  44   2      //--------------------------------------------------------------------------------------------------------
             ----
  45   2      // 处理低电平		
  46   2      		if((high_level_time<750)||(high_level_time>1800)) return 1;    // 不是合格的电平
  47   2      		if((high_level_time>750)&&(high_level_time<1000)){SAA3010_cycle_data(0);count+=1;} // 移入一个0
  48   2      		if((high_level_time>1500)&&(high_level_time<1800)) {SAA3010_cycle_data(0);SAA3010_cycle_data(0);count+=2
             -;} // 移入两个0
  49   2      		
C51 COMPILER V6.12  SAA3010                                                                02/11/2006 10:45:42 PAGE 2   

  50   2      		while(ir_receive==1)                   // 等待电平变低
  51   2      		{
  52   3      			if(TH1>0x08) break;                // 高电平超时,正常情况下是测试结束,异常时则是出错
  53   3      		}
  54   2        	    
  55   2      		TR1=0;                                 // 低电平(对发射电路而言)测试结束
  56   2      		if(TH1>0x08) {break;}
  57   2      		low_level_time=TH1*256+TL1;            // 保存低电平的数据
  58   2      
  59   2      		TH1=0;	TL1=0;	TR1=1;	 // 为增加计时的准确性,数据的处理都是在计时过程里
  60   2      //--------------------------------------------------------------------------------------------------------
             ----
  61   2      // 处理高电平
  62   2      		if((low_level_time<750)||(low_level_time>1800)) return 1;    // 不是合格的电平
  63   2      		if((low_level_time>750)&&(low_level_time<1000)) {SAA3010_cycle_data(1); count+=1;} // 移入一个0
  64   2      		if((low_level_time>1500)&&(low_level_time<1800)) {SAA3010_cycle_data(1); SAA3010_cycle_data(1);count+=2;
             -} // 移入两个0
  65   2      	}                           
  66   1      	
  67   1      	if(count==26) {SAA3010_cycle_data(1); count++;}
  68   1      	if(count!=27) return 1;
  69   1      	led=0;	
  70   1      
  71   1      // 提取按健信息
  72   1      	key_code=0;
  73   1      	if((temp1>>1)&0x01) key_code=key_code|0x01;
  74   1      	else key_code=key_code&0xfe;
  75   1      	if((temp1>>3)&0x01) key_code=key_code|0x02;
  76   1      	else key_code=key_code&0xfd;
  77   1      	if((temp1>>5)&0x01) key_code=key_code|0x04;
  78   1      	else key_code=key_code&0xfb;
  79   1      	if((temp1>>7)&0x01) key_code=key_code|0x08;
  80   1      	else key_code=key_code&0xf7;
  81   1      	if((temp2>>1)&0x01) key_code=key_code|0x10;
  82   1      	else key_code=key_code&0xef;
  83   1      	if((temp2>>3)&0x01) key_code=key_code|0x20;
  84   1      	else key_code=key_code&0xdf;
  85   1      
  86   1      // 提取系统信息
  87   1      	sys_code=0;
  88   1      	if((temp2>>5)&0x01) sys_code=sys_code|0x01;
  89   1      	else sys_code=sys_code&0xfe;
  90   1      	if((temp2>>7)&0x01) sys_code=sys_code|0x02;
  91   1      	else sys_code=sys_code&0xfd;
  92   1      
  93   1      	if((temp3>>1)&0x01) sys_code=sys_code|0x04;
  94   1      	else sys_code=sys_code&0xfb;
  95   1      	if((temp3>>3)&0x01) sys_code=sys_code|0x08;
  96   1      	else sys_code=sys_code&0xf7;
  97   1      	if((temp3>>5)&0x01) sys_code=sys_code|0x10;
  98   1      	else sys_code=sys_code&0xef;
  99   1      	if((temp3>>7)&0x01) sys_code=sys_code|0x20;
 100   1      	else sys_code=sys_code&0xdf;
 101   1      
 102   1      	data_available=1;
 103   1      	return 0;
 104   1      }
 105          //========================================================================================================
             -===


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V6.12  SAA3010                                                                02/11/2006 10:45:42 PAGE 3   

   CODE SIZE        =    599    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -