📄 infrared.lst
字号:
C51 COMPILER V7.00 INFRARED 08/19/2007 14:20:23 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE INFRARED
OBJECT MODULE PLACED IN Infrared.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Infrared.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "Infrared.h"
2 #include "Serial.h"
3 xdata uchar uSendCount1 = 0;
4 xdata uchar count = 0;
5 xdata uchar uRecvCount = 0;
6 xdata uchar KeyHead = 0;
7 xdata uchar Data0 = 0;
8 xdata uchar Data1 = 0;
9 xdata uchar rKey = 0;
10 bit bFirstGetKey = 1;
11
12 uchar GetKey(void)
13 {
14 1 if(bFirstGetKey)
15 1 {
16 2 bFirstGetKey = 0;
17 2 T2MOD &= 0xFC; /* T2OE=0;定时器2输出不允许 */
18 2 T2MOD |= 0x00; /* DCEN=1;可以设置为向上/下计数:此程序中为向上达到0xff时溢出*/
19 2 C_T2 = 0;
20 2 EXF2=0; /* reset flag 定时器2外部标志位清除*/
21 2 TCLK=0;RCLK=0; /* disable baud rate generator 不用于波特率发生器*/
22 2 TH2=0x00;
23 2 TL2=0x00;
24 2 RCAP2H=0x00;
25 2 RCAP2L=0x00;
26 2 ET2=1;
27 2 IT3 = 1; // 设置中断触发方式为下降沿触发
28 2 EX3=1; // 允许外部中断INT0
29 2 }
30 1 if(rKey)
31 1 {
32 2 uchar tKey = rKey;
33 2 rKey = 0;
34 2 return tKey;
35 2 }
36 1 return 0;
37 1 }
38
39 //下面是外部中断INT0的中断服务程序
40 void Int0IrqHandler (void) interrupt 7 {
41 1
42 1 EX3 = 0;
43 1 delay(30);
44 1 if(P4_2 == 0)
45 1 {
46 2 TH2 = 0xFF;
47 2 TL2 = 0x47;
48 2 TR2 = 1;
49 2
50 2 if(uSendCount1 == 0) count = 100;
51 2 uSendCount1++;
52 2 if(count >= 0x05&& count <= 0x18)
53 2 {
54 3 if(uRecvCount < 8)
55 3 {
C51 COMPILER V7.00 INFRARED 08/19/2007 14:20:23 PAGE 2
56 4 KeyHead >>= 1;
57 4 if(count > 0x0C)
58 4 {
59 5 KeyHead |= 0x80;
60 5 }
61 4 }else
62 3 if(uRecvCount >= 0x1A&& uRecvCount < 0x22)
63 3 {
64 4 Data0 >>= 1;
65 4 if(count > 0x0C)
66 4 {
67 5 Data0 |= 0x80;
68 5 }
69 4 }else
70 3 if(uRecvCount >= 0x22&& uRecvCount < 0x2A)
71 3 {
72 4 Data1 >>= 1;
73 4 if(count > 0x0C)
74 4 {
75 5 Data1 |= 0x80;
76 5 }
77 4 }
78 3 uRecvCount++;
79 3 }
80 2 count = 0;
81 2 }
82 1 EX3 = 1;
83 1
84 1 }
85
86 void timer2 (void) interrupt 5
87 {
88 1 TR2 = 0;
89 1 TF2 = 0;
90 1 TH2 = 0xFF;
91 1 TL2 = 0x47;
92 1 TR2 = 1;
93 1 count ++;
94 1
95 1 if((count > 200)&&(uSendCount1 > 1))
96 1 {
97 2 TR2 = 0;
98 2 uSendCount1 = 0;
99 2 uRecvCount = 0;
100 2 if(KeyHead == 0x1F&&(Data0 = ~Data1))
101 2 {
102 3 //Send(Data0);
103 3 rKey = Data0;
104 3 }
105 2 KeyHead = 0;
106 2 Data0 = 0;
107 2 Data0 = 0;
108 2 }
109 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 374 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 7 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
C51 COMPILER V7.00 INFRARED 08/19/2007 14:20:23 PAGE 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 + -