📄 adda.lst
字号:
227 1 // P1.3 - Skipped, Open-Drain, Analog
228 1 // P1.4 - Skipped, Open-Drain, Analog
229 1 // P1.5 - Skipped, Open-Drain, Analog
230 1 // P1.6 - Skipped, Open-Drain, Analog
231 1 // P1.7 - Skipped, Open-Drain, Analog
232 1
233 1 // P2.0 - TX1 (UART1), Open-Drain, Digital
234 1 // P2.1 - RX1 (UART1), Open-Drain, Digital
235 1 // P2.2 - INT0 (Tmr0), Open-Drain, Digital
236 1 // P2.3 - INT1 (Tmr1), Open-Drain, Digital
237 1 // P2.4 - Unassigned, Open-Drain, Digital
238 1 // P2.5 - Unassigned, Open-Drain, Digital
239 1 // P2.6 - Unassigned, Open-Drain, Digital
240 1 // P2.7 - Unassigned, Open-Drain, Digital
241 1
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 5
242 1 // P3.0 - Unassigned, Open-Drain, Digital
243 1 // P3.1 - Unassigned, Push-Pull, Digital
244 1 // P3.2 - Unassigned, Open-Drain, Digital
245 1 // P3.3 - Unassigned, Open-Drain, Digital
246 1 // P3.4 - Unassigned, Open-Drain, Digital
247 1 // P3.5 - Unassigned, Open-Drain, Digital
248 1 // P3.6 - Unassigned, Open-Drain, Digital
249 1 // P3.7 - Unassigned, Open-Drain, Digital
250 1
251 1 P1MDIN = 0x00;
252 1 P3MDOUT = 0x02;
253 1 XBR0 = 0x07;
254 1 XBR1 = 0x14;
255 1 XBR2 = 0x44;
256 1
257 1
258 1
259 1 }
260
261 void Oscillator_Init()
262 {
263 1 int i = 0;
264 1 OSCXCN = 0x67;
265 1 for (i = 0; i < 3000; i++); // Wait 1ms for initialization
266 1 while ((OSCXCN & 0x80) == 0);
267 1 OSCICN = 0x08;
268 1 }
269
270 //--------------------------------
271 // AD初始化
272 //-------------------------------
273 void ADC_Init()
274 {
275 1
276 1 AMX0CF = 0; // 单端输入
277 1 AMX0SL = 0;
278 1 ADC0CF = 0xF8;
279 1
280 1 ADC0CN = 0xC0;
281 1 }
282
283 void Voltage_Reference_Init()
284 {
285 1 REF0CN = 0x07;
286 1 }
287
288 //------------------------------
289 // DA初始化
290 //------------------------------
291 void DAC_Init()
292 {
293 1 DAC0CN = 0x80; // 使能DAC0,输出数据右对齐
294 1 }
295
296 void Interrupts_Init()
297 {
298 1 //..................................
299 1 // 初始化中断
300 1 // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
301 1 //..................................
302 1 IE = 0;
303 1
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 6
304 1 ET0 = 1; // 打开定时器0中断
305 1
306 1
307 1 ES0 = 1; // 使能串口中断
308 1
309 1
310 1 }
311
312 //-------------------------------
313 // 功能: 初始化单片机内部资源
314 // 输入参数:无
315 // 输出参数:无
316 //-------------------------------
317 void Init_Device(void)
318 {
319 1 Timer_Init();
320 1
321 1 ADC_Init();
322 1 Voltage_Reference_Init();
323 1
324 1 DAC_Init();
325 1
326 1 Port_IO_Init();
327 1
328 1 Oscillator_Init();
329 1
330 1 UART0_Init();
331 1
332 1 Interrupts_Init();
333 1 }
334
335 //------------------------------------------------
336 // 函数名称:InitVariable()
337 // 函数功能:初始化系统全局变量
338 //------------------------------------------------
339 void InitVariable()
340 {
341 1 g_cMainSignal = 0;
342 1
343 1 g_sTime.base = 0;
344 1 g_sTime.second= 0;
345 1 g_sTime.minute= 0;
346 1
347 1 g_cRecvPointer =0;
348 1 g_cRecvLength =0;
349 1
350 1 g_Temperature =0.0;
351 1
352 1
353 1 }
354
355 //-------------------------------------------------------------
356 // 函数名称:定时器0中断入口函数,完成计时功能,定时时间为25ms
357 // 输入参数: 无
358 // 输出参数: 无
359 //-------------------------------------------------------------
360
361 void timer0() interrupt 1
362 {
363 1 TH0=TMR0H;
364 1 TL0=TMR0L;
365 1
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 7
366 1 // 程序时基信号
367 1 if(++g_sTime.base>=TICKS_PER_SEC)
368 1 {// 1s到
369 2 g_sTime.base = 0;
370 2
371 2 g_cMainSignal|=SECD_SIGNAL; // 产生秒信号
372 2
373 2 if(++g_sTime.second>59)
374 2 {// 1分钟到
375 3 g_sTime.second = 0;
376 3
377 3 g_cMainSignal|=MINU_SIGNAL; // 产生分信号
378 3
379 3 if(++g_sTime.minute>59) g_sTime.minute=0;
380 3 }
381 2 }
382 1
383 1
384 1
385 1 }
386
387 //..................................................
388 // 串口0中断服务程序
389 //
390 //.................................................
391 void Uart0() interrupt 4
392 {
393 1 BYTE cRecvData;
394 1
395 1 if(RI0) // 如果收到数据
396 1 {
397 2 RI0=0; // 清除收到数据标志
398 2
399 2 cRecvData = SBUF0; // 读取数据
400 2 SBUF0 = cRecvData; // 回显
401 2
402 2 if(cRecvData=='\r')
403 2 {// 回车符作为结束标志
404 3 g_cRecvBuffer[g_cRecvPointer]=0; // 接收结束
405 3 g_cRecvPointer = 0;
406 3
407 3 g_cMainSignal|=UART0RECV_SIGNAL; // 接收完成信号
408 3
409 3 }
410 2 else if(cRecvData==0x08)
411 2 {// CTRL+H控制键,退格
412 3 if(g_cRecvPointer>0) g_cRecvPointer--;
413 3 }
414 2 else
415 2 {
416 3 if(g_cRecvPointer<RECVBUF_LEN)
417 3 {
418 4 if(isupper(cRecvData))
419 4 {// 大写字符转换为小写
420 5 cRecvData = _tolower(cRecvData);
421 5 }
422 4 g_cRecvBuffer[g_cRecvPointer++]=cRecvData;
423 4 }
424 3 else
425 3 {// 数据长度错误
426 4 g_cRecvPointer = 0;
427 4 }
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 8
428 3 }
429 2
430 2
431 2 }
432 1
433 1 if(TI0) // 如果数据发送结束
434 1 {
435 2 TI0=0;
436 2 }
437 1
438 1 }
439
440 //------------------------------
441 // 进行一次电压采集
442 //-----------------------------
443
444 WORD SampleVoltageAndOut()
445 {
446 1
447 1 WORD nRet;
448 1 DWORD lt;
449 1
450 1 AMX0SL = 0; // 采集通道0
451 1 AD0INT = 0;
452 1
453 1 AD0BUSY = 1;
454 1
455 1
456 1 while(AD0INT==0);
457 1 AD0INT = 0;
458 1
459 1 // DA输出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -