📄 wadc0.lst
字号:
C51 COMPILER V7.05 WADC0 02/14/2006 08:37:38 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE WADC0
OBJECT MODULE PLACED IN WADC0.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe WADC0.c DB OE
stmt level source
1 //参考程序B.WADC0.c程序模/数转化通道AIN0.0的输入值,数码管显示两位16进制数.
2 //测试前将S6的第一拨码开关拨到ON
3 #include <c8051f020.h>
4 sfr16 TMR3RL = 0x92;
5 sfr16 TMR3 = 0x94;
6 sfr16 ADC0 = 0xbe;
7 #define SYSCLK 2000000
8 bit LCDBit;
9 unsigned long x;
10 void PORT_Init (void);
11 void Timer3_Init (int counts);
12 void ADC_Init(void);
13 void ADC_ISR (void);
14 void LCD_Init(void);
15 void main (void) {
16 1 unsigned char data1,i;
17 1 unsigned char *lcdpoint; //指向 lcddata数组的指针
18 1 unsigned char ADC0Data[10]={0x0a,0x0d,0x0c,0x00,0x68,0x68};
19 1 WDTCN = 0xde;
20 1 WDTCN = 0xad; //禁止看门狗定时器
21 1 LCDBit=0;
22 1 // PORT_Init();
23 1 LCD_Init();
24 1 Timer3_Init (SYSCLK / 12 /5 );
25 1 ADC_Init();
26 1 EA = 1;
27 1 AMX0SL =0x00; //选择通道0
28 1 for(x=0;x<=50000;x++);
29 1 /*
30 1 AMX0SL =0x01; //选择通道1
31 1 for(i=0;i<=50000;i++);
32 1 AMX0SL =0x02; //选择通道2
33 1 for(i=0;i<=50000;i++);
34 1 AMX0SL =0x03; //选择通道3
35 1 */
36 1 while (1)
37 1 {
38 2 if(LCDBit==1){
39 3 TMR3CN &= 0xfb; //关定时器3
40 3 LCDBit=0; //清LCD显示位
41 3 P7 = 0x02; //LCD指针返回初始位置
42 3 P6 = 0x0;
43 3 P6 = 0x1;
44 3 ADC0Data[9]=ADC0&0x0f; //将A/D转化值存到显示数组
45 3 ADC0Data[8]=(ADC0>>4)&0x0f;
46 3 ADC0Data[7]=(ADC0>>8)&0x0f;
47 3 ADC0Data[6]=(ADC0>>12)&0x0f;
48 3 P6 = 0x05; //准备送数据
49 3 for(x=0;x<5000;x++);
50 3 lcdpoint = &ADC0Data;
51 3 for(i=10;i>0;i--) //显示第一行字符
52 3 {
53 4 data1=*lcdpoint;
54 4 if(data1>=0x0a) data1 += 0x37; //将显示数据转化为液晶的显示字符码
55 4 else data1 += 0x30;
C51 COMPILER V7.05 WADC0 02/14/2006 08:37:38 PAGE 2
56 4 P7 = data1;
57 4 P6 = 0x04;
58 4 P6 = 0x05;
59 4 lcdpoint++;
60 4 for(x=0;x<100;x++);
61 4 }
62 3 TMR3CN |= 0x04; //使能定时器3
63 3 }
64 2 }
65 1 }
66 void LCD_Init(void)
67 {
68 1 P6 = 0x01;
69 1 for(x=0;x<50000;x++);
70 1 //P7 = 0x30; /*一行显示*/
71 1 P7 = 0x38; /*两行显示*/
72 1 P6 = 0x0;
73 1 P6 = 0x1;
74 1 for(x=0;x<1000;x++);
75 1 P7 = 0x0e; //开显示,开光标,字符不闪烁
76 1 P6 = 0x0;
77 1 P6 = 0x1;
78 1 for(x=0;x<1000;x++);
79 1 P7= 0x016; //AC自动增1,整体显示不移动
80 1 P6 = 0x1;
81 1 P6 = 0x01;
82 1 for(x=0;x<5000;x++);
83 1 P7 = 0x01; //清除DDRAM,置AC=0
84 1 P6 = 0x00;
85 1 P6 = 0x01;
86 1 for(x=0;x<5000;x++);
87 1 }
88 void PORT_Init (void)
89 {
90 1 XBR2 = 0x40; //使能交叉开关
91 1 P74OUT |= 0x0ff; //推挽输出
92 1 }
93 void Timer3_Init (int counts)
94 {
95 1 TMR3CN = 0x00; //定时器T3使用系统时钟的12分频.禁止T3
96 1 TMR3RLL = -counts; //初始化重载值
97 1 TMR3L = 0xffff; //设置自动重载值
98 1 TMR3CN |= 0x04; //允许定时器T3
99 1 }
100 void ADC_Init(void)
101 {
102 1 ADC0CN |=0x84; /*ADC0使能,定时器T3溢出使能模/数转换*/
103 1 REF0CN |=0x03; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
104 1 ADC0CF |=0x50; /*转换周期为一个时间系统,增益为1*/
105 1 AMX0CF |=0x00; /*单端输入*/
106 1 EIE2 |=0x02; /*ADC0转换结束中断*/
107 1 }
108 void ADC_ISR (void) interrupt 15
109 {
110 1 AD0INT=0; //清A/D中断标志
111 1 LCDBit=1; //置LCD显示位
112 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 666 ----
CONSTANT SIZE = 10 ----
C51 COMPILER V7.05 WADC0 02/14/2006 08:37:38 PAGE 3
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 14
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 + -