?? ds18b20.lst
字號:
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 //顯示模塊
3
4 unsigned char code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
5 0x6f,0x63,0x39};
6 unsigned char disp_buf[]={0,0,0,0};
7 unsigned char code ledbit[]={0xfe,0xfd,0xfb,0xf7};
8 unsigned char ledno=0,ms5;
9 unsigned char temperature=0;//溫度值
10 unsigned int time;
11 sbit DQ =P3^3; //定義通信端口
12
13
14 void delay(unsigned int i)
15 {
16 1 while(i--);
17 1 }
18
19 //初始化函數
20 Init_DS18B20(void)
21 {
22 1 unsigned char x=0;
23 1 DQ = 1; //DQ復位
24 1 delay(8); //稍做延時
25 1 DQ = 0; //單片機將DQ拉低
26 1 delay(80); //精確延時 大于 480us
27 1 DQ = 1; //拉高總線
28 1 delay(14);
29 1 x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
30 1 delay(20);
31 1 }
32 //讀一個字節
33 ReadOneChar(void)
34 {
35 1 unsigned char i=0;
36 1 unsigned char dat = 0;
37 1 for (i=8;i>0;i--)
38 1 {
39 2 DQ = 0; // 給脈沖信號
40 2 dat>>=1;
41 2 DQ = 1; // 給脈沖信號
42 2 if(DQ)
43 2 dat|=0x80;
44 2 delay(4);
45 2 }
46 1 return(dat);
47 1 }
48 //寫一個字節
49 WriteOneChar(unsigned char dat)
50 {
51 1 unsigned char i=0;
52 1 for (i=8; i>0; i--)
53 1 {
54 2 DQ = 0;
55 2 DQ = dat&0x01;
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 2
56 2 delay(5);
57 2 DQ = 1;
58 2 dat>>=1;
59 2 }
60 1
61 1 }
62 //讀取溫度
63 ReadTemperature(void)
64 {
65 1 unsigned char a=0;
66 1 unsigned char b=0;
67 1 unsigned int t=0;
68 1 float tt=0;
69 1 Init_DS18B20();
70 1 WriteOneChar(0xCC); // 跳過讀序號列號的操作
71 1 WriteOneChar(0x44); // 啟動溫度轉換
72 1 Init_DS18B20();
73 1 WriteOneChar(0xCC); //跳過讀序號列號的操作
74 1 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
75 1 a=ReadOneChar();
76 1 b=ReadOneChar();
77 1 t=b;
78 1 t<<=8;
79 1 t=t|a;
80 1 tt=t*0.0625;
81 1 t= tt*10+0.5; //放大10倍輸出并四舍五入---此行沒用
82 1 return(tt);
83 1 }
84
85
86 main()
87 {
88 1 TMOD=0x21;
89 1 EA=1;
90 1 ET0=1;
91 1 ET1=1;
92 1 TR0=1;
93 1 TR1=1;
94 1 TH0=0xee;
95 1 TL0=0x00;
96 1 TH1=0xff;
97 1 TL1=0xfe;
98 1
99 1 while(1)
100 1 {
101 2
102 2
103 2 }
104 1 }
105
106 void tiemr1(void) interrupt 3
107 {
108 1 time++;
109 1 if(time==20000)
110 1 {
111 2 temperature=ReadTemperature();//讀溫度
112 2 time=0;
113 2 }
114 1
115 1
116 1 }
117
C51 COMPILER V7.20 DS18B20 10/26/2007 10:04:35 PAGE 3
118 void timer0(void) interrupt 1
119 {
120 1 TR0=0;
121 1 TH0=0xee;
122 1 TL0=0x00;
123 1 P1=0xff;
124 1
125 1 disp_buf[0]=temperature/10;
126 1 disp_buf[1]=temperature%10;
127 1 disp_buf[2]=10;
128 1 disp_buf[3]=11;
129 1 P1=ledbit[ledno];
130 1 P0=segtab[disp_buf[ledno]];
131 1 ledno++;
132 1 if(ledno>3) ledno=0;
133 1 //ms5++;
134 1 TR0=1;
135 1
136 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 428 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 4
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 + -