📄 ad7416_new.lst
字号:
C51 COMPILER V7.10 AD7416_NEW 11/04/2004 13:44:45 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE AD7416_NEW
OBJECT MODULE PLACED IN ad7416_new.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ad7416_new.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*AD7416温度传感器接口程序*/
2 /*2004年11月4日*/
3 #include <reg51.h>
4 #include <intrins.h>
5 #include <string.h>
6 #include <stdio.h>
7 sbit SDA = P3^5;
8 sbit SCL = P3^4;
9
10 char Start() //当SCL为高时,SDA由高到低跳变,认为开始
11 {
12 1 SCL=1;
13 1 SDA=1;
14 1 _nop_();
15 1 _nop_();
16 1 _nop_();
17 1 _nop_();
18 1 if( SCL==0 || SDA==0 ) return 0; //如果不满足条件,开始错误
19 1 else
20 1 {
21 2 SCL=1; //建立开始条件
22 2 _nop_();
23 2 _nop_(); //开始条件为:当时钟SCL为高时,SDA产生一个由高到低的跳变
24 2 _nop_();
25 2 _nop_();
26 2 _nop_();
27 2 _nop_();
28 2 SDA=0;
29 2 _nop_();
30 2 _nop_();
31 2 _nop_();
32 2 _nop_();
33 2 _nop_();
34 2 SCL=0;
35 2 _nop_();
36 2 _nop_();
37 2 _nop_();
38 2 _nop_();
39 2 _nop_();
40 2 SDA=1;
41 2 }
42 1 }
43
44 void Stop() //当SCL为高时,SDA由低到高发生跳变,这认为停止
45 {
46 1 SDA=0;
47 1 _nop_();
48 1 _nop_();
49 1 _nop_();
50 1 _nop_();
51 1 _nop_();
52 1 SCL=1;
53 1 _nop_();
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V7.10 AD7416_NEW 11/04/2004 13:44:45 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 _nop_();
59 1 _nop_();
60 1 SDA=1;
61 1 }
62
63 char Shin() //读入一个字节的数据
64 {
65 1 char i,RetByte;
66 1 for(i=0;i<8;i++)
67 1 {
68 2 SCL=0;
69 2 _nop_();
70 2 _nop_();
71 2 _nop_();
72 2 _nop_();
73 2 _nop_();
74 2 SCL=1;
75 2 _nop_();
76 2 _nop_();
77 2 RetByte=RetByte<<1;
78 2 if( SDA==1 ) RetByte=RetByte|0x01;
79 2 }
80 1 SCL=0;
81 1 _nop_();
82 1 _nop_();
83 1 SDA=1;
84 1 return RetByte;
85 1 }
86
87 void Shout( char Byte )//写一个字节的数据
88 {
89 1 char i;
90 1 for(i=0;i<8;i++)
91 1 {
92 2 SCL=0;
93 2 _nop_();
94 2 _nop_();
95 2 if( Byte&0x80 ) SDA=1;
96 2 else SDA=0;
97 2 _nop_();
98 2 _nop_();
99 2 Byte=Byte<<1;
100 2 SCL=1;
101 2 _nop_();
102 2 _nop_();
103 2 _nop_();
104 2 _nop_();
105 2 _nop_();
106 2 }
107 1 SCL=0;
108 1 _nop_();
109 1 _nop_();
110 1 _nop_();
111 1 _nop_();
112 1 SDA=1;
113 1 }
114
115 char TestAck() //检察是否有应答信号
116 {
117 1 char rf=0; //是否应答标志
C51 COMPILER V7.10 AD7416_NEW 11/04/2004 13:44:45 PAGE 3
118 1 SCL=0;
119 1 _nop_(); //应答是在时钟的低时期将SDA拉低来产生应答
120 1 _nop_();
121 1 _nop_();
122 1 SDA=1;
123 1 _nop_();
124 1 _nop_();
125 1 SCL=1;
126 1 _nop_();
127 1 _nop_();
128 1 _nop_();
129 1 _nop_();
130 1 if( SDA==1 ) rf=1;//没有应答信号,置标志为高
131 1 else rf=0;
132 1 SCL=0;
133 1 _nop_();
134 1 _nop_();
135 1 _nop_();
136 1 return rf;
137 1 }
138
139 //unsigned int LM74_Read(void)
140 float LM74_Read(void)
141 {
142 1 unsigned char rc_h=0, rc_l=0,i;
143 1 // unsigned int bbData,sum;
144 1 float hight,low,sum,d1,d2,tempt;
145 1 unsigned char a,b;
146 1
147 1 Start();
148 1 Shout( 0x90 ); //发送地址信号:地址为000
149 1 if( !TestAck() )
150 1 {
151 2 Shout(0); //选中温度数据寄存器
152 2 TestAck();
153 2 }
154 1 Stop();
155 1
156 1 sum=0.0;
157 1 for(i=0;i<10;i++)
158 1 {
159 2 Start();
160 2 Shout( 0x91 ); //读温度寄存器中的数据
161 2 if( !TestAck() )
162 2 {
163 3 rc_h=Shin(); //温度数据高8位
164 3 if( !TestAck() )
165 3 rc_l=Shin(); //温度数据低8位
166 3 TestAck();
167 3 }
168 2 Stop();
169 2
170 2 // bbData=rc_h;
171 2 // bbData=_irol_(bbData,8);
172 2 // bbData=bbData|rc_l;
173 2 // bbData=_iror_(bbData,6);
174 2 // bbData=bbData&0x0FFF;
175 2 hight=rc_h;
176 2 a=rc_l&0x80;
177 2 b=rc_l&0x40;
178 2 if(a==1)
179 2 d1=0.5;
C51 COMPILER V7.10 AD7416_NEW 11/04/2004 13:44:45 PAGE 4
180 2 else d1=0.0;
181 2 if(b==1)
182 2 d2=0.25;
183 2 else d2=0.0;
184 2 low=d1+d2;
185 2 sum+=(hight+low);
186 2
187 2
188 2 // sum+=bbData;
189 2 }
190 1 // bbData=sum/10;
191 1 // return (bbData);
192 1 tempt=sum/10.0;
193 1 return(tempt);
194 1 }
195
196 void LM74_Set()
197 {
198 1 unsigned char rc_l;
199 1 // unsigned char rc_h, rc_l;
200 1 // unsigned int bbData;
201 1
202 1 Start();
203 1 Shout( 0x90 ); //发送地址信号,并为写
204 1 if( !TestAck() )
205 1 {
206 2 Shout( 1 ); //设置配置寄存器
207 2 if( !TestAck() )
208 2 {
209 3 Shout(0x0); //写配置寄存器内容
210 3 TestAck();
211 3 }
212 2 }
213 1 Stop();
214 1
215 1 Start();
216 1 Shout( 0x91 ); //读数据
217 1 if( !TestAck() )
218 1 {
219 2 rc_l=Shin();
220 2 TestAck();
221 2 }
222 1 Stop();
223 1
224 1 }
225 main()
226 {
227 1 float temp;
228 1 TMOD=0x20|TMOD;
229 1 TL1=0xfd;
230 1 TH1=0xfd;
231 1 TR1=1;
232 1 SCON=0x50;
233 1 TI=1;
234 1 puts("the temp is;\r\n");
235 1 LM74_Set();
236 1 temp=LM74_Read();
237 1 printf("%.2f\r\n",temp);
238 1
239 1 }
240
C51 COMPILER V7.10 AD7416_NEW 11/04/2004 13:44:45 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 521 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 24
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 + -