📄 ir.lst
字号:
C51 COMPILER V7.06 IR 10/24/2008 11:56:07 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN ir.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ir.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #define XBYTE ((char *) 0x20000L)
3 sbit IR=P3^2;
4 unsigned char num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
5 unsigned char R_data[32];
6 unsigned char leddata[2];
7 unsigned char flag;
8 //************************************************************************************************
9 //延时4ms
10 //************************************************************************************************
11 void delay4ms()
12 {
13 1 int time=3686;
14 1 while(--time);//延时2*time个机器周期
15 1 }
16
17
18 //************************************************************************************************
19 //延时600us
20 //************************************************************************************************
21 void delay600us()
22 {
23 1 int time=553;
24 1 while(--time);//延时2*time个机器周期
25 1 }
26
27
28 //************************************************************************************************
29 //延时500us
30 //************************************************************************************************
31 void delay500us()
32 {
33 1 int time=460;
34 1 while(--time);//延时2*time个机器周期
35 1 }
36
37 //************************************************************************************************
38 //延时2ms
39 //************************************************************************************************
40 void delay2ms()
41 {
42 1 int time=1843;
43 1 while(--time);//延时2*time个机器周期
44 1 }
45 //************************************************************************************************
46 //引导码
47 //************************************************************************************************
48 void start_code()
49 {
50 1
51 1 if(IR==1)//现在是接收别处发送过来的数据,不是模拟时钟脉冲
52 1 {
53 2 while(IR);//高电平就一直空循环,等待低电平到来
54 2 delay4ms();//低电平到来就延时4ms(要小于4.5ms)
55 2 while(IR==0);//在等待高电平的到来
C51 COMPILER V7.06 IR 10/24/2008 11:56:07 PAGE 2
56 2 delay4ms();//高电平到来再延时4ms
57 2 }
58 1 }
59
60
61
62 //***********************************************************************************************
63 //读数据
64 //***********************************************************************************************
65 void read_data(void)
66 {
67 1 unsigned char count,zancun;
68 1 while(IR);//高电平,等待低电平
69 1 delay500us();//可以延时,也可以省略此延时
70 1
71 1 // if()
72 1 // for(count=0;count<32;count++)
73 1 // {
74 1 while(IR==0);//等待高电平
75 1 delay600us();//超过560us再判断是高是低,即判断每个数据位高电平的宽度
76 1 if(IR)
77 1 {
78 2 zancun=R_data[0];
79 2 R_data[0]=1;
80 2 while(IR);//等待低电平
81 2 while(IR==0);//在等待高电平的到来
82 2 delay2ms();//延时超过数据1的高电平时间,低于1周期的时间,若还是1就为连发码
83 2 if(IR==1)
84 2 {
85 3 R_data[0]=zancun;
86 3 }
87 2 else
88 2 for(count=1;count<32;count++)
89 2 {
90 3 while(IR==0);//等待高电平
91 3 delay600us();
92 3 if(IR)
93 3 {
94 4 R_data[count]=1;
95 4 while(IR);
96 4 }
97 3 else
98 3 R_data[count]=0;
99 3 }
100 2 }
101 1 else
102 1 {
103 2 for(count=0;count<32;count++)
104 2 {
105 3 while(IR==0);//等待高电平
106 3 delay600us();
107 3 if(IR)
108 3 {
109 4 R_data[count]=1;
110 4 while(IR);
111 4 }
112 3 else
113 3 R_data[count]=0;
114 3 }
115 2 }
116 1 // }
117 1 }
C51 COMPILER V7.06 IR 10/24/2008 11:56:07 PAGE 3
118
119
120
121 //**********************************************************************************************
122 //检验连发码
123 /**********************************************************************************************
124 unsigned char void con_code(void)
125 {
126 unsigned char tag;
127 // zancun=R_data[0];
128 // R_data[0]=1;
129 while(IR==0);//在等待高电平的到来
130 delay2ms;//延时超过数据1的高电平时间,低于1周期的时间,若还是1就为连发码
131 if(IR==1)
132 tag=1;
133 else
134 tag=0;
135 return(teg);
136 }
137 */
138
139
140 //**********************************************************************************************
141 //显示
142 //**********************************************************************************************
143 void display()
144 {
145 1 unsigned char i;
146 1 for(i = 0; i < 2 ; i++)
147 1 {
148 2 XBYTE[0xc000] = ~(0x01<<i); //选择数码管
149 2 XBYTE[0xb000] = num[leddata[i]]; //显示数字
150 2 delay4ms();
151 2 }
152 1 }
153
154
155
156 //**********************************************************************************************
157 //数据转换
158 //**********************************************************************************************
159 void trans()
160 {
161 1 unsigned char i,tmp=0;
162 1 for(i=0;i<8;i++)
163 1 {
164 2 tmp=(R_data[16+i]<<i)|tmp;//低位在前
165 2 }
166 1 leddata[0]=(tmp&0xf0)>>4;
167 1 leddata[1]=tmp&0x0f;
168 1 }
169
170
171
172 //**********************************************************************************************
173 //main函数
174 //**********************************************************************************************
175 void main()
176 {
177 1 // unsigned char i;
178 1 XBYTE[0xa000] =0;
179 1 while(1)//程序一直在循环,要判断连发码
C51 COMPILER V7.06 IR 10/24/2008 11:56:07 PAGE 4
180 1 {
181 2 start_code();
182 2 read_data();
183 2 trans();
184 2 display();
185 2 }
186 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 325 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 46 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -