📄 ad7705_va.lst
字号:
C51 COMPILER V7.50 AD7705_VA 04/26/2007 11:38:56 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AD7705_VA
OBJECT MODULE PLACED IN AD7705_Va.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE AD7705_Va.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "mylib.h"
2
3 unsigned char ad7705timer;
4
5 unsigned int READ7705(void);
6 void WRITE7705(unsigned char n);
7 void INI7705(void);
8 bit START_CH1(void);
9 unsigned int READ_CH1(void);
10 bit START_CH2(void);
11 unsigned int READ_CH2(void);
12 bit ERR7705(void);
13
14 unsigned int READ7705(void)
15 {
16 1 char i,j;
17 1 unsigned int ctemp=0;
18 1 CS_7705=0;
19 1 DOUT_7705=1;
20 1 for(i=0;i<16;i++)
21 1 {
22 2 SCLK_7705=0;
23 2 ctemp=ctemp<<1;
24 2 for(j=0;j<20;j++)
25 2 __nop_();
26 2 SCLK_7705=1;
27 2 for(j=0;j<20;j++)
28 2 __nop_();
29 2 if(DOUT_7705)
30 2 {
31 3 ctemp++;
32 3 }
33 2 }
34 1 CS_7705=1;
35 1 return(ctemp);
36 1 }
37
38 void WRITE7705(unsigned char n)
39 {
40 1 char i,j;
41 1 CS_7705=0;
42 1 for(i=0;i<8;i++)
43 1 {
44 2 DIN_7705=(n & 0x80);
45 2 for(j=0;j<20;j++)
46 2 __nop_();
47 2 SCLK_7705=0;
48 2 __nop_();
49 2 __nop_();
50 2 for(j=0;j<20;j++)
51 2 __nop_();
52 2 SCLK_7705=1;
53 2 n=(n<<1);
54 2 for(j=0;j<20;j++)
55 2 __nop_();
C51 COMPILER V7.50 AD7705_VA 04/26/2007 11:38:56 PAGE 2
56 2 }
57 1 CS_7705=1;
58 1 }
59
60 void INI7705(void)
61 {
62 1 WRITE7705(0xff);
63 1 WRITE7705(0xff);
64 1 WRITE7705(0xff);
65 1 WRITE7705(0xff);
66 1 WRITE7705(0xff);
67 1 }
68 /*
69 AD7705寄存器
70 1:通信寄存器
71 DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
72 DRDY:写操作时此位为0。
73 RS2、RS1、RS0:选择寄存器。000:通信寄存器; 001:设置寄存器; 010:时钟寄存器。
74 R/W:0写操作; 1读操作.
75 STBY:等待模式。0正常工作模式.
76 CH1 CH0:通道选择。
77
78 2:设置寄存器
79 MD1 MD0 G2 G1 G0 B/U BUF FSYNC
80 MD1 MD0:校准模式选择。00正常模式; 01自校准模式; 10 零刻度校准模式; 11全刻度校准模式.
81 G2 G1 G0:增益选择位。
82 B/U:单极性与双极性选择。0双极,1单极。
83 BUF:缓冲。1缓冲,0无缓冲。
84 FSYNC:同步过滤器。
85
86 3:时钟寄存器
87 ZER0 ZER0 ZER0 CLKDIS CLKDIV CLK FS1 FS0
88 ZER0:0必须写进该位,才能保证7705的运转正确。
89 CLKDIS:主时钟禁止位。"1"禁止MCLKOUT脚输出。
90 CLKDIV:时钟分频位。"1"主时钟二频; "0"不分频。
91 CLK:时钟位。2.4576M/4.9152M时对应CLK=1;1M/2M时对应CLK=0.
92 FS0 FS1:数据刷新选择位。应与CLK结合来决定数据刷新速度。
93 */
94
95 bit START_CH1(void)
96 {
97 1 bit temp=0;
98 1 INI7705();
99 1 WRITE7705(0x20);//00100000 选择时钟寄存器,第1通道。
100 1 WRITE7705(0x06);//00000110 数据刷新速度为250Hz,主时钟不分频,晶振为2.4576M.
101 1 WRITE7705(0x10);//00010000 选择设置寄存器,第1通道。
102 1 WRITE7705(0x40);//01000000 自校准模式,增益为1,双极性
103 1 ad7705timer=0;
104 1 while(ad7705timer<50)
105 1 {
106 2 if(DRDY_7705)
107 2 {
108 3 temp=1;
109 3 ad7705timer=51;
110 3 }
111 2 }
112 1 if(!temp)
113 1 return(0);
114 1 ad7705timer=0;
115 1 while(ad7705timer<50)
116 1 {
117 2 if(!DRDY_7705)
C51 COMPILER V7.50 AD7705_VA 04/26/2007 11:38:56 PAGE 3
118 2 {
119 3 return(1);
120 3 }
121 2 }
122 1 return(0);
123 1 }
124
125 unsigned int READ_CH1(void)
126 {
127 1 idata unsigned int y;
128 1 START_CH1();
129 1 ad7705timer=0;
130 1 while(ad7705timer<50)
131 1 {
132 2 if(DRDY_7705)
133 2 {
134 3 ad7705timer=51;
135 3 }
136 2 }
137 1 ad7705timer=0;
138 1 while(ad7705timer<50)
139 1 {
140 2 if(!DRDY_7705)
141 2 {
142 3 ad7705timer=51;
143 3 }
144 2 }
145 1 WRITE7705(0x38);//00111000选择数据寄存器,读第一通道.
146 1 y=READ7705();
147 1 return y;
148 1 }
149
150 bit START_CH2(void)
151 {
152 1 bit temp=0;
153 1 INI7705();
154 1 WRITE7705(0x21);
155 1 WRITE7705(0x0a);
156 1 WRITE7705(0x11);
157 1 WRITE7705(0x44);
158 1
159 1 ad7705timer=0;
160 1 while(ad7705timer<50)
161 1 {
162 2 if(DRDY_7705)
163 2 {
164 3 temp=1;
165 3 ad7705timer=51;
166 3 }
167 2 }
168 1 if(!temp) return(0);
169 1
170 1 ad7705timer=0;
171 1 while(ad7705timer<50)
172 1 {
173 2 if(!DRDY_7705)
174 2 {
175 3 return(1);
176 3 }
177 2 }
178 1 return(0);
179 1 }
C51 COMPILER V7.50 AD7705_VA 04/26/2007 11:38:56 PAGE 4
180
181
182 unsigned int READ_CH2(void)
183 {
184 1 idata unsigned int y;
185 1 START_CH2();
186 1 ad7705timer=0;
187 1 while(ad7705timer<50)
188 1 {
189 2 if(DRDY_7705)
190 2 {
191 3 ad7705timer=51;
192 3 }
193 2 }
194 1 ad7705timer=0;
195 1 while(ad7705timer<50)
196 1 {
197 2 if(!DRDY_7705)
198 2 {
199 3 ad7705timer=51;
200 3 }
201 2 }
202 1 WRITE7705(0x39); //选择数据寄存器
203 1 y=READ7705();
204 1 return y;
205 1 }
206 /*
207 STC看门狗介绍WDT_CONTR:
208 -- -- EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
209 EN_WDT:看门狗允许位,设置为1时看门狗启动。
210 CLR_WDT:看门狗清0位,设置为1时看门狗重新计数,硬件将自动清0此位
211 IDLE_WDT:当设置为1时看门狗定时器在空闲模式下计数;
212 当设置为0时看门狗定时器在空闲模式下不计数.
213 PS2 PS1 PS0:看门狗定时器分频值。
214
215 */
216
217 bit ERR7705(void) //
218 { unsigned int n;
219 1 // WDT_CONTR=0x3c;
220 1 INI7705();
221 1 WRITE7705(0x20);
222 1 WRITE7705(0x0a); //SH1
223 1 WRITE7705(0x10);
224 1 WRITE7705(0x44);
225 1 n=0;
226 1 while(DRDY_7705)
227 1 {
228 2 WDT_CONTR=0x3c;
229 2 n++;
230 2 if(n>0xfff)
231 2 {
232 3 return 1;
233 3 }
234 2 }
235 1 n=0;
236 1 while(!DRDY_7705)
237 1 {
238 2 WDT_CONTR=0x3c;
239 2 n++;
240 2 if(n>0xfff)
241 2 {
C51 COMPILER V7.50 AD7705_VA 04/26/2007 11:38:56 PAGE 5
242 3 return 1;
243 3 }
244 2 }
245 1
246 1 INI7705();
247 1 WRITE7705(0x21);
248 1 WRITE7705(0x0a); //SH2
249 1 WRITE7705(0x11);
250 1 WRITE7705(0x44);
251 1 n=0;
252 1 while(DRDY_7705)
253 1 {
254 2 WDT_CONTR=0x3c;
255 2 n++;
256 2 if(n>0xfff)
257 2 return 1;
258 2 }//00111100
259 1 n=0;
260 1 while(!DRDY_7705)
261 1 {
262 2 WDT_CONTR=0x3c;
263 2 n++;
264 2 if(n>0xfff)
265 2 return 1;
266 2 }
267 1 return 0;
268 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 484 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- 4
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -