📄 text.lst
字号:
C51 COMPILER V8.08 TEXT 04/15/2008 17:37:26 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TEXT
OBJECT MODULE PLACED IN Text.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X51.h>
2
3 static bit OP; //红外发射管的亮灭
4 static unsigned int count; //延时计数器
5 static unsigned int endcount; //终止延时计数
6 static unsigned char flag; //红外发送标志
7 char iraddr1; //十六位地址的第一个字节
8 char iraddr2; //十六位地址的第二个字节
9
10 void SendIRdata(char p_irdata);
11 void delay();
12
13 void main(void)
14 {
15 1 count = 0;
16 1 flag = 0;
17 1 OP = 0;
18 1 P3_4 = 0;
19 1
20 1 EA = 1; //允许CPU中断
21 1 TMOD = 0x11; //设定时器0和1为16位模式1
22 1 ET0 = 1; //定时器0中断允许
23 1
24 1
25 1 TH0 = 0xFF;
26 1 TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
27 1 TR0 = 1;//开始计数
28 1
29 1 iraddr1=3;
30 1 iraddr2=252;
31 1
32 1
33 1 do{
34 2 delay();
35 2 SendIRdata(12);
36 2 }while(1);
37 1 }
38
39 //定时器0中断处理
40 void timeint(void) interrupt 1
41 {
42 1 TH0=0xFF;
43 1 TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
44 1 count++;
45 1
46 1 if (flag==1)
47 1 {
48 2 OP=~OP;
49 2 }
50 1 else
51 1 {
52 2 OP = 0;
53 2 }
54 1 P3_4 = OP;
55 1 }
C51 COMPILER V8.08 TEXT 04/15/2008 17:37:26 PAGE 2
56
57
58 void SendIRdata(char p_irdata)
59 {
60 1 int i;
61 1 char irdata=p_irdata;
62 1
63 1 //发送9ms的起始码
64 1 endcount=223;
65 1 flag=1;
66 1 count=0;
67 1 do{}while(count<endcount);
68 1
69 1 //发送4.5ms的结果码
70 1 endcount=117;
71 1 flag=0;
72 1 count=0;
73 1 do{}while(count<endcount);
74 1
75 1 //发送十六位地址的前八位
76 1 irdata=iraddr1;
77 1 for(i=0;i<8;i++)
78 1 {
79 2
80 2 //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
81 2 endcount=10;
82 2 flag=1;
83 2 count=0;
84 2 do{}while(count<endcount);
85 2
86 2 //停止发送红外信号(即编码中的高电平)
87 2 if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0
88 2 {
89 3 endcount=41; //1为宽的高电平
90 3 }
91 2 else
92 2 {
93 3 endcount=15; //0为窄的高电平
94 3 }
95 2 flag=0;
96 2 count=0;
97 2 do{}while(count<endcount);
98 2
99 2 irdata=irdata>>1;
100 2 }
101 1
102 1 //发送十六位地址的后八位
103 1 irdata=iraddr2;
104 1 for(i=0;i<8;i++)
105 1 {
106 2 endcount=10;
107 2 flag=1;
108 2 count=0;
109 2 do{}while(count<endcount);
110 2
111 2 if(irdata-(irdata/2)*2)
112 2 {
113 3 endcount=41;
114 3 }
115 2 else
116 2 {
117 3 endcount=15;
C51 COMPILER V8.08 TEXT 04/15/2008 17:37:26 PAGE 3
118 3 }
119 2 flag=0;
120 2 count=0;
121 2 do{}while(count<endcount);
122 2
123 2 irdata=irdata>>1;
124 2 }
125 1
126 1 //发送八位数据
127 1 irdata=p_irdata;
128 1 for(i=0;i<8;i++)
129 1 {
130 2 endcount=10;
131 2 flag=1;
132 2 count=0;
133 2 do{}while(count<endcount);
134 2
135 2 if(irdata-(irdata/2)*2)
136 2 {
137 3 endcount=41;
138 3 }
139 2 else
140 2 {
141 3 endcount=15;
142 3 }
143 2 flag=0;
144 2 count=0;
145 2 do{}while(count<endcount);
146 2
147 2 irdata=irdata>>1;
148 2 }
149 1
150 1 //发送八位数据的反码
151 1 irdata=~p_irdata;
152 1 for(i=0;i<8;i++)
153 1 {
154 2 endcount=10;
155 2 flag=1;
156 2 count=0;
157 2 do{}while(count<endcount);
158 2
159 2 if(irdata-(irdata/2)*2)
160 2 {
161 3 endcount=41;
162 3 }
163 2 else
164 2 {
165 3 endcount=15;
166 3 }
167 2 flag=0;
168 2 count=0;
169 2 do{}while(count<endcount);
170 2
171 2 irdata=irdata>>1;
172 2 }
173 1
174 1 endcount=10;
175 1 flag=1;
176 1 count=0;
177 1 do{}while(count<endcount);
178 1 flag=0;
179 1 }
C51 COMPILER V8.08 TEXT 04/15/2008 17:37:26 PAGE 4
180
181 void delay()
182 {
183 1 int i,j;
184 1 for(i=0;i<400;i++)
185 1 {
186 2 for(j=0;j<100;j++)
187 2 {
188 3 }
189 2 }
190 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 550 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -