📄 ad7705.lst
字号:
C51 COMPILER V7.50 AD7705 09/26/2007 17:19:06 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AD7705
OBJECT MODULE PLACED IN ad7705.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ad7705.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "mylib.h"
2 /*
3 编写:bobo
4 AD7705寄存器
5 1:通信寄存器
6 DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
7 DRDY:写操作时此位为0。
8 RS2、RS1、RS0:选择寄存器。000:通信寄存器; 001:设置寄存器; 010:时钟寄存器。
9 R/W:0写操作; 1读操作.
10 STBY:等待模式。0正常工作模式.
11 CH1 CH0:通道选择。
12
13 2:设置寄存器
14 MD1 MD0 G2 G1 G0 B/U BUF FSYNC
15 MD1 MD0:校准模式选择。00正常模式; 01自校准模式; 10 零刻度校准模式; 11全刻度校准模式.
16 G2 G1 G0:增益选择位。
17 B/U:单极性与双极性选择。0双极,1单极。
18 BUF:缓冲。1缓冲,0无缓冲。
19 FSYNC:同步过滤器。
20
21 3:时钟寄存器
22 ZER0 ZER0 ZER0 CLKDIS CLKDIV CLK FS1 FS0
23 ZER0:0必须写进该位,才能保证7705的运转正确。
24 CLKDIS:主时钟禁止位。"1"禁止MCLKOUT脚输出。
25 CLKDIV:时钟分频位。"1"主时钟二频; "0"不分频。
26 CLK:时钟位。2.4576M/4.9152M时对应CLK=1;1M/2M时对应CLK=0.
27 FS0 FS1:数据刷新选择位。应与CLK结合来决定数据刷新速度。
28 */
29
30
31 /*
32 STC看门狗介绍WDT_CONTR:
33 -- -- EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
34 EN_WDT:看门狗允许位,设置为1时看门狗启动。
35 CLR_WDT:看门狗清0位,设置为1时看门狗重新计数,硬件将自动清0此位
36 IDLE_WDT:当设置为1时看门狗定时器在空闲模式下计数;
37 当设置为0时看门狗定时器在空闲模式下不计数.
38 PS2 PS1 PS0:看门狗定时器分频值。
39
40 */
41
42 /* AD7705 */
43 void CLK_Reset()
44 {
45 1 uchar i;
46 1 AD_CLK=1;
47 1 AD_IN=1;
48 1 for(i=0;i<40;i++)
49 1 {
50 2 AD_CLK=0;
51 2 AD_CLK=1;
52 2 }
53 1 }
54 void Wait7705(unsigned int t)
55 {
C51 COMPILER V7.50 AD7705 09/26/2007 17:19:06 PAGE 2
56 1 for( ;t>0 ;t-- );
57 1 }
58
59 void writeword(unsigned int byteword)
60 {
61 1 unsigned int AD16bit,Token;
62 1 unsigned char i ;
63 1 AD_CLK=1;
64 1 AD_CS=0;//开始
65 1 //delay();
66 1 Token=0x80;
67 1 AD16bit=byteword;
68 1 for(i=0;i<8;i++)
69 1 {
70 2 /*AD_CLK=0;
71 2 delay();
72 2 if(AD16bit&Token)
73 2 AD_IN=1;//输入数据位
74 2 else AD_IN=0;
75 2 AD_CLK=1;
76 2 delay();
77 2 Token=Token>>1;*/
78 2 if(AD16bit&Token)
79 2 AD_IN=1;
80 2 else AD_IN=0;
81 2 AD_CLK=0;
82 2 AD_CLK=1;
83 2 Token=Token>>1;
84 2 }
85 1 AD_CLK=1;
86 1 AD_IN=1;//结束
87 1 AD_CS=1;
88 1 }
89
90
91 void CH1_init()
92 {
93 1 //AD7705_reset();
94 1 CLK_Reset();
95 1 writeword(0x20);//发送写命令序列 clock register
96 1 //writeword(0x0d);//设置更新频率
97 1 // writeword(0x05);
98 1 writeword(0x05);
99 1 writeword(0x10);//set up register
100 1 writeword(0x42);
101 1 }
102
103 void CH2_init()
104 {
105 1 //AD7705_reset();
106 1 CLK_Reset();
107 1 writeword(0x21);//发送写命令序列 clock register
108 1 writeword(0x05);//设置更新频率
109 1 writeword(0x11);//set up register
110 1 //if(polarity==1)
111 1 writeword(0x42);
112 1 }
113
114 void AD7705_reset(void)
115 {
116 1 //AD_RST=1;
117 1 //delay();
C51 COMPILER V7.50 AD7705 09/26/2007 17:19:06 PAGE 3
118 1 delay();
119 1 AD_RST=0;
120 1 delay();
121 1 delay();
122 1 AD_RST=1;
123 1 delay();
124 1 delay();
125 1 AD_CS=0;
126 1 }
127
128 unsigned int ReadDataCh1_Ch2(bit mode)
129 {
130 1 uint AD16bit;
131 1 uchar i,DataH,DataL; //AD值的高位与低位
132 1 DataH=0;
133 1 DataL=0;
134 1 if(mode==1)
135 1 {
136 2 writeword(0x38); //第1通道
137 2 delay();
138 2 }
139 1 if(mode==0)
140 1 {
141 2 writeword(0x39); //第2通道
142 2 delay();
143 2 }
144 1 while(AD_REDY==1); //等待数据准备好
145 1
146 1 //Led=0;
147 1 delay();
148 1 AD_CLK=1;
149 1 AD_CS=0;
150 1 delay();
151 1 AD16bit=0;
152 1 AD_OUT=1;
153 1 for(i=0;i<16;i++)
154 1 {
155 2 AD16bit=AD16bit<<1;
156 2 AD_CLK=0;
157 2 if(AD_OUT==1)
158 2 AD16bit=AD16bit|0x01;
159 2 AD_CLK=1;
160 2 }
161 1 AD_CLK=1;
162 1 AD_IN=1;
163 1 /* for(i=0;i<8;i++)
164 1 {
165 1 AD_CLK=0;
166 1 delay();
167 1 DataH<<=1;
168 1 if(AD_OUT==1)
169 1 DataH|=0x01;
170 1 AD_CLK=1;
171 1 delay();
172 1
173 1 }
174 1 DataH=DataH&0xff;
175 1 for(i=0;i<8;i++)
176 1 {
177 1 AD_CLK=0;
178 1 delay();
179 1 DataL<<=1;
C51 COMPILER V7.50 AD7705 09/26/2007 17:19:06 PAGE 4
180 1 if(AD_OUT==1)
181 1 DataL|=0x01;
182 1 AD_CLK=1;
183 1 delay();
184 1 }
185 1 delay();
186 1 while(AD_REDY==0);
187 1 AD_CS=1;
188 1 AD_CLK=1;
189 1 AD16bit=DataH*256+DataL; //2个8位字节组合成1个16位字节 */
190 1 return(AD16bit);
191 1 }
192
193 void delay()
194 {
195 1 unsigned int j;
196 1 for(j=0;j<8;j++);
197 1 }
198
199 void INI7705(void)
200 {
201 1 writeword(0xff);
202 1 writeword(0xff);
203 1 writeword(0xff);
204 1 writeword(0xff);
205 1 writeword(0xff);
206 1 }
207
208
209
210
211
212
213
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 280 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 2
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -