📄 main.lst
字号:
172 1 ET0 = 1; // Enable Timer0 interrupt
173 1 }
174 /*****************************************************************************************
175 //函数名:ReadTimer()
176 //输入:要读的计时器
177 //输出:读出值
178 //功能描述:读计时器
179 /*****************************************************************************************/
C51 COMPILER V7.08 MAIN 11/07/2005 10:57:52 PAGE 4
180 unsigned ReadTimer(int8u n)
181 {
182 1 unsigned tmp;
183 1 ET0 = 0; // Disable Timer0 interrupt
184 1 tmp = timer[n]; // Clear timer[n]
185 1 ET0 = 1; // Enable Timer0 interrupt
186 1 return tmp;
187 1 }
188
189 /*****************************************************************************************
190 //函数名:SciInit()
191 //输入:无
192 //输出:无
193 //功能描述:串口初始化
194 /*****************************************************************************************/
195 void SciInit(void)
196 {
197 1 TH1 = 243; // 19200@16MHz (when T1M=1 and SMOD=1)
198 1 CKCON |= 0x10; // T1M=1 (/4 timer clock)
199 1 PCON = 0x80; // SMOD=1 (double baud rate)
200 1 SCON = 0x52; // Serial mode1, enable receiver
201 1 TMOD = 0x20; // Timer1 8bit auto reload
202 1 TR1 = 1; // Start timer1
203 1 P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
204 1 P0_DIR &= 0x0F; //led p0.4 p0.5 output
205 1 P0_DIR |= 0x48; // P0.3 is input p0.6 input
206 1 ES = 0;
207 1 EA=1;
208 1 }
209
210
211 /*****************************************************************************************
212 //函数名:SetTxMode()
213 //输入:无
214 //输出:无
215 //功能描述:转为发送模式
216 /*****************************************************************************************/
217 void SetRxMode(void)
218 {
219 1 int8u ch;
220 1 CS = 1;
221 1 Delay100us(0);
222 1 ch = FRESELE << 1;
223 1 SpiReadWrite(ch | 0x01);
224 1 CS = 0;
225 1 }
226 /*****************************************************************************************
227 //函数名:SetRxMode()
228 //输入:无
229 //输出:无
230 //功能描述:转为接收模式
231 /*****************************************************************************************/
232 void SetTxMode(void)
233 {
234 1 int8u ch;
235 1 CS = 1;
236 1 Delay100us(0);
237 1 ch = FRESELE << 1;
238 1 SpiReadWrite(ch);
239 1 CS = 0;
240 1 }
241
C51 COMPILER V7.08 MAIN 11/07/2005 10:57:52 PAGE 5
242 /*****************************************************************************************
243 //函数名:SendC()
244 //输入:发送的数据
245 //输出:无
246 //功能描述:串口初始化
247 /*****************************************************************************************/
248 void SendCh(char c)
249 {
250 1 TI = 0;
251 1 SBUF = c;
252 1 while(!TI);
253 1 TI = 0;
254 1 }
255
256 /*****************************************************************************************
257 //函数名:Nrf24E1Init()
258 //输入:无
259 //输出:无
260 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
261 /*****************************************************************************************/
262 void Nrf24E1Init()
263 {
264 1 int8u i;
265 1 SPICLK = 0; // Max SPI clock
266 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
267 1 CE = 0;
268 1 CS = 1; // RF SPI CS = 1
269 1 Delay100us(0);
270 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
271 1 for(i=1;i<15;i++)
272 1 {
273 2 SpiReadWrite(RFConfig[i]);
274 2 }
275 1 CS = 0;
276 1
277 1 Delay100us(30);
278 1 }
279 /*****************************************************************************************
280 //函数名:int8u WaitAck(void)
281 //输入:无
282 //输出:返回应答信号
283 //功能描述:等待应答,并返回应答信号
284 /*****************************************************************************************/
285 int8u WaitAck(void)
286 {
287 1 int8u ack;
288 1 SetRxMode();
289 1 CE = 1;
290 1 ResetTimer(0);
291 1 while(DR1 == 0)
292 1 {
293 2 if (ReadTimer(0) > 10) // 3ms time-out/10MS
294 2 {
295 3 CE = 0;
296 3 return 0;
297 3 }
298 2 }
299 1 ack = SpiReadWrite(0);
300 1 while(DR1)
301 1 {
302 2 SpiReadWrite(0);
303 2 }
C51 COMPILER V7.08 MAIN 11/07/2005 10:57:52 PAGE 6
304 1 CE = 0;
305 1 return ack;
306 1 }
307 /*****************************************************************************************
308 //函数名:TransmitPacket(int8u *pBuf)
309 //输入:发送的数据
310 //输出:无
311 //功能描述:发送发送缓冲区的数据
312 /*****************************************************************************************/
313 TransmitPacket(int8u *pBuf,int8u crc)
314 {
315 1 int8u i;
316 1
317 1 SetTxMode();
318 1 CE = 1;
319 1 Delay100us(1);
320 1
321 1 for (i=0;i<ADDR_COUNT;i++)
322 1 {
323 2 SpiReadWrite(rfAddress[i]);
324 2 }
325 1 SpiReadWrite(crc);
326 1 for (i=1;i<5;i++)
327 1 {
328 2 SpiReadWrite(pBuf[i]);
329 2 }
330 1 CE = 0;
331 1 Delay100us(6); // Wait until finished transmitting (200us + 256us)//delay(5)
332 1 }
333
334 /*****************************************************************************************
335 //函数名:void InitADC(void)
336 //输入:无
337 //输出:无
338 //功能描述:Nrf24E1ADC初始化
339 /*****************************************************************************************/
340 void InitADC()
341 {
342 1 ADCCON = 0x20; // NPD=1,内部参考电压
343 1
344 1 ADCSTATIC &= 0x1c;
345 1 ADCSTATIC |= 0x03; // 12位ADC
346 1
347 1 }
348 /*****************************************************************************************
349 //函数名
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -