📄 cs5532.lst
字号:
C51 COMPILER V7.50 CS5532 09/24/2007 10:48:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CS5532
OBJECT MODULE PLACED IN cs5532.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe cs5532.c DB OE SMALL ROM(LARGE)
line level source
1 /* CS5532程序
2 * Copyright (c) 2007 宁波柯力电气制造有限公司
3 * All rights reserved
4
5 * 文件名称: CS5532_C
6 * 文件标示: cs5532数据采样程序函数
7 * 摘 要: 函数及变量定义。
8
9
10 * 当前版本: 1.0
11 * 作 者: 张勇
12 * 完成日期: 2007年8月22日
13 */
14
15
16 #define CS5532_C
17
18 #include "reg8252.h"
19 #include "intrins.h"
20
21 // Original design board
22 sbit CS5532_CS=P3^7;
23 sbit CS5532_SDI=P3^6;
24 sbit CS5532_SCLK=P3^5;
25 sbit CS5532_SDO=P3^4;
26
27 /* 3线接口的连接,与实际电路有关 */
28 sbit AD420_DIN = P1^2;
29 sbit AD420_CLOCK = P1^3;
30 sbit AD420_LATCH = P1^4;
31 sbit AD420_CLEAR = P1^5;
32
33 unsigned char Sample_buf[4];
34
35
36 void CS5532_Write_Byte(unsigned char dat);
37 //void CS5532_Read_Data(unsigned char address_pt);
38 //void CS5532_Read_Reg(unsigned char address_pt);
39 void CS5532_Sample(void);
40 void CS5532_Init(void);
41
42
43
44 /***************************************************************
45 1ms延时
46 ***************************************************************/
47 void Delay_1ms(unsigned char count)
48 {
49 1 unsigned char i,j;
50 1 while(count--)
51 1 {
52 2 for(i=9;i>0;i--)
53 2 {
54 3 for(j=45;j>0;j--)
55 3 ;
C51 COMPILER V7.50 CS5532 09/24/2007 10:48:07 PAGE 2
56 3 }
57 2 }
58 1 }
59
60 void CS5532_Write_Byte(unsigned char dat)//向CS5532写一字节数据
61 {
62 1 unsigned char i;
63 1 CS5532_CS=0;
64 1 CS5532_SCLK=0;//时钟低
65 1 for(i=0;i<8;i++)
66 1 {
67 2 if((dat<<i)&0x80)
68 2 CS5532_SDI=1; //数据送到SPI的SDI口
69 2 else
70 2 CS5532_SDI=0;
71 2 CS5532_SCLK=1; //时钟高
72 2 _nop_();
73 2 _nop_();
74 2 _nop_();
75 2 CS5532_SCLK=0; //时钟低
76 2 _nop_();
77 2 _nop_();
78 2 _nop_();
79 2 }
80 1 }
81
82
83 void CS5532_Read_Data(void)
84 {
85 1 unsigned char i,j;
86 1 CS5532_CS=0;
87 1 CS5532_SCLK=0;//时钟低
88 1 for(j=0;j<4;j++)
89 1 {
90 2 for(i=0;i<8;i++)
91 2 {
92 3 CS5532_SCLK=1; //时钟高
93 3 _nop_();
94 3 _nop_();
95 3 Sample_buf[j]<<=1;
96 3 if(CS5532_SDO)
97 3 Sample_buf[j] |= 0x01; //从SDO读取数据
98 3 else
99 3 Sample_buf[j] &= 0xfe;
100 3 _nop_();
101 3 _nop_();
102 3 CS5532_SCLK=0; //时钟低
103 3 _nop_();
104 3 _nop_();
105 3 }
106 2 }
107 1 }
108 void CS5532_Read_Reg(unsigned char dat)
109 {
110 1 CS5532_Write_Byte(dat);
111 1 CS5532_Read_Data();
112 1 CS5532_CS=1;
113 1 CS5532_SDI = 0;
114 1 CS5532_SCLK = 0; //时钟低
115 1 }
116 void CS5532_Sample(void)
117 {
C51 COMPILER V7.50 CS5532 09/24/2007 10:48:07 PAGE 3
118 1 unsigned char i;
119 1 CS5532_CS=0; //片选使能
120 1 CS5532_SDI = 0;
121 1 CS5532_SCLK = 0; //时钟低
122 1 for(i=0;i<8;i++)
123 1 {
124 2 _nop_();
125 2 _nop_();
126 2 CS5532_SCLK = 1;
127 2 _nop_();
128 2 _nop_();
129 2 CS5532_SCLK = 0; //时钟低
130 2 }
131 1 CS5532_Read_Data();
132 1 CS5532_CS = 1; //片选使能
133 1 CS5532_SDI = 1;
134 1 }
135
136 void CS5532_Init(void)
137 {
138 1 unsigned char i;
139 1 //串口初始化,串行口为命令状态
140 1 CS5532_CS=0; //片选使能
141 1 reset:
142 1 for(i=0;i<15;i++)
143 1 {
144 2 CS5532_Write_Byte(0xff);//发送命令
145 2 }
146 1 CS5532_Write_Byte(0xfe);
147 1 CS5532_SDI = 1;
148 1 CS5532_CS = 1;
149 1 CS5532_SDI = 0;
150 1
151 1 CS5532_Write_Byte(0x03);////写入CS5532复位命令
152 1 CS5532_Write_Byte(0x22);
153 1 CS5532_Write_Byte(0x00);
154 1 CS5532_Write_Byte(0x00);
155 1 CS5532_Write_Byte(0x00);
156 1
157 1 CS5532_Read_Reg(0x0b);//读取配置寄存器内容
158 1 if(!(Sample_buf[0]&0x10)) //acc.4=0 复位没有完成,再来一次复位过程
159 1 {
160 2 goto reset;
161 2 }
162 1
163 1 CS5532_Write_Byte(0x03);//写配置寄存器
164 1 CS5532_Write_Byte(0x00);
165 1 CS5532_Write_Byte(0x08);
166 1 CS5532_Write_Byte(0x00);
167 1 CS5532_Write_Byte(0x00);
168 1
169 1 CS5532_Write_Byte(0x05);//写通道设置寄存器
170 1 CS5532_Write_Byte(0x29);
171 1 CS5532_Write_Byte(0x80);
172 1 CS5532_Write_Byte(0x29);
173 1 CS5532_Write_Byte(0x80);
174 1
175 1 CS5532_Write_Byte(0xc0);//启动A/D连续转换
176 1 }
177 /********************************************************
178 向AD420写数据
179 ********************************************************/
C51 COMPILER V7.50 CS5532 09/24/2007 10:48:07 PAGE 4
180 void Write_Ad420(unsigned int dat)
181 {
182 1 unsigned char i;
183 1 AD420_CLOCK = 0;
184 1 AD420_DIN = 0;
185 1 AD420_LATCH = 0;
186 1 for(i=0;i<16;i++)
187 1 {
188 2 if((dat<<i)&0x8000)
189 2 {
190 3 AD420_DIN = 1;
191 3 _nop_();
192 3 _nop_();
193 3 _nop_();
194 3 _nop_();
195 3 _nop_();
196 3 _nop_();
197 3 _nop_();
198 3 _nop_();
199 3 _nop_();
200 3 _nop_();
201 3 _nop_();
202 3 _nop_();
203 3 }
204 2 else
205 2 {
206 3 AD420_DIN = 0;
207 3 _nop_();
208 3 _nop_();
209 3 _nop_();
210 3 _nop_();
211 3 _nop_();
212 3 _nop_();
213 3 _nop_();
214 3 _nop_();
215 3 _nop_();
216 3 _nop_();
217 3 _nop_();
218 3 _nop_();
219 3 }
220 2 AD420_CLOCK = 0;
221 2 _nop_();
222 2 _nop_();
223 2 _nop_();
224 2 _nop_();
225 2 _nop_();
226 2 _nop_();
227 2 _nop_();
228 2 _nop_();
229 2 _nop_();
230 2 _nop_();
231 2 _nop_();
232 2 _nop_();
233 2 AD420_CLOCK = 1;
234 2 Delay_1ms(1);
235 2
236 2 }
237 1 AD420_CLOCK = 0;
238 1 // AD420_DIN = 1;
239 1 AD420_LATCH = 1;
240 1 Delay_1ms(1);
241 1 // AD420_LATCH = 0;
C51 COMPILER V7.50 CS5532 09/24/2007 10:48:07 PAGE 5
242 1 Delay_1ms(1);
243 1 }
244
245 void main()
246 {
247 1 unsigned int hh;
248 1 unsigned long xx,zz;
249 1 CS5532_Init();
250 1 while(1)
251 1 {
252 2 CS5532_Sample();
253 2 zz = Sample_buf[0];
254 2 zz <<= 8;
255 2 zz |= Sample_buf[1];
256 2 zz <<= 8;
257 2 zz |= Sample_buf[2];
258 2 zz &= 0xffffff;
259 2 xx = (zz-0)/50; //转化为16bit的数字量
260 2 hh = xx;
261 2 _nop_();
262 2 Write_Ad420(0x8000);
263 2
264 2 /* while(1)
265 2 {
266 2 P1_2 = 0;
267 2 P1_3 = 0;
268 2 P1_2 = 1;
269 2 P1_3 = 1;
270 2 }
271 2
272 2 */
273 2 }
274 1 }
275
276
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 493 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 10
IDATA SIZE = ---- ----
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 + -