📄 ir.lst
字号:
C51 COMPILER V8.02 IR 04/29/2007 12:10:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN IR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IR.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*--------------------------------------------------------------------------------
2 遥控器处理程序
3 算法:测两个下降沿的的时间,作判断 0? 1?,遇到引导码,计数清0
4
5 ---------------------------------------------------------------------------------*/
6
7 #include<reg51.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10 #define ulong unsigned long
11
12 extern show(uchar showdata);
13
14 volatile ulong IRcode=0x00000000; //32位的键代码
15
16 volatile uint customcode=0x0000; //16位用户码
17 volatile uint time_us=0x0000; //两个下降沿之间的时间
18
19 volatile uchar timeH,timeL; //保存TH1 TL的值
20
21 uchar Lcustomcode=0x00; //低8用户码
22 uchar Hcustomcode=0x00; //高8
23 uchar datacode=0x00; //8位键数据码
24 uchar Rdatacode=0x00; //8位键数据反码
25 uchar T1overflow=0x00; //T1溢出次数 ??????
26
27 sbit IR=P3^2; //??
28 sbit power=P1^7; //电源开关
29 bit NewIRcode=0; //指示当处理完了32位码后,就有了新的遥控码
30 bit DataRight=0; //为1时读取数据正确
31
32
33 //-----------------------------delay()-------------------------
34 void delay()
35 {
36 1 uchar i,j,k;
37 1 for(i=200;i>0;i--)
38 1 for(j=200;j>0;j--)
39 1 for(k=22;k>0;k--) ;
40 1 }
41
42 void delay2()
43 {
44 1 uchar i,j,k;
45 1 for(i=200;i>0;i--)
46 1 for(j=200;j>0;j--)
47 1 for(k=13;k>0;k--);
48 1 }
49 //------------------------------------------------------------------------------
50 void init()
51 {
52 1
53 1
54 1 TMOD=0x11; //定时器0,工作方式1 ; 定时器1,工作方式1
55 1 TCON=0x01; //外中断0下降沿触发,(包括TR1=0,TR0=0)
C51 COMPILER V8.02 IR 04/29/2007 12:10:57 PAGE 2
56 1 TH0=0x3c; //初始化定时器0,定时50ms
57 1 TL0=0xb0;
58 1 TH1=0x00; //初始化定时器1
59 1 TL1=0x00;
60 1
61 1 EA=1; //开全中断
62 1 ET0=1; //开放T0中断
63 1 ET1=1; //开放T1中断
64 1 EX0=1; //开放INT0
65 1 IP=0x01; //?????
66 1 }
67
68 //-------------------------------------interrupt0-------------------------------------
69 void IR_ISR() interrupt 0 using 1 //遥控器中断处理函数
70 {
71 1 static uchar cn=0;
72 1
73 1 TR1=0;
74 1 timeH=TH1;
75 1 timeL=TL1;
76 1 TH1=0;
77 1 TL1=0;
78 1 TR1=1;
79 1
80 1 time_us=(unsigned int)timeH;
81 1 time_us=time_us<<8;
82 1 time_us=time_us|timeL;
83 1
84 1 if(time_us>13300&&time_us<13700) {cn=1;IRcode=0;} //遇到引导码,就把cn清0,IRcode清0
85 1
86 1 if(cn<34)
87 1 {
88 2 if(time_us>1000&&time_us<1300) //0
89 2 {IRcode=IRcode|0x00000000; if(cn<33) IRcode=IRcode>>1;}
90 2
91 2 else if(time_us>2000&&time_us<2450) //1
92 2 {IRcode=IRcode|0x80000000;if(cn<33) IRcode=IRcode>>1;}
93 2 }
94 1
95 1 else if(time_us>11000&&time_us<11500) {IRcode=IRcode;}; //遇到重复码
96 1
97 1 cn++;
98 1
99 1 if(cn==34) {NewIRcode=1;TR1=0;} //读完32位码,则有新码产生
100 1
101 1 }
102
103 //--------------------------------------timer_ISR------------------------------
104 void Timer0_ISR() interrupt 1 using 2 //定时器0中断函数
105 {
106 1 //TR1=0;
107 1 //TR1=1;
108 1 }
109 void Timer1_ISR() interrupt 3 using 3 //定时器1中断函数
110 {
111 1 T1overflow++; //还要记得清0????
112 1 //???++;放比如音量,切换时间等的递增量?????????????????????
113 1 //TH1=0xff; //这三句可以不要,定时器可以不断的启动计数
114 1 //TL1=0xff;
115 1 //TR1=0; //???
116 1 }
117
C51 COMPILER V8.02 IR 04/29/2007 12:10:57 PAGE 3
118 //------------------------------------main()----------------------------------------------
119 void main()
120 {
121 1
122 1 init();
123 1 power=1;
124 1
125 1
126 1 while(1)
127 1 {
128 2
129 2 if(NewIRcode==1) //如果有新的遥控码就读
130 2 {
131 3
132 3 customcode=IRcode; //取红外码中的用户码
133 3 //Lcustomcode=IRcode; //取低8位用户码
134 3 //Hcustomcode=IRcode>>8; //取高8位用户码
135 3 datacode=IRcode>>16; //取数据码
136 3 Rdatacode=IRcode>>24; //取数据码的反码
137 3
138 3 if((customcode!=0xFF80)&&(~Rdatacode!=datacode)) {DataRight=0;IRcode=0;} //校验用户码,反码
139 3
140 3 else DataRight=1;
141 3
142 3 NewIRcode=0; //读完之后清零,表示新码已读
143 3 }
144 2
145 2 if(DataRight==1) {show(datacode);}
146 2
147 2 }
148 1
149 1 }
150
151
152
153
154
155
156
157
158
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 394 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -