📄 main.lst
字号:
165 2 {
166 3 ComFg=0;
167 3 }
168 2 TemperatureTime++;
169 2 if(TemperatureTime>=10) //温度补偿程序定时时间---10分钟
170 2 {
171 3 TemperatureTime=0;
172 3 TemperatureTimeFg=1;
173 3 }
174 2 DataProtectTime++;
175 2 if(DataProtectTime>=60) //数据保护程序每一个小时运行一次
176 2 {
177 3 DataProtectTime=0;
178 3 DataProtectFg=1;
C51 COMPILER V7.10 MAIN 02/03/2005 10:45:40 PAGE 4
179 3 }
180 2 }
181 1 TH1=0X00;
182 1 TL1=0X00;
183 1 ET1=1;
184 1 }
185 //串口中断-红外接收--*/
186 void INT_SERIAL(void) interrupt 4
187 {
188 1 unsigned char i,j,k,l;
189 1 ES=0;
190 1 j=0;
191 1 k=0;
192 1 ComEn=1;
193 1 InfraredSt=1;
194 1 l=SBUF;
195 1 //数据做偶校验
196 1 for(i=0;i<8;i++)
197 1 {
198 2 if(l & 0x80)
199 2 { //bytedata和0x80作AND逻辑运算等于0x80
200 3 j++;
201 3 if(j==2)
202 3 {
203 4 j=0;
204 4 } //即表示位7等于1则条件成立
205 3 }
206 2 l <<=1;
207 2 } //禁止串口中断
208 1 if(j==0)
209 1 {
210 2 if(RB8)
211 2 {
212 3 k=0;
213 3 }
214 2 else
215 2 {
216 3 k=1;
217 3 }
218 2 }
219 1 else
220 1 {
221 2 if(RB8)
222 2 {
223 3 k=1;
224 3 }
225 2 }
226 1 if(k)
227 1 {
228 2 if(ComEn)
229 2 {
230 3 SeriesSt=0;
231 3 if(InfraredSt)
232 3 {
233 4 if(InfraredBufDptr<60)
234 4 {
235 5 if(InfraredBufDptr==0) //数据缓冲区地址指针是否为零
236 5 {
237 6 if(SBUF==0x68) //缓冲区的第一个数据是否等于0x68*/
238 6 {
239 7 ComDataBuf[0]=SBUF; //数据保存到缓冲区*/
240 7 InfraredBufDptr++; //缓冲区地址累加*/
C51 COMPILER V7.10 MAIN 02/03/2005 10:45:40 PAGE 5
241 7 }
242 6 else
243 6 {
244 7 InfraredBufDptr=0;
245 7 }
246 6 }
247 5 else
248 5 {
249 6 ComDataBuf[InfraredBufDptr]=SBUF; //数据保存到缓冲区*/
250 6 InfraredBufDptr++; //缓冲区地址累加*/
251 6 }
252 5
253 5 }
254 4 else
255 4 {
256 5 InfraredBufDptr=0;
257 5 }
258 4 if(ComDataBuf[ComDataBuf[9]+11]==0x16)
259 4 {
260 5 InfraredBufDptr=0;
261 5 InfraredFg=1;//红外占用数据通道有效
262 5 ComBit=1;
263 5 }
264 4 else
265 4 {
266 5 InfraredFg=0;//红外占用数据通道失效标志
267 5 }
268 4 }
269 3 }
270 2 else
271 2 {
272 3 ComEn=1;
273 3 InfraredSt=1;
274 3 }
275 2 }
276 1 RI=0;
277 1 ES=1; //接收标志位清零*
278 1 }
279 void INT_KBI(void) interrupt 7 //键盘中断处理程序*/
280 {
281 1 EKBI=0;
282 1 KBCON=0;
283 1 if(~P0&0x30)
284 1 {
285 2 LowPowerFg=1;
286 2 }
287 1 else
288 1 { //清楚键盘中断标志位
289 2 KeyTemp=~P0&0x30; //提取当前中断数值---对应键盘;
290 2 switch(KeyTemp) //判断正向还是反向,以及脉冲是否到来/
291 2 {
292 3 case 0x10 :
293 3 KBMASK=KBMASK&0xef; //允许P0.1键盘产生中断,禁止P0.0键盘中断
294 3 break;
295 3 case 0x20 :
296 3 KBMASK=KBMASK&0xdf; //允许P0.0键盘产生中断,禁止P0.1键盘中断
297 3 break;
298 3 case 0x30 :
299 3 KBMASK=KBMASK&0xcf; //禁止键盘中断
300 3 break;
301 3 }
302 2 PulseParseFg=1;
C51 COMPILER V7.10 MAIN 02/03/2005 10:45:40 PAGE 6
303 2 }
304 1 }
305 void CMP_ISR() interrupt 8
306 {
307 1 unsigned char data temp,RING,LED;
308 1 EA=0; //关中断
309 1 temp=CMP2&0x02; //判断CMP1.1
310 1 if(temp==0x02) //如果CMP1.1为1(正向输入端大于反向输入端)
311 1 {
312 2 RING=~RING;
313 2 }
314 1 else if(temp==0x00) //如果CMP1.1为0
315 1 {
316 2 LED=~LED;
317 2 }
318 1 CMP2&=0xFE; //清0比较器中断标志位
319 1 EA=1; //开中断
320 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 691 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -