?? ds18b20c2.lst
字號:
C51 COMPILER V8.02 DS18B20C2 08/10/2007 21:47:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20C2
OBJECT MODULE PLACED IN DS18B20C2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20C2.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************
2 /* 這是直接用C51高級語言編寫的DS18B20轉換程序-沒有調用匯編語言,*/
3 /* 文件名DS18B20C2.C */
4 /* 功能:本程序主要是讀出單個DS18B20芯片轉換后的溫度值,范圍 */
5 /* (-55℃~125℃)。單片機的P1.0接DS18B20 的BQ。 */
6 /* flag為溫度值的正負號標志單元, flag 為"1"時表示溫度值為負值*/
7 /* ,為"0"時表示溫度值為正值。 變量cc中保存讀出的溫度值。 */
8 /* 本程序僅適合單個DS18B20 和51單片機的連接,晶振為12MHZ左右。*/
9 /****************************************************************/
10 #include <REG52.H>
11
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 sbit DQ =P1^0; //定義端口
16 union{
17 uchar c[2];
18 uint x;
19 }temp;
20 uchar flag;
21 uint cc;
22
23 void delay(uint useconds) //延時程序
24 {
25 1 for(;useconds>0;useconds--);
26 1 }
27
28 uchar ow_reset(void) //復位
29 {
30 1 uchar presence;
31 1 DQ = 0; // DQ 低電平
32 1 delay(29); // 480us
33 1 DQ = 1; // DQ 高電平
34 1 delay(3); // 等待
35 1 presence = DQ; // presence 信號
36 1 delay(25);
37 1 return(presence); // 0允許, 1 = 禁止
38 1 }
39
40
41 uchar read_byte(void) //從1-wire 總線上讀取一個字節
42 {
43 1 uchar i;
44 1 uchar value = 0;
45 1 for (i=8;i>0;i--)
46 1 {
47 2 value>>=1;
48 2 DQ = 0;
49 2 DQ = 1;
50 2 delay(1);
51 2 if(DQ)value|=0x80;
52 2 delay(6);
53 2 }
54 1 return(value);
55 1 }
C51 COMPILER V8.02 DS18B20C2 08/10/2007 21:47:40 PAGE 2
56
57 void write_byte(uchar val) //向 1-wire 總線上寫一個字節
58 {
59 1 uchar i;
60 1 for (i=8; i>0; i--) // 一次寫一字節
61 1 {
62 2 DQ = 0;
63 2 DQ = val&0x01;
64 2 delay(5);
65 2 DQ = 1;
66 2 val=val/2;
67 2 }
68 1 delay(5);
69 1 }
70
71 uchar Read_Temperature(void) //讀取溫度
72 {
73 1 ow_reset();
74 1 write_byte(0xCC); // 跳過 ROM
75 1 write_byte(0xBE); // 讀
76 1 temp.c[1]=read_byte();
77 1 temp.c[0]=read_byte();
78 1 ow_reset();
79 1 write_byte(0xCC);
80 1 write_byte(0x44); // 開始
81 1 return temp.x/2;
82 1 }
83 void main() //主程序
84 {
85 1 delay(10);
86 1 EA=0;
87 1 flag=0;
88 1 Read_Temperature(); //讀取雙字節溫度
89 1 cc=temp.c[0]*256.0+temp.c[1];
90 1 if (temp.c[0]>0xf8) {flag=1;cc=~cc+1;}
91 1 cc=cc*0.0625; //計算出溫度值
92 1 while(1);
93 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 281 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -