📄 decode.lst
字号:
C51 COMPILER V8.02 DECODE 05/06/2008 23:14:41 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DECODE
OBJECT MODULE PLACED IN decode.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE decode.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*12MHz晶振*/
2 #include "at89x52.h"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7
8 sbit beep=P3^7;
9 sbit inf=P3^3;
10 sbit led1=P1^0;
11 sbit led2=P1^1;
12 sbit led3=P1^2;
13 sbit led4=P1^3;
14 sbit led5=P1^4;
15 sbit led6=P1^5;
16 sbit led7=P1^6;
17 sbit led8=P1^7;
18 sbit led9=P0^0;
19 unsigned char rec=0;
20
21
22
23 uchar key_code=0;/*key_code:遥控*/
24 uint buf_key_code=0;/*键值暂存对应功能看主函数*/
25 uchar key_bit_count=0;/*键编码脉冲计数*/
26 uint count_T=0,buf_CT=0;/*count_T:定时器中断次数计数,buf_CT用来截获某一时间的count_T值以供判断*/
27 uchar common_code_count=0;/*前导码脉冲计数*/
28 uchar inf_status=0;/*inf_status:脉冲接收器所处的状态,0:无信号,1:前导码接收区,2:数据编码接收区*/
29 uchar startkey=0; //the number of startkey;
30 uchar codedata[12];
31 uchar n;
32 uchar frag=1;
33
34
35 void UART_START(void)
36 {
37 1
38 1 EA=0;
39 1 ES=1;
40 1 ET1=0;
41 1 SCON=0X50;
42 1 TMOD|=0X20;
43 1 PCON=0X80;
44 1 TL1=0xf3;
45 1 TH1=0Xf3;
46 1 TR1=1;
47 1 EA=1;
48 1
49 1 }
50
51
52 void uart_int(void) interrupt SIO_VECTOR
53 {
54 1 RI=0;
55 1 rec=SBUF;
C51 COMPILER V8.02 DECODE 05/06/2008 23:14:41 PAGE 2
56 1 }
57
58
59 void Putchar(a)
60 {
61 1 SBUF=a;
62 1 while(!TI);
63 1 TI=0;
64 1 }
65
66
67 void delay10us(uint t)
68 {
69 1 while(t--);
70 1 }
71
72
73 void delayms(uint t)
74 {
75 1 uint i;
76 1 uchar j;
77 1 for(i=0;i<t;i++)
78 1 for(j=125;j>0;j--);
79 1 }
80
81
82
83 void main()
84 {
85 1
86 1 EA=1; //开全局中断
87 1 ET0=1; //开定时器0中断
88 1 TMOD=0x02;//T0设置为8位自动装载模式
89 1 TH0=0xCE; //自动装载值为202,中断间隔为50us
90 1 TL0=0xCE; //初值为202
91 1 IT1=1; //INT1为下降沿触发
92 1 EX1=1; //开外部中断
93 1 // TR0=1; //启动定时器计数
94 1 UART_START();
95 1 count_T=0;
96 1
97 1 while(1)
98 1 {
99 2
100 2 }
101 1 }
102
103 void Time0(void) interrupt 1
104 {
105 1 count_T++;//周期累加
106 1 //如果外部中断处于无信号区,则滤除前导宽脉冲中间的跳变毛刺
107 1 /* if(inf_status==0&&count_T<160)
108 1 {
109 1 EX1=0;
110 1 }
111 1 //如果外部中断处于信号区,则滤除宽脉冲中间的跳变毛刺
112 1 else if(inf_status==1&&count_T<12)
113 1 {
114 1 EX1=0;
115 1 }
116 1 //渡过上升沿后重新开放外部中断
117 1 else
C51 COMPILER V8.02 DECODE 05/06/2008 23:14:41 PAGE 3
118 1 {
119 1 EX1=1;
120 1 }*/
121 1 //超过25ms,则锁定count_T值,等待下一次信号脉冲下降沿来解开
122 1 if(count_T>1000)
123 1 {
124 2 inf_status=0;
125 2 count_T=0;
126 2 }
127 1 }
128
129 /***************************************************************
130 外部中断1,用于捕获红外脉冲信号
131 ****************************************************************/
132 void int_1(void) interrupt 2
133 { unsigned char i;
134 1
135 1 // led1=~led1;
136 1 buf_CT=count_T;
137 1 TR0=1;
138 1
139 1 count_T=0;
140 1
141 1
142 1
143 1
144 1 if((buf_CT>15)&&(buf_CT<120))//若收到的信号合法,则再进行以下的信号分析
145 1 {
146 2
147 2 if(inf_status==0)//若当前信号接收系统处于空闲状态,则标志进入前导码接收区
148 2 {
149 3
150 3
151 3 if((buf_CT>60)&&(buf_CT<120))
152 3 {
153 4
154 4
155 4
156 4 startkey++;
157 4
158 4
159 4 if(startkey>=3)
160 4 {// led3=0 ;
161 5 inf_status=1;//标志进入数据接收区
162 5 buf_key_code=0;
163 5 key_bit_count=0;
164 5 buf_CT=0;
165 5 startkey=0;
166 5 }
167 4
168 4
169 4 if( ( (buf_CT>15)&&(buf_CT<25) ) || ( (buf_CT>32)&&(buf_CT<45) ) )
170 4 startkey=0;
171 4
172 4 }
173 3 }
174 2
175 2
176 2
177 2 else if(inf_status==1)//数据接收区
178 2 {
179 3 if((buf_CT>70)&&(buf_CT<90))
C51 COMPILER V8.02 DECODE 05/06/2008 23:14:41 PAGE 4
180 3 {
181 4 key_bit_count=0;
182 4 }
183 3
184 3
185 3 if((buf_CT>15)&&(buf_CT<25))
186 3 {// led3=0;
187 4 codedata[key_bit_count]=0;
188 4 key_bit_count++;//数据脉冲数累加,一共有8
189 4
190 4
191 4
192 4 }
193 3
194 3 else if((buf_CT>32)&&(buf_CT<45))
195 3 {
196 4 codedata[key_bit_count]=1;
197 4 key_bit_count++;//数据脉冲数累加,一共有8
198 4
199 4
200 4 }
201 3
202 3
203 3
204 3 if(key_bit_count==12&&codedata[0]==0&&codedata[1]==1&&codedata[2]==0&&codedata[3]==1)
205 3 {
206 4 for(i=4;i<12;i++)
207 4 { buf_key_code>>=1;
208 5 buf_key_code=buf_key_code | (codedata[i]<<7);
209 5 }
210 4
211 4 led9=0;
212 4 P1=buf_key_code;
213 4 Putchar(buf_key_code);
214 4
215 4
216 4 inf_status=0;//标志接收系统返回空闲状态
217 4 key_bit_count=0;
218 4 key_code=buf_key_code;
219 4
220 4 buf_key_code=0;
221 4 TR0=0;
222 4 }
223 3
224 3
225 3
226 3 /* else if(inf_status==1)//数据接收区
227 3 {
228 3
229 3 if((buf_CT>15)&&(buf_CT<25))//窄脉冲接收
230 3 {
231 3
232 3
233 3 buf_key_code>>=1;//接收0
234 3 key_bit_count++;
235 3
236 3
237 3 }
238 3 else if((buf_CT>32)&&(buf_CT<45))//宽脉冲接收
239 3 {
240 3 buf_key_code>>=1;
241 3 buf_key_code|=0x80;//接收1
C51 COMPILER V8.02 DECODE 05/06/2008 23:14:41 PAGE 5
242 3 key_bit_count++;//数据脉冲数累加,一共有8个
243 3
244 3 }
245 3
246 3 if(key_bit_count>7)//若收完8位个数据脉冲,则进行以下的处理
247 3 {
248 3
249 3 P1=buf_key_code;
250 3 led9=0;
251 3 inf_status=0;//标志接收系统返回空闲状态
252 3 key_bit_count=0;
253 3 key_code=buf_key_code;
254 3
255 3 buf_key_code=0;
256 3 TR0=0;
257 3
258 3
259 3 } */
260 3 }
261 2 buf_CT=0;
262 2 }
263 1 EA=1;
264 1
265 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 513 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 ----
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 + -