📄 ds1620.lst
字号:
C51 COMPILER V8.02 DS1620 08/10/2007 12:07:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS1620
OBJECT MODULE PLACED IN DS1620.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1620.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************
2 /* 这是直接用C51高级语言编写的DS1620转换程序-没有调用汇编语言。*/
3 /* 文件名DS1620.C */
4 /* 功能:本程序主要是读出DS1620芯片的温度转换值,转换值先放 */
5 /* 在变量temp1中。转换值范围-55℃~125℃。 若flag0=0为 */
6 /* 正温度,若flag0=1为负温度值,最终结果在浮点变量cc中。 */
7 /* 本程序适合DS1620 和51系列单片机的连接,晶振为12MHZ左右。*/
8 /****************************************************************/
9
10 #include "REG52.h"
11 #include "intrins.h"
12
13 #define uchar unsigned char
14 #define uint unsigned int
15
16 sbit DQ = P1^0;
17 sbit CLK_CONV = P1^1;
18 sbit RST = P1^2;
19
20 uint idata temp1;
21 uchar idata val,flag,temp2;
22 float idata cc;
23
24 void write_byte(uchar val) //写字节子程序
25 {
26 1 uchar i;
27 1 uchar b;
28 1 b=1;
29 1 for(i=0;i<8;i++)
30 1 {
31 2 CLK_CONV=0;
32 2 DQ=(val&b);
33 2 CLK_CONV=1;
34 2 b<<=1;
35 2 }
36 1 }
37 uchar read_byte(void) //读字节子程序
38 {
39 1 uchar i;
40 1 uchar value,b;
41 1 value=0;
42 1 b=1;
43 1 for(i=0;i<8;i++)
44 1 {
45 2 DQ=1;
46 2 CLK_CONV=0;
47 2 if (DQ)
48 2 value|=b;
49 2 CLK_CONV=1;
50 2 b<<=1;
51 2 }
52 1 return(value);
53 1 }
54 uchar DS1620startConv(void) //DS1620 开始转换
55 {
C51 COMPILER V8.02 DS1620 08/10/2007 12:07:20 PAGE 2
56 1 RST=1;
57 1 write_byte(0xEE);
58 1 RST=0;
59 1 return 0x00;
60 1 }
61
62 uchar DS1620ReadConf(void) //DS1620读配置 返回值为配置寄存器内容
63 {
64 1 uchar tmp;
65 1 RST=1;
66 1 write_byte(0xAC);
67 1 tmp=read_byte();
68 1 RST=0;
69 1 return tmp;
70 1 }
71 //DS1620 写配置,入回参数为配置寄存器新配置内容
72 uchar DS1620SetConf(uchar val)
73 {
74 1 uchar tmp;
75 1 RST=1;
76 1 write_byte(0x0C);
77 1 write_byte(val);
78 1 RST=0;
79 1 return tmp;
80 1 }
81 //DS1620 读温度转换数据,在返回值的低9位
82 uint DS1620read(void)
83 {
84 1 uchar hbyte,lbyte;
85 1 uint temp;
86 1 RST=1;
87 1 write_byte(0xAA);
88 1 lbyte=read_byte();
89 1 hbyte=read_byte();
90 1 RST=0;
91 1 temp=hbyte;
92 1 temp<<=8;
93 1 temp|=lbyte;
94 1 return temp;
95 1 }
96
97 void main() //主程序
98 {
99 1 SP=0xcf;
100 1 EA=0;
101 1 flag=0;
102 1 val=0x0a;
103 1 DS1620SetConf(val);
104 1 val=DS1620ReadConf();
105 1 DS1620startConv();
106 1 temp1=DS1620read(); //把温度值放入变量temp1中。
107 1 temp1=temp1&0x01ff; //保留数值有用部分
108 1 if (temp1>0xff) {
109 2 flag=1;
110 2 temp2=temp1-256;
111 2 temp2=~temp2+1;
112 2 temp1=temp2;
113 2 }
114 1 cc=(float)temp1/2.0; //计算出温度值
115 1 while(1);
116 1 }
C51 COMPILER V8.02 DS1620 08/10/2007 12:07:20 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 214 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = 9 ----
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 + -