📄 saa3010.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 + -