📄 main.lst
字号:
C51 COMPILER V9.00 MAIN 11/13/2010 14:58:42 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C V4\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF MAIN.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 /**********************************************
2 /程序说明:nRF24LE1超声波测距,串口显示测量数据
3 ***********************************************/
4 #include "reg24le1.h"
5 #include <intrins.h>
6 /***********************************************
7 /
8 /宏定义部分
9 /
10 ***********************************************/
11 #define Enableint() do{EA=1;}while(0)
12 #define Disableint() do{EA=0;}while(0)
13 #define true 0x01
14 #define false 0x00
15 #define RX P00
16 #define TX P01
17 #define LED P02
18 /***********************************************
19 /类型重新定义
20 ***********************************************/
21 typedef unsigned char uchar;
22 typedef unsigned int uint;
23 /***********************************************
24 /定义标志位
25 ***********************************************/
26 bit flag =0; /*溢出标志 */
27 /********************************************
28 /
29 /延时函数
30 /
31 *********************************************/
32 void delayms(unsigned int ms)
33 {
34 1 unsigned char i=100,j;
35 1 for(;ms;ms--)
36 1 {
37 2 while(--i)
38 2 {
39 3 j=10;
40 3 while(--j);
41 3 }
42 2 }
43 1 }
44 /*********************************************
45 /
46 /nRF24LE1之I/O口初始化函数
47 /
48 **********************************************/
49 void IO_init(void )
50 {
51 1 P0DIR|=BIT_0; /*设置RX为输入*/
52 1 P0DIR&=(~(BIT_1)); /*设置TX为输出*/
53 1 P0DIR&=(~(BIT_2));
54 1 RX=0;
C51 COMPILER V9.00 MAIN 11/13/2010 14:58:42 PAGE 2
55 1 TX=0;
56 1 }
57 /*********************************************
58 /
59 /LedDebug函数通过调用显示程序状态
60 /
61 **********************************************/
62 void LedDebug(void)
63 {
64 1 LED=!LED;
65 1 delayms(200);
66 1 }
67 /*********************************************
68 /
69 /delayus()延时微秒
70 /
71 *********************************************/
72 void delayus(uint us)
73 {
74 1 us-=5;
75 1 while(us--)
76 1 {
77 2 _nop_();
78 2 }
79 1 }
80 /*********************************************
81 /
82 /nRF24LE1工作时钟的初始化
83 /
84 *********************************************/
85 void ClkSet(void)
86 {
87 1 CLKCTRL=0X28;
88 1 CLKLFCTRL = 0x01;
89 1 }
90 /*********************************************
91 /
92 /启动超声波模块
93 /
94 *********************************************/
95 void StartModule()
96 {
97 1 TX=1;
98 1 delayus(25);
99 1 TX=0;
100 1 }
101 /********************************************
102 /
103 /定时器0初始化
104 /
105 *********************************************/
106 void T0_init(void)
107 {
108 1 TMOD=0x01;
109 1 TH0=0;
110 1 TL0=0;
111 1 ET0=1; /*允许T0中断 */
112 1 TR0=0;
113 1 }
114 /*******************************************
115 /
116 /串口初始化
C51 COMPILER V9.00 MAIN 11/13/2010 14:58:42 PAGE 3
117 /
118 *******************************************/
119 void Uart_init(uint baud)
120 {
121 1 P0DIR &= 0xF7; /*设置P0.3 (TxD)为输出 */
122 1 P0DIR |= 0x10; /*设置P0.4 (RxD)为输入 */
123 1 P0|=0x18;
124 1 S0CON = 0x50;
125 1 PCON |= 0x80; /* 波特率倍增 */
126 1 WDCON |= 0x80; /* 选定内部波特率发生器*/
127 1 if(baud==38400)
128 1 {
129 2 S0RELL = 0xF3; /* 波特率38400 */
130 2 S0RELH = 0x03;
131 2 }
132 1 else if(baud==9600)
133 1 {
134 2 S0RELL = 0xCC; /* 波特率9600 */
135 2 S0RELH = 0x03;
136 2 }
137 1 }
138 /*********************************************
139 /
140 /putch()函数通过串口输出一个字符
141 /
142 *********************************************/
143 void putch(char ch)
144 {
145 1 S0BUF=ch;
146 1 while(!TI0);
147 1 TI0=0;
148 1 }
149 /*********************************************
150 /
151 /Puts()串口发送一个字符串
152 /
153 **********************************************/
154 void Puts(char* str)
155 {
156 1 while(*str!='\0')
157 1 {
158 2 putch(*str++);
159 2 }
160 1 }
161 /********************************************
162 /
163 /nextline()换行函数
164 /
165 *********************************************/
166 void nextline(void)
167 {
168 1 putch('\n');
169 1 }
170 /**********************************************
171 /
172 /计算距离
173 /
174 ***********************************************/
175 void Conut(void)
176 {
177 1 static uint time=0,TMP;
178 1 static float S;
C51 COMPILER V9.00 MAIN 11/13/2010 14:58:42 PAGE 4
179 1 time=TH0*256+TL0;
180 1 TH0=0;
181 1 TL0=0;
182 1 S=(time*1.87)/100; /*算出来是CM */
183 1 if(flag==1) /*超出测量 */
184 1 {
185 2 flag=0;
186 2 Puts("can,t get the distance!!!");
187 2 nextline();
188 2 }
189 1 else
190 1 {
191 2 Puts("distance S= ");
192 2 TMP=S;
193 2 if(TMP>=100&&TMP<1000)
194 2 {
195 3 putch((TMP/100)+'0');
196 3 putch((TMP%100)/10+'0');
197 3 putch((TMP%10)+'0');
198 3 }
199 2 else if(TMP>=10)
200 2 {
201 3 putch((TMP/10)+'0');
202 3 putch((TMP%10)+'0');
203 3 }
204 2 else if(TMP<10)
205 2 {
206 3 putch(TMP+'0');
207 3 }
208 2 putch('.');
209 2 TMP=((int)(S*100))%100;
210 2 putch((TMP/10)+'0');
211 2 putch((TMP%10)+'0');
212 2 Puts(" cm");
213 2 nextline();
214 2 }
215 1 }
216 /*********************************************
217 /
218 /定时器中断0服务函数
219 /
220 *********************************************/
221 void TIMER0ISR0() interrupt INTERRUPT_TF0
222 {
223 1 flag=1;
224 1 }
225 /*********************************************
226 /
227 /主函数部分
228 /
229 **********************************************/
230 void main(void)
231 {
232 1 static uint timeout=0;
233 1 Disableint();
234 1 ClkSet(); /*nRF24LE1时钟初始化 */
235 1 IO_init(); /*I/O口初始化 */
236 1 T0_init(); /*定时器0初始化 */
237 1 Uart_init(38400);/*波特率初始化 */
238 1 Puts("超声波测距测试程序!");
239 1 nextline();
240 1 Enableint();
C51 COMPILER V9.00 MAIN 11/13/2010 14:58:42 PAGE 5
241 1 while(1)
242 1 {
243 2 ST : StartModule();/*启动超声波测距 */
244 2 while(0==RX) /*当RX为零时等待 */
245 2 {
246 3 delayus(5);
247 3 timeout++;
248 3 if(timeout==3000)
249 3 {
250 4 timeout=0;
251 4 goto ST;
252 4 }
253 3 }
254 2 timeout=0;
255 2 if(RX==1)
256 2 TR0=1; /*开启计数 */
257 2 while(1==RX); /*当RX为1计数并等待 */
258 2 if(RX==0)
259 2 TR0=0; /*关闭计数 */
260 2 Conut(); /*计算距离,同时串口显示 */
261 2 LedDebug(); /*LED程序状态显示 */
262 2 }
263 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 597 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 3
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -