?? ds18b20.lst
字號:
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE DS18B20.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************
2 ;便攜式溫度計
3 ;數碼管引腳連接:a=P1.2 b=P1.1 c=P1.0 d=P1.3 e=P1.4 f=P1.6 g=P1.5 h=P1.7共陽;
4 ;編寫人:蘆慶
5 ;時間:2008年7月27日
6 ;主控芯片:AT89C2051-24PU
7 ;溫度傳感器:DS18B20
8 ;占用資源:定時器0,P1口,P3.3,P3.4,P3.5
9 ;晶振速度:6MHz
10 ;版本:1.0
11 ;
12 ;ROM指令 代碼
13 ;Read ROM(讀ROM) [33H]
14 ;Match ROM(匹配ROM) [55H]
15 ;Skip ROM(跳過ROM] [CCH]
16 ;Search ROM(搜索ROM) [F0H]
17 ;Alarm search(告警搜索) [ECH]
18 ;
19 ;存儲器操作指令 代碼
20 ;Write Scratchpad(寫暫存存儲器) [4EH]
21 ;Read Scratchpad(讀暫存存儲器) [BEH]
22 ;Copy Scratchpad(復制暫存存儲器) [48H]
23 ;Convert Temperature(溫度變換) [44H]
24 ;Recall EPROM(重新調出) [B8H]
25 ;Read Power supply(讀電源) [B4H]
26 ************************************************************************/
27
28 /*******************文件包含**********************/
29 #include <MAIN.H>
30
31 /*****************外部變量聲明********************/
32 extern uchar flag;
33 extern uchar Temp[2];//原始溫度數據
34 extern uchar DispLED[4];//數碼管顯示緩沖區(qū)
35
36 /*******************變量聲明**********************/
37 uchar Temperature;
38 sbit dq=P3^7;//定義DS18B20數據引腳
39
40 /**************************微秒級延時*********************/
41 void TempDelay (uchar us)
42 {
43 1 while(us--);
44 1 }
45
46 /*****************18B20初始化函數***********************/
47 void Init18b20 ()
48 {
49 1 dq=1;
50 1 _nop_();
51 1 dq=0;
52 1 TempDelay(86/2); //delay 530 uS//80
53 1 _nop_();
54 1 dq=1;
55 1 TempDelay(14/2); //delay 100 uS//14
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 PAGE 2
56 1 _nop_();
57 1 _nop_();
58 1 _nop_();
59 1
60 1 if(dq==0)
61 1 flag = 1; //detect 1820 success!
62 1 else
63 1 flag = 0; //detect 1820 fail!
64 1 TempDelay(20/2); //20
65 1 _nop_();
66 1 _nop_();
67 1 dq = 1;
68 1 }
69
70 /**************************向18B20寫入一個字節(jié)******************/
71 void WriteByte (uchar wr) //單字節(jié)寫入
72 {
73 1 uchar i;
74 1 for (i=0;i<8;i++)
75 1 {
76 2 dq = 0;
77 2 _nop_();
78 2 dq=wr&0x01;
79 2 TempDelay(5/2); //delay 45 uS //5
80 2 _nop_();
81 2 _nop_();
82 2 dq=1;
83 2 wr >>= 1;
84 2 }
85 1 }
86
87 /*************************讀18B20的一個字節(jié)***********************/
88 uchar ReadByte() //讀取單字節(jié)
89 {
90 1 uchar i;
91 1 uchar u=0;
92 1 for(i=0;i<8;i++)
93 1 {
94 2 dq = 0;
95 2 u >>= 1;
96 2 dq = 1;
97 2 if(dq==1)
98 2 u |= 0x80;
99 2 TempDelay (4/2);
100 2 _nop_();
101 2 }
102 1 return(u);
103 1 }
104
105 /**********************延時函數****************************/
106 void mDelay(uint num)
107 {
108 1 uint i;
109 1 for(;num>0;num--)
110 1 { for(i=0;i<124;i++)
111 2 {;}
112 2 }
113 1 }
114
115 /********************溫度轉換全處理********************/
116 void Temperature_change(void)
117 {
C51 COMPILER V8.08 DS18B20 02/14/2009 15:37:26 PAGE 3
118 1 Init18b20 ();//初始化18B20
119 1 WriteByte(0xcc); //跳過ROM
120 1 WriteByte(0x44); //啟動溫度轉換
121 1 mDelay(50);//重要延時
122 1 Init18b20 ();
123 1 WriteByte(0xcc); //跳過ROM
124 1 WriteByte(0xbe); //讀取溫度
125 1 Temp[0]=ReadByte();//溫度低8位
126 1 Temp[1]=ReadByte();//溫度高8位
127 1 if(Temp[1]<0xF0)//溫度大于0度
128 1 {
129 2 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小數
130 2 Temperature=(Temp[0]>>4)+(Temp[1]<<4);
131 2 DispLED[2]=Temperature%10;//個位
132 2 DispLED[1]=Temperature/10;//十位
133 2 DispLED[0]=Temperature/100;//
134 2 }
135 1 else//溫度小于0度
136 1 {
137 2 Temp[0]=~Temp[0]+1;
138 2 Temp[1]=~Temp[1];
139 2 DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小數
141 2 DispLED[2]=Temperature%10;//個位
142 2 DispLED[1]=Temperature/10;//十位
143 2 DispLED[0]=Temperature/100+10;//百位+負號
144 2 }
145 1 }
146 void init_1820(void)
147 {
148 1 Init18b20 ();//初始化18B20
149 1 if(flag==0)//效驗錯誤
150 1 {
151 2 DispLED[0]=12;//字母F
152 2 DispLED[1]=13;//字母A
153 2 DispLED[2]=14;//字母L
154 2 DispLED[3]=14;//字母L
155 2 }
156 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 312 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -