📄 ad7705.lst
字号:
C51 COMPILER V7.50 AD7705 05/28/2007 15:49:33 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 uint ch;
3 unsigned char ad7705timer;
4 /*
5 编写:bobo
6 AD7705寄存器
7 1:通信寄存器
8 DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
9 DRDY:写操作时此位为0。
10 RS2、RS1、RS0:选择寄存器。000:通信寄存器; 001:设置寄存器; 010:时钟寄存器。
11 R/W:0写操作; 1读操作.
12 STBY:等待模式。0正常工作模式.
13 CH1 CH0:通道选择。
14
15 2:设置寄存器
16 MD1 MD0 G2 G1 G0 B/U BUF FSYNC
17 MD1 MD0:校准模式选择。00正常模式; 01自校准模式; 10 零刻度校准模式; 11全刻度校准模式.
18 G2 G1 G0:增益选择位。
19 B/U:单极性与双极性选择。0双极,1单极。
20 BUF:缓冲。1缓冲,0无缓冲。
21 FSYNC:同步过滤器。
22
23 3:时钟寄存器
24 ZER0 ZER0 ZER0 CLKDIS CLKDIV CLK FS1 FS0
25 ZER0:0必须写进该位,才能保证7705的运转正确。
26 CLKDIS:主时钟禁止位。"1"禁止MCLKOUT脚输出。
27 CLKDIV:时钟分频位。"1"主时钟二频; "0"不分频。
28 CLK:时钟位。2.4576M/4.9152M时对应CLK=1;1M/2M时对应CLK=0.
29 FS0 FS1:数据刷新选择位。应与CLK结合来决定数据刷新速度。
30 */
31
32
33 /*
34 STC看门狗介绍WDT_CONTR:
35 -- -- EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
36 EN_WDT:看门狗允许位,设置为1时看门狗启动。
37 CLR_WDT:看门狗清0位,设置为1时看门狗重新计数,硬件将自动清0此位
38 IDLE_WDT:当设置为1时看门狗定时器在空闲模式下计数;
39 当设置为0时看门狗定时器在空闲模式下不计数.
40 PS2 PS1 PS0:看门狗定时器分频值。
41
42 */
43
44
45
46 /* AD7705软件延时 */
47 void Wait7705(unsigned int t)
48 {
49 1 for( ;t>0 ;t-- );
50 1 }
51
52
53
54 void writeword(unsigned int byteword)
55 {
C51 COMPILER V7.50 AD7705 05/28/2007 15:49:33 PAGE 2
56 1 unsigned int AD16bit,Token;
57 1 unsigned char i ;
58 1 AD_CLK=1;
59 1 AD_CS=0;//开始
60 1 delay();
61 1 Token=0x80;
62 1 AD16bit=byteword;
63 1 for(i=0;i<8;i++)
64 1 {
65 2 /*if(AD16bit&Token)
66 2 AD_IN=1;//输入数据位
67 2 else AD_IN=0;
68 2
69 2 AD_CLK=1;
70 2 delay();
71 2 AD_CLK=0;
72 2 delay();
73 2 AD_CLK=1;
74 2 delay();
75 2 Token=Token>>1;*/
76 2 AD_CLK=0;
77 2 delay();
78 2 if(AD16bit&Token)
79 2 AD_IN=1;//输入数据位
80 2 else AD_IN=0;
81 2 AD_CLK=1;
82 2 delay();
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 uint getch(uchar chanl)
91 {
92 1 uchar count;
93 1 if(AD_REDY==0)
94 1 {
95 2 count++;
96 2 if(count==3)
97 2 count=0;
98 2 if(count==1)
99 2 {
100 3 writeword(chanl);
101 3 ch=readdata();
102 3 }
103 2 if(count==2)
104 2 {
105 3 writeword(chanl);
106 3 ch=readdata();
107 3 }
108 2 }
109 1 return(ch);
110 1 }
111 unsigned int readdata()
112 {
113 1 unsigned int AD16bit;
114 1 unsigned char i,DataH,DataL;
115 1 DataH=0;
116 1 DataL=0;
117 1 // writeword(0x38); //设置读当前通道数据
C51 COMPILER V7.50 AD7705 05/28/2007 15:49:33 PAGE 3
118 1 // while(AD_REDY==1); //等待数据准备好
119 1 delay();
120 1 AD_CLK=1;
121 1 AD_CS=0;
122 1 delay();
123 1 AD16bit=0;
124 1 AD_OUT=1;
125 1 for(i=0;i<8;i++)
126 1 {
127 2 AD_CLK=0;
128 2 DataH<<=1;
129 2 delay();
130 2 AD_CLK=1;
131 2 delay();
132 2 if(AD_OUT==1)
133 2 DataH|=0x01;
134 2 // DataH++;
135 2 // DataH<<=1;
136 2 }
137 1 DataH=DataH&0xff;
138 1 for(i=0;i<8;i++)
139 1 {
140 2 AD_CLK=0;
141 2 DataL<<=1;
142 2 delay();
143 2 AD_CLK=1;
144 2 delay();
145 2 if(AD_OUT==1)
146 2 DataL|=0x01;
147 2 // DataL++;
148 2 // DataL<<=1;
149 2 }
150 1 DataL=DataL&0xff;
151 1 /* for(i=0;i<16;i++)
152 1 {
153 1 // AD16bit=AD16bit<<1;
154 1 AD_CLK=0;
155 1 // if(i<15)
156 1 AD16bit=AD16bit<<=1;
157 1 delay();
158 1 AD_CLK=1;
159 1 delay();
160 1 if(AD_OUT==1)
161 1 AD16bit|=0x01;//读取数据位
162 1 // AD16bit=AD16bit++;//读取数据位
163 1 }*/
164 1 delay();
165 1 while(AD_REDY==0);
166 1 AD_CS=1;
167 1 AD16bit=DataH*256+DataL;
168 1 // AD16bit=DataL;
169 1 return(AD16bit);
170 1 }
171
172 /*
173 读取第1通道或第二通道的AD值
174 mode:1时读取第1通道值;2时读取第2通道值。
175 */
176 void CH1_init(void)
177 {
178 1 AD_CS=0;
179 1 writeword(0x20);//发送写命令序列 clock register
C51 COMPILER V7.50 AD7705 05/28/2007 15:49:33 PAGE 4
180 1 AD_CS=1;
181 1 AD_CS=0;
182 1 // writeword(0x09);//设置更新频率
183 1 writeword(0x0c);//设置更新频率
184 1 AD_CS=1;
185 1 AD_CS=0;
186 1 writeword(0x10);//set up register
187 1 AD_CS=1;
188 1 AD_CS=0;
189 1 // writeword(0x44);
190 1 writeword(0x46);
191 1 AD_CS=1;
192 1 }
193
194 void CH2_init(void)
195 {
196 1 AD_CS=0;
197 1 writeword(0x21);//发送写命令序列 clock register
198 1 AD_CS=1;
199 1 AD_CS=0;
200 1 writeword(0x0c);//设置更新频率
201 1 AD_CS=1;
202 1 AD_CS=0;
203 1 writeword(0x11);//set up register
204 1 AD_CS=1;
205 1 AD_CS=0;
206 1 writeword(0x46);
207 1 AD_CS=1;
208 1 }
209
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -