📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 11/23/2007 13:53:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <absacc.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define AdLenth 3
6 sbit D_CLOCK =P1^0;
7 sbit D_IN =P1^1;
8 sbit D_OUT =P1^3;
9 sbit D_CS =P1^4;
10 uint AdBuff[];
11 uint Read2543(uchar port);
12 uint GetMidAd(uchar port);
13 void AdMoveAverage(uchar Port);
14 uint AdAverage(void);
15 void Delay(uint i);
16 //TI TLC2543 12位AD驱动程序,51晶振是11.0592MHz的。
17 /*-----------------------------------------------------------------------------
18 调用方式:uint Read2543(uchar port)
19 函数说明:port是采样的通道号 0-----10
20 -------------------------------------------------------------------------------*/
21 //当前返回的测量值是上一次输入的结果。
22 uint Read2543(uchar port) //从TLC1543读取采样值,形参port是采样的通道号
23 {
24 1 uchar mRetADHi,mRetADLo; //返回的测量值的高位、8低位
25 1 uchar mTemp;
26 1 D_CLOCK=0;
27 1 D_CS=0;
28 1 mRetADHi=0;
29 1 mRetADLo=0;
30 1 //把通道号(4位)打入2543 **代码虽然麻烦,但编译后的执行速度很快**
31 1 D_IN=(bit)(port&0x08);
32 1 D_CLOCK=1;
33 1 mTemp=(uchar)D_OUT;
34 1 mRetADHi|=mTemp<<3;
35 1 D_CLOCK=0;
36 1 D_IN=(bit)(port&0x04);
37 1 D_CLOCK=1;
38 1 mTemp=(uchar)D_OUT;
39 1 mRetADHi|=mTemp<<2;
40 1 D_CLOCK=0;
41 1 D_IN=(bit)(port&0x02);
42 1 D_CLOCK=1;
43 1 mTemp=(uchar)D_OUT;
44 1 mRetADHi|=mTemp<<1;
45 1 D_CLOCK=0;
46 1 D_IN=(bit)(port&0x01);
47 1 D_CLOCK=1;
48 1 mTemp=(uchar)D_OUT;
49 1 mRetADHi|=mTemp;
50 1 D_CLOCK=0;
51 1 //参数设定开始
52 1 //注意:参数的设定只对下一周期的测量有效,对本次取样没有作用
53 1 D_IN=0;
54 1 D_CLOCK=1;
55 1 mTemp=(uchar)D_OUT;
C51 COMPILER V7.50 MAIN 11/23/2007 13:53:49 PAGE 2
56 1 mRetADLo|=mTemp<<7;
57 1 D_CLOCK=0; //选择12位的数据长度
58 1 D_IN=0;
59 1 D_CLOCK=1;
60 1 mTemp=(uchar)D_OUT;
61 1 mRetADLo|=mTemp<<6;
62 1 D_CLOCK=0;
63 1 D_IN=0;
64 1 D_CLOCK=1;
65 1 mTemp=(uchar)D_OUT;
66 1 mRetADLo|=mTemp<<5;
67 1 D_CLOCK=0; //高位在前输出
68 1 D_IN=0;
69 1 D_CLOCK=1;
70 1 mTemp=(uchar)D_OUT;
71 1 mRetADLo|=mTemp<<4;
72 1 D_CLOCK=0; //单极性输出
73 1 //参数设定结束
74 1 D_CLOCK=1; //填充4个任意位
75 1 mTemp=(uchar)D_OUT;
76 1 mRetADLo|=mTemp<<3;
77 1 D_CLOCK=0;
78 1 D_CLOCK=1;
79 1 mTemp=(uchar)D_OUT;
80 1 mRetADLo|=mTemp<<2;
81 1 D_CLOCK=0;
82 1 D_CLOCK=1;
83 1 mTemp=(uchar)D_OUT;
84 1 mRetADLo|=mTemp<<1;
85 1 D_CLOCK=0;
86 1 D_CLOCK=1;
87 1 mTemp=(uchar)D_OUT;
88 1 mRetADLo|=mTemp;
89 1 D_CLOCK=0;
90 1 D_CS=1;
91 1 return (uint)(mRetADHi*256+mRetADLo);
92 1 }
93 /*****************************************/
94 uint GetMidAd(uchar port )
95 {
96 1 uint FirstAd;
97 1 uint SecondAd;
98 1 uint ThirdAd;
99 1 uint Temp;
100 1 Read2543(port);
101 1 FirstAd=Read2543(port);
102 1 Delay(20);
103 1 SecondAd=Read2543(port);
104 1 Delay(20);
105 1 ThirdAd=Read2543(port);
106 1 //由小到大排列
107 1 if(FirstAd>=SecondAd)
108 1 {
109 2 Temp=FirstAd;
110 2 FirstAd=SecondAd;
111 2 SecondAd=Temp;
112 2 }
113 1 if(SecondAd>=ThirdAd)
114 1 {
115 2 Temp=SecondAd;
116 2 SecondAd=ThirdAd;
117 2 ThirdAd=Temp;
C51 COMPILER V7.50 MAIN 11/23/2007 13:53:49 PAGE 3
118 2 }
119 1 if(FirstAd>=SecondAd)
120 1 {
121 2 Temp=FirstAd;
122 2 FirstAd=SecondAd;
123 2 SecondAd=Temp;
124 2 }
125 1 //得到中值。
126 1 return(SecondAd);
127 1 }
128 //*****************************************************************
129 //移动平均
130 void AdMoveAverage(uchar Port)
131 {
132 1 uint TempAd;
133 1 uchar i;
134 1 TempAd=GetMidAd(Port);
135 1 for(i=AdLenth;i>0;i--)
136 1 {
137 2 AdBuff[i]=AdBuff[i-1];
138 2 }
139 1 AdBuff[0]=TempAd;
140 1 }
141 //****************************************************************
142 uint AdAverage(void)
143 {
144 1 uchar i;
145 1 uint AdValue;
146 1 unsigned long Sum=0;
147 1 for(i=0;i<AdLenth;i++)
148 1 {
149 2 Sum+=AdBuff[i];
150 2 }
151 1 AdValue=Sum/AdLenth;
152 1 return(AdValue);
153 1 }
154 //****************************************************************
155 void Delay(uint i)
156 {
157 1 while(i--);
158 1 }
159 //****************************************************************
160 void main(void)
161 {
162 1 uchar aa;
163 1 while(1)
164 1 {
165 2 // uint AdValue;
166 2 // AdMoveAverage(0);
167 2 // AdValue=AdAverage();
168 2 aa=GetMidAd(0);
169 2 }
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 448 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
C51 COMPILER V7.50 MAIN 11/23/2007 13:53:49 PAGE 4
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 + -