📄 3b20.lst
字号:
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 3B20
OBJECT MODULE PLACED IN 3b20.OBJ
COMPILER INVOKED BY: d:\program files\Keil\C51\BIN\C51.EXE 3b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <reg51.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5
6 sbit TMDAT = P0^1; //根据实实际情况设定
7 uchar TMP[2],temp[2],TMP1[2],TMP2[2]; //读取后的4个温度值,将其除以2即可得出实际温度;
8 uchar SN[3][8]; //4个器件的序列号,先读出单个序列号后填上才可以读取温度
9 uchar f[3]; //结果是否为负温,“0”为正温,“1”为负温。
10
11
12 unsigned int code tab[]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0x8B,0x08,0x09,0xFF};
13
14 int keyval;
15 sfr key=0xb0;
16 sbit S3=P1^0;
17 sbit S2=P1^1;
18 sbit S1=P1^2;
19
20 //////////////////////////////////////////////////////////////////////////
21
22 ////////////////////////////////按键消抖沿时程序//////////////////////////
23 void delay(void)
24 {
25 1 unsigned int i;
26 1 for(i=0;i<600;i++);
27 1 }
28 ////////////////////////////////////////延时部分//////////////////////////
29 void dmsec (unsigned int count) //
30 { //
31 1 unsigned int i; //
32 1 while (count) //
33 1 { //
34 2
35 2 i = 115; //
36 2 while (i>0) i--; //
37 2 count--; //
38 2 } //
39 1 } //
40 //////////////////////////////////////////////////////////////////////////
41
42 /////////////////////////////////////// 发送复位//////////////////////////
43 void tmreset (void) //
44 { //
45 1 unsigned int i; //
46 1 TMDAT = 0; //
47 1 i = 103; //
48 1 while (i>0) i--; // 延时 900 uS(11.0592Mhz时) //
49 1 TMDAT = 1; //
50 1 i = 4; //
51 1 while (i>0) i--; //
52 1 } //
53 //////////////////////////////////////////////////////////////////////////
54
55 //判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 2
56
57 ////////////////////////////////////// 等待存在脉冲///////////////////////
58 void tmpre (void) //判断器件是否存在 //
59 { //
60 1 unsigned int i; //
61 1 while (TMDAT); //
62 1 while (~TMDAT); //
63 1 i = 4; while (i>0) i--; //
64 1 } //
65 //////////////////////////////////////////////////////////////////////////
66
67 ///////////////////////////////////// 读一位//////////////////////////////
68 bit tmrbit (void) //
69 { //
70 1 unsigned int i; //
71 1 bit dat; //
72 1 TMDAT = 0; i++; //
73 1 TMDAT = 1; i++; i++; //微量延时 //
74 1 dat = TMDAT; //
75 1 i = 8; while (i>0) i--; // 延时 //
76 1 return (dat); //
77 1 } //
78 //////////////////////////////////////////////////////////////////////////
79
80 //////////////////////////////////////// 读一个字节///////////////////////
81 unsigned char tmrbyte (void) //
82 { //
83 1 unsigned char i,j,dat; //
84 1 dat = 0; //
85 1 for (i=1;i<=8;i++) //
86 1 { //
87 2 j = tmrbit (); //
88 2 dat = (j << 7) | (dat >> 1); //
89 2 } //
90 1 return (dat); //
91 1 } //
92 //////////////////////////////////////////////////////////////////////////
93
94 /////////////////////////////////////// 写一个字节////////////////////////
95 void tmwbyte (unsigned char dat) //
96 { //
97 1 unsigned int i; //
98 1 unsigned char j; //
99 1 bit testb; //
100 1 for (j=1;j<=8;j++) //
101 1 { //
102 2 testb = dat & 0x01; //
103 2 dat = dat >> 1; //
104 2 if (testb) //
105 2 { //
106 3 TMDAT = 0; // 写0 //
107 3 i++; i++; //
108 3 TMDAT = 1; //
109 3 i = 8; while (i>0) i--; //
110 3 } //
111 2 else //
112 2 { //
113 3 TMDAT = 0; // 写0 //
114 3 i = 8; while (i>0) i--; //
115 3 TMDAT = 1; //
116 3 i++; i++; //
117 3 } //
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 3
118 2 } //
119 1 } //
120 //////////////////////////////////////////////////////////////////////////
121
122 /////////////////////////////////发送ds1820 开始转换//////////////////////
123 void tmstart (void) //
124 { //
125 1 tmreset (); //复位 //
126 1 tmpre (); //等待存在脉冲 //
127 1 dmsec (1); //延时 //
128 1 tmwbyte (0xcc); //跳过序列号命令,对所有器件有效 //
129 1 tmwbyte (0x44); //发转换命令 44H, //
130 1 } //
131 //////////////////////////////////////////////////////////////////////////
132
133
134 //////////////////////////////////读取温度////////////////////////////////
135 void tmrtemp() //
136 { //
137 1 uchar i,j; //
138 1 uchar a,b; //
139 1 for(j=0;j<1;j++) //
140 1 { //
141 2 tmreset(); //复位 //
142 2 dmsec(1); //延时 //
143 2 tmwbyte(0x55); //发送ROM匹配命令 // //
144 2 tmwbyte (0xbe); //发送读取命令 //
145 2 a = tmrbyte (); //连续读取两位温度 //
146 2 b = tmrbyte (); // //
147 2 }
148 1 } //
*** WARNING C280 IN LINE 137 OF 3B20.C: 'i': unreferenced local variable
149
150 //////////////////////////////////////////////////////////////////////////
151
152
153 //以下是读取器件序列号的子程序,需要读取序列时可在程序中调用;
154 //调用时确保总线中只有一只器件,若有多个器件时则读取出来的号码无效;
155 //将读取出来的序列号填到前面的数组中即可使用;
156 //平时可以将此子程序删除以节约空间。
157
158 //////////////////////////读取器件序列号子程序////////////////////////////
159 void rom() //
160 { //
161 1 //以下是定义8个序列号变量 //
162 1 uchar sn1; //
163 1 uchar sn2; //
164 1 uchar sn3; //
165 1
166 1 //
167 1 tmreset (); //复位 //
168 1 dmsec (1); //延时 //
169 1 tmwbyte(0x33); //发送读序列号子程序 //
170 1 sn1=tmrbyte(); //读取第一个序列号,应为16H; //
171 1 sn2=tmrbyte(); //读取第二个序列号,应为10H; //
172 1 sn3=tmrbyte(); //
173 1
174 1 } //
175 //////////////////////////////////////////////////////////////////////////
176 // main()函数
177 //////////////////////////////////////////////////////////////////////////
178 void main() //
C51 COMPILER V8.02 3B20 07/24/2007 18:01:21 PAGE 4
179 { //
180 1 do{ //
181 2 rom(); //调用读序列号子程序 //
182 2 tmstart(); //
183 2 dmsec(100); //如果是不断地读取的话可以不延时 //
184 2 tmrtemp(); //读取温度,执行完毕温度将存于TMP[]数组中//
185 2 }while(1);
186 1
187 1 } //
188 //////////////////////////////////////////////////////////////////////////
189
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 328 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -