📄 adc.lst
字号:
C51 COMPILER V7.20 ADC 09/18/2008 18:08:21 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN adc.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE adc.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "include.h"
2
3 unsigned char H_AD=0; //H_AD 用于存储高八位A/D转换结果
4 unsigned char L_AD=0; //L_AD 用于存储低八位A/D转换结构
5 bit SystemError=0; // 从机错误标志位
6 extern uchar ad_tare_k;
7 float ad_tare;
8
9 /*--------------------------
10 计算当前重量 返回重量
11 最大99.999KG
12 ----------------------------*/
13
14 float convs_weight()
15 {
16 1 uchar i;
17 1 float ad=0;
18 1 float weight=0;
19 1 for(i=0;i<100;i++)
20 1 {
21 2 READ_ADS100();
22 2 ad+=(((H_AD<<8)+L_AD));
23 2 delay_ms(10);
24 2 }
25 1 ad/=100;
26 1 if(ad_tare_k) //如果按下了初值键 采集ad初值
27 1 {
28 2 ad_tare_k=0;
29 2 ad_tare=ad;
30 2 }
31 1 else
32 1 {
33 2 weight=(ad-ad_tare)/1.854;
34 2 }
35 1 // delay_ms(1000);
36 1 return weight;
37 1 }
38
39 //--------------------------------------------------------------------------------------------------
40 // 函数名称: iic_start()
41 // 函数功能: 启动I2C总线子程序
42 //--------------------------------------------------------------------------------------------------
43 void iic_start(void)
44 {
45 1 EA=0; //时钟保持高,数据线从高到低一次跳变,I2C通信开始
46 1 SDA = 1;
47 1 SCL = 1;
48 1 delay_us(7); // 延时5us
49 1 SDA = 0;
50 1 delay_us(7);
51 1 SCL = 0;
52 1 }
53 //--------------------------------------------------------------------------------------------------
54 // 函数名称: iic_stop()
55 // 函数功能: 停止I2C总线数据传送子程序
C51 COMPILER V7.20 ADC 09/18/2008 18:08:21 PAGE 2
56 //--------------------------------------------------------------------------------------------------
57 void iic_stop(void)
58 {
59 1 SDA = 0; //时钟保持高,数据线从低到高一次跳变,I2C通信停止
60 1 SCL = 1;
61 1 delay_us(7);
62 1 SDA = 1;
63 1 delay_us(7);
64 1 SCL = 0;
65 1 }
66 //--------------------------------------------------------------------------------------------------
67 // 函数名称: slave_ACK
68 // 函数功能: 从机发送应答位子程序
69 //--------------------------------------------------------------------------------------------------
70 void slave_ACK(void)
71 {
72 1 SDA = 0;
73 1 SCL = 1;
74 1 delay_us(7);
75 1 SCL = 0;
76 1 SDA = 1;
77 1 }
78 //--------------------------------------------------------------------------------------------------
79 // 函数名称: slave_NOACK
80 // 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
81 //--------------------------------------------------------------------------------------------------
82 void slave_NOACK(void)
83 {
84 1 SDA = 1;
85 1 SCL = 1;
86 1 delay_us(7);
87 1 SCL = 0;
88 1 SDA = 0;
89 1 }
90 //--------------------------------------------------------------------------------------------------
91 // 函数名称: check_ACK
92 // 函数功能: 主机应答位检查子程序,迫使数据传输过程结束
93 //--------------------------------------------------------------------------------------------------
94 void check_ACK(void)
95 {
96 1 SDA = 1; // 将p1.0设置成输入,必须先向端口写1
97 1 SCL = 1;
98 1 F0 = 0;
99 1 delay_us(7);
100 1 if(SDA == 1) // 若SDA=1表明非应答,置位非应答标志F0
101 1 F0 = 1;
102 1 SCL = 0;
103 1 }
104
105 //--------------------------------------------------------------------------------------------------
106 // 函数名称: IICSendByte
107 // 入口参数: ch
108 // 函数功能: 发送一个字节
109 //--------------------------------------------------------------------------------------------------
110 void IICSendByte(unsigned char ch)
111 {
112 1 unsigned char n=8; // 向SDA上发送一位数据字节,共八位
113 1 while(n--)
114 1 {
115 2 if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1
116 2 {
117 3 SDA = 1; // 传送位1
C51 COMPILER V7.20 ADC 09/18/2008 18:08:21 PAGE 3
118 3 SCL = 1;
119 3 delay_us(7);
120 3 SCL = 0;
121 3 SDA = 0;
122 3 }
123 2 else
124 2 {
125 3 SDA = 0; // 否则传送位0
126 3 SCL = 1;
127 3 delay_us(7);
128 3 SCL = 0;
129 3 }
130 2 ch = ch<<1; // 数据左移一位
131 2 delay_us(7);
132 2 }
133 1 }
134 //--------------------------------------------------------------------------------------------------
135 // 函数名称: IICreceiveByte
136 // 返回接收的数据
137 // 函数功能: 接收一字节子程序
138 //--------------------------------------------------------------------------------------------------
139 unsigned char IICreceiveByte(void)
140 {
141 1 unsigned char idata n=8; // 从SDA线上读取一上数据字节,共八位
142 1 unsigned char tdata;
143 1 while(n--)
144 1 {
145 2 SDA = 1;
146 2 SCL = 1;
147 2 delay_us(7);
148 2 tdata = tdata<<1; // 左移一位,或_crol_(temp,1)
149 2 if(SDA == 1)
150 2 tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1
151 2 else
152 2 tdata = tdata&0xfe; // 否则数据的最后一位置0
153 2 SCL=0;
154 2 }
155 1 return(tdata);
156 1 }
157 //--------------------------------------------------------------------------------------------------
158 // 函数名称:setting_ADS100
159 // 用户调用自程序
160 // 函数功能: 设置配置寄存器
161 //--------------------------------------------------------------------------------------------------
162 void setting_ADS100(unsigned char setting_data) //写器件地址和配置字
163 {
164 1 iic_start(); //开始写
165 1 IICSendByte(0x90); //写器件地址(写)
166 1 check_ACK(); // 检查应答位
167 1 if(F0 == 1)
168 1 {
169 2 SystemError = 1;
170 2 return; // 若非应答表明器件错误或已坏,置错误标志位SystemError
171 2 }
172 1 IICSendByte(setting_data);
173 1 check_ACK(); // 检查应答位
174 1 if (F0 == 1)
175 1 {
176 2 SystemError=1;
177 2 return; // 若非应答表明器件错误或已坏,置错误标志位SystemError
178 2 }
179 1 iic_stop(); // 全部发完则停止
C51 COMPILER V7.20 ADC 09/18/2008 18:08:21 PAGE 4
180 1 }
181 //--------------------------------------------------------------------------------------------------
182 // 函数名称:READ_ADS100
183 // 用户调用自程序
184 // 函数功能: 读A/D转换结果
185 //--------------------------------------------------------------------------------------------------
186 void READ_ADS100(void) //从ADS1100中读出数据
187 {
188 1 iic_start();
189 1 IICSendByte(0x91);
190 1 check_ACK();
191 1 if(F0 == 1)
192 1 {
193 2 SystemError = 1;
194 2 return;
195 2 }
196 1 H_AD=IICreceiveByte();
197 1 slave_ACK(); // 收到一个字节后发送一个应答位
198 1 L_AD=IICreceiveByte();
199 1 slave_NOACK(); // 收到最后一个字节后发送一个非应答位
200 1 iic_stop();
201 1 }
*** WARNING C316 IN LINE 201 OF adc.c: unterminated conditionals
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 539 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 6 13
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 1
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -