📄 ad2.lst
字号:
C51 COMPILER V7.50 AD2 05/24/2009 21:10:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AD2
OBJECT MODULE PLACED IN ad2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ad2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<stdio.h>
3 #include<string.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 sbit test=P1^2;
7 sbit actuate=P2^1;
8
9 //定义控制AD转换的寄存器
10 //******************************
11 sfr P1M0=0x91;
12 sfr P1M1=0x92;
13 sfr AD_Control=0xc5;
14 sfr AD_Data=0xc6;
15 //sfr ADC_Low2=0xbe;
16 //******************************
17 uchar advalue=0x01;
18 uchar ad_T=0x32;
19 uchar control=0x00;
20 void delay1ms(uint f);
21 void AD_init();
22 void serial_init();
23
24
25 //主程序
26 void main()
27 {actuate=0;
28 1 AD_init();
29 1 serial_init(); //初始化串口
30 1 AD_Control=AD_Control | 0x08; //启动AD,置START位
31 1 while(1)
32 1 {
33 2 if((AD_Control & 0x10)==0x10) //判断标志位FLAG
34 2 {advalue=AD_Data; //读取转换数据
35 3 //SBUF=advalue;
36 3 AD_Control=AD_Control & 0xe7; //将标志位清零
37 3 AD_Control=AD_Control | 0x08; //转换完成后,再次启动AD
38 3 }
39 2 else
40 2 test=0;
41 2 }
42 1 }
43
44 //***************************
45 //1ms延时函数
46 void delay1ms(uint f)
47 {
48 1 uint i,j;
49 1 for(i=0;i<f;i++)
50 1 for(j=0;j<120;j++);
51 1 }
52
53
54 //***************************
55 //串口初始化函数,定时器0初始化
C51 COMPILER V7.50 AD2 05/24/2009 21:10:54 PAGE 2
56 void serial_init()
57 {
58 1 SCON=0x50; //方式1,10位异步收发,波特率由定时器控制,单机对单机,允许接收
59 1 PCON=0x00; //SMOD=0,方式1、2、3的波特率不加倍
60 1 TMOD=0x21; //定时器1工作于方式2,自动装载方式,定时器0工作于方式1,16位加1
61 1 TH0=0x00;
62 1 TH1=0xb8; //设置定时器初值,定时20ms
63 1 TL1=0xfd; //设置定时器装载值,来设置波特率
64 1 TH1=0xfd;
65 1 //TR0=1; //启动定时器T0
66 1 TR1=1; //启动定时器T1
67 1 //TI=1; //有发送中断,发送中断标志
68 1 //RI=1; //有接收中断,接收中断标志
69 1 ET0=1; //开T0中断
70 1 ES=1; // 开串口中断
71 1 EA=1; //开总中断
72 1 }
73
74
75 //**************************
76 //AD初始化函数
77 void AD_init()
78 {P1M0=0x01; //set the P1 working moduel
79 1 P1M1=0x01; //set P10 as AD convert channel
80 1 AD_Control=0xc0;
81 1 //启动AD前必须确认AD电源已经打开,初次打开AD电源,需适当延时,等电源稳定后再启动AD
82 1 //AD转换完成后,ADC_FLAG=1,需软件清零
83 1 //ADC_START设置为1时,开始转换,转换结束后为0
84 1 delay1ms(2); //delay to besure the AD power is OK
85 1 }
86
87
88 //**************************
89 //AD convert function (start ad out of this function)
90 /*void adconvert()
91 {if((AD_Control & 0x10)==0x10) //判断标志位FLAG,if flag==1,then adcovert over
92 {advalue=AD_Data; //读取转换数据
93 SBUF=advalue;
94 AD_Control=AD_Control & 0xe7; //将标志位清零
95 }
96 //{test=0;} //when adconvert have not finished,just wait
97 //AD_Control=AD_Control | 0x08; //转换完成后,AD_start be set 0, need to restart
98 }*/
99
100
101
102 //发送操作在TI=0时,执行SBUF=A指令后开始,然后发送电路自动在8位
103 //发送字符前后分别添加一位起始位和停止位,发送完后,TI由硬件在
104 //发送停止后置位
105 //在一定条件下,向SBUF写入数据就启动了发送过程,
106 //接收过程是自动进行的
107 //***************************
108 //串口中断函数
109 void serial () interrupt 4 using 3 //串口接收发送中断程序
110 {EA=0; //close the main interrupt to sure this func successful
111 1 if(RI) //接收完一帧数据后,硬件自动置1,如果再接收必须
112 1 {RI=0; //软件清零RI
113 2 control=SBUF;
114 2 if(control==0x01)
115 2 SBUF=advalue;
116 2 else if(control==0x02)
117 2 actuate=1;
C51 COMPILER V7.50 AD2 05/24/2009 21:10:54 PAGE 3
118 2 else if(control==0x03)
119 2 actuate=0;
120 2 }
121 1 if(TI) //发送完一帧数据后,硬件自动置1,如果再发送必须
122 1 {TI=0; //软件清零TI
123 2 }
124 1 EA=1;
125 1 }
126
127
128 /*void timer0() interrupt 1 using 1
129 {EA=0;
130 TH0=0x00;
131 TH1=0xb8;
132 ad_T=ad_T-1;
133 if(ad_T==0)
134 {AD_Control=AD_Control | 0x08; //每秒钟启动AD一次
135 delay1ms(1);
136 adconvert(); //wait for reading the addata
137 //SBUF=advalue; //send the advalue through serial channel
138 ad_T=0x32;
139 }
140 EA=1;
141 } */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 159 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -