📄 p87lpc762+nb9148红外线遥控.lst
字号:
123 4 case 10: //检验重复发送的第11位数据
124 4 if(RedBit!=RedData10) goto RClear;
125 4 break;
126 4 case 11: //检验重复发送的第12位数据
127 4 if(RedBit!=RedData11) goto RClear;
128 4 RedMsg=1; //接受到经过检验正确的编码后置位遥控消息
129 4 RedBit=0; //复位接收位
130 4 RSend=0; //复位重新发送标志
131 4 RedRead=0; //复位接收过程标志
132 4 RedCon=0; //复位载波计数
133 4 return;
134 4 default: //重复发送的数据多于12位时判断为错误
135 4 goto RClear;
136 4 }
137 3 }
138 2 else
139 2 {switch(RedDataL&0xF)
140 3 {case 0: //保存首次发送的第1位数据
141 4 RedData0=RedBit;
142 4 break;
143 4 case 1: //保存首次发送的第2位数据
144 4 RedData1=RedBit;
145 4 break;
146 4 case 2: //保存首次发送的第3位数据
147 4 RedData2=RedBit;
148 4 break;
149 4 case 3: //保存首次发送的第4位数据
150 4 RedData3=RedBit;
151 4 break;
152 4 case 4: //保存首次发送的第5位数据
153 4 RedData4=RedBit;
154 4 break;
155 4 case 5: //保存首次发送的第6位数据
156 4 RedData5=RedBit;
157 4 break;
158 4 case 6: //保存首次发送的第7位数据
159 4 RedData6=RedBit;
160 4 break;
161 4 case 7: //保存首次发送的第8位数据
162 4 RedData7=RedBit;
163 4 break;
164 4 case 8: //保存首次发送的第9位数据
165 4 RedData8=RedBit;
166 4 break;
167 4 case 9: //保存首次发送的第10位数据
168 4 RedData9=RedBit;
169 4 break;
170 4 case 10: //保存首次发送的第11位数据
171 4 RedData10=RedBit;
172 4 break;
173 4 case 11: //保存首次发送的第12位数据
174 4 RedData11=RedBit;
175 4 break;
176 4 default: //首次发送的数据多于12位时判断为错误
177 4 goto RClear;
178 4 }
179 3 }
C51 COMPILER V7.09 P87LPC762_NB9148_焱_线襙控 11/13/2006 09:35:10 PAGE 4
180 2 RedDataL++; //位位移加1
181 2 RedBit=0; //复位接收位
182 2 RedRead=0; //复位接收过程标志
183 2 RedCon=0; //复位载波计数
184 2 nTimer=423; //用定时140a 检测同步信号208a
185 2 TF1=0; //复位定时器T01益出标志
186 2 ET1=1; //启动定时器
187 2 }
188 1 else if(RSend) //在位接收没有结束时发生定时中断需要复位接收信息(同步)
189 1 {RClear:
190 2 RedDataL=0; //复位红外数据
191 2 RedDataH=0; //复位红外数据
192 2 RedBit=0; //复位接收位
193 2 RedRead=0; //复位接收过程标志
194 2 RSend=0; //复位重新发送标志
195 2 RedCon=0; //复位载波计数
196 2 ET1=0; //关闭T01定时
197 2 }
198 1 }
199
200 void main(void)
201 {
202 1 IEN0=0x14; //只打开INT1中断
203 1 WDRST=0x1E; //看门狗清0
204 1 WDRST=0xE1;
205 1 WDCON=0x12; //40-90ms看门狗(>最大延时37ms)
206 1 TCON=0x40; //定时器1开始工作,INT1低电平触发
207 1 TMOD=0x23; //定时器0扩展成两个8位定时器T00和T01用于同步控制
208 1
209 1 if((WDCON&0x30)!=0x30) //看门狗陷阱复位时无需初始化
210 1 {Message=0; //无消息
211 2 State=0; //正常复位无任何状态
212 2 }
213 1 while(1) //消息循环
214 1 {WDRST=0x1E; //看门狗清0
215 2 WDRST=0xE1;
216 2 EX1=RedControl; //设置遥控中断INT1
217 2 if(RedMsg) //执行遥控指令
218 2 {EX1=0; //在指令没有处理完之前不能重复中断
219 3 switch(RedDataH) //这里加入红外指令的控制过程
220 3 {case 0x82: //Channel 1
221 4 break;
222 4 case 0xA0: //Channel 2
223 4 break;
224 4 }
225 3 EX1=1;
226 3 RedDataL=0; //复位红外数据
227 3 RedDataH=0; //复位红外数据
228 3 RedMsg=0; //复位红外遥控消息
229 3 }
230 2 }
231 1
232 1
233 1 }
234
235
236
237
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 607 ----
C51 COMPILER V7.09 P87LPC762_NB9148_焱_线襙控 11/13/2006 09:35:10 PAGE 5
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
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 + -