📄 便携式温度计.lst
字号:
C51 COMPILER V8.08 便衉式蝊度计 02/14/2009 14:33:38 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 便衉式蝊度计
OBJECT MODULE PLACED IN 便携式温度计.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 便携式温度计.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************
2 ;便携式温度计
3 ;数码管引脚连接:a=P1.3 b=P1.2 c=P1.1 d=P1.0 e=P1.6 f=P1.4 g=P1.5 h=nc共阳;
4 ;编写人:芦庆
5 ;时间:2008年7月27日
6 ;主控芯片:AT89C2051-24PU
7 ;温度传感器:DS18B20
8 ;占用资源:定时器0,P1口,P3.2,P3.3,P3.4,P3.5,P3.7
9 ;晶振速度:6MHz
10 ;版本:1.0
11 ;ROM指令 代码
12 ;Read ROM(读ROM) [33H]
13 ;Match ROM(匹配ROM) [55H]
14 ;Skip ROM(跳过ROM] [CCH]
15 ;Search ROM(搜索ROM) [F0H]
16 ;Alarm search(告警搜索) [ECH]
17 ;
18 ;存储器操作指令 代码
19 ;Write Scratchpad(写暂存存储器) [4EH]
20 ;Read Scratchpad(读暂存存储器) [BEH]
21 ;Copy Scratchpad(复制暂存存储器) [48H]
22 ;Convert Temperature(温度变换) [44H]
23 ;Recall EPROM(重新调出) [B8H]
24 ;Read Power supply(读电源) [B4H]
25 ;
26 ************************************************************************/
27
28 /*****************数据类型定义***********************/
29 #define uchar unsigned char
30 #define uint unsigned int
31
32 /****************包含文件声明************************/
33 #include "intrins.h"
34 #include "AT89x051.H"
35
36 //定义数据引脚
37 sbit dq=P3^7;
38
39 /****************全局变量声明************************/
40 uchar flag;//18b20存在标志
41 uchar temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节
42 uchar id_buff[8];//64位id寄存
43 uchar *p;//地址指针
44 uchar Temperature;//温度换算中间寄存器
45 uchar code CrcTable [256]={
46 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
47 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
48 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
49 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
50 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
51 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
52 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
53 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
54 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
55 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
C51 COMPILER V8.08 便衉式蝊度计 02/14/2009 14:33:38 PAGE 2
56 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
57 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
58 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
59 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
60 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
61 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
62 uchar code DispDB[15]={//字形码
63 0xA0,0xF9,0x92,0xD0,0xC9,0xC4,0x84,0xF1,//0,1,2,3,4,5,6,7
64 0x80,0xC0,0xDF,0xD9,0x87,0x81,0xAE};//8,9,-,-1,F,A,L
65 uchar code DispCon[4]={0xFB,0xF7,0xEF,0xDF};//段位控制码
66 uchar DispLED[4];//数码管显示缓冲区
67
68 uchar code DayStr[]=__DATE__;
69 uchar code TimeStr[]=__TIME__;
70
71 /*****************精确延时函数************************/
72 void TempDelay (uchar us)//微秒级延时
73 {
74 1 while(us--);
75 1 }
76
77 /******************一般延时函数************************/
78 void mDelay(uint num)
79 {
80 1 uint i;
81 1 for(;num>0;num--)
82 1 { for(i=0;i<124;i++)
83 2 {;}
84 2 }
85 1 }
86
87 /********************18B20初始化函数******************/
88 void Init18b20 ()
89 {
90 1 dq=1;
91 1 _nop_();
92 1 dq=0;
93 1 TempDelay(86/2); //delay 530 uS//80
94 1 _nop_();
95 1 dq=1;
96 1 TempDelay(14/2); //delay 100 uS//14
97 1 _nop_();
98 1 _nop_();
99 1 _nop_();
100 1
101 1 if(dq==0)
102 1 flag = 1; //detect 1820 success!
103 1 else
104 1 flag = 0; //detect 1820 fail!
105 1 TempDelay(20/2); //20
106 1 _nop_();
107 1 _nop_();
108 1 dq = 1;
109 1 }
110
111 /********************向18B20写入一个字节***********/
112 void WriteByte (uchar wr) //单字节写入
113 {
114 1 uchar i;
115 1 for (i=0;i<8;i++)
116 1 {
117 2 dq = 0;
C51 COMPILER V8.08 便衉式蝊度计 02/14/2009 14:33:38 PAGE 3
118 2 _nop_();
119 2 dq=wr&0x01;
120 2 TempDelay(5/2); //delay 45 uS //5
121 2 _nop_();
122 2 _nop_();
123 2 dq=1;
124 2 wr >>= 1;
125 2 }
126 1 }
127
128 /***************读18B20的一个字节*******************/
129 uchar ReadByte() //读取单字节
130 {
131 1 uchar i,u=0;
132 1 for(i=0;i<8;i++)
133 1 {
134 2 dq = 0;
135 2 u >>= 1;
136 2 dq = 1;
137 2 if(dq==1)
138 2 u |= 0x80;
139 2 TempDelay (4/2);
140 2 _nop_();
141 2 }
142 1 return(u);
143 1 }
144
145 /*****************读18B20*************************/
146 void reads (uchar k) //reentrant
147 {
148 1 uchar i;
149 1 for(i=0;i<k;i++)
150 1 {
151 2 *p = ReadByte();
152 2 p++;
153 2 }
154 1 }
155
156 /********************CRC校验**********************/
157 uchar CRC (uchar j)
158 {
159 1 uchar i,crc_data=0;
160 1 for(i=0;i<j;i++) //查表校验
161 1 crc_data=CrcTable[crc_data^temp_buff[i]];
162 1 return (crc_data);
163 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -