?? 11.lst
字號:
C51 COMPILER V7.06 11 04/11/2008 13:23:08 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 11
OBJECT MODULE PLACED IN 11.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 11.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 uchar l,m,s;
5 sbit diao=P3^5;
6
7 uchar tplsb,tpmsb;//溫度值低位,高位字節
8 sbit DQ=P3^7;//數據通信線
9
10 /*延時t毫秒*/
11 void delay(uint t)
12 { uint i;
13 1 while(t--)
14 1 {
15 2 /*對于11。0592MHZ時鐘,約延時1ms*/
16 2 for(i=0;i<125;i++)
17 2 {}
18 2 }
19 1 }
20 /*產生復位脈沖初始化DS18B20*/
21 void TxReset(void)
22 {
23 1 uint i;
24 1 DQ=0;
25 1 /*拉低約900us*/
26 1 i=100;
27 1 while(i>0) i--;
28 1 //產生上升沿
29 1 DQ=1;
30 1 i=4;
31 1 while(i>0) i--;
32 1 }
33 /*等待應答脈沖*/
34 void RxWait(void)
35 {
36 1 uint i;
37 1 while(DQ); //檢測到應答脈沖
38 1 i=4;
39 1 while(i>0) i--;
40 1 }
41 /*讀取數據的一位,滿足讀時隙要求*/
42 bit RdBit(void)
43 {
44 1 uint i;
45 1 bit b;
46 1 DQ=0;
47 1 i++; //保持低至少1us
48 1 DQ=1;
49 1 i++;i++; //延時15us以上,讀時隙下降沿后15us,DS18B20輸出數據才有效
50 1 b=DQ;
51 1 i=8;
52 1 while(i>0) i--;//讀時隙不低于60us
53 1 return(b);
54 1 }
55 /*讀數據的一個字節*/
C51 COMPILER V7.06 11 04/11/2008 13:23:08 PAGE 2
56 uchar RdByte(void)
57 {
58 1 uchar i,j,b;
59 1 b=0;
60 1 for(i=1;i<=8;i++)
61 1 {
62 2 j=RdBit();
63 2 b=(j<<7)|(b>>1);
64 2 }
65 1 return(b);
66 1 }
67 /*寫數據的一個字節,滿足寫1和寫0的時隙要求*/
68 void WrByte(uchar b)
69 {
70 1 uint i;
71 1 uchar j;
72 1 bit btmp;
73 1 for(j=1;j<=8;j++)
74 1 {
75 2 btmp=b&0x01;
76 2 b=b>>1; //取下一位(由低位向高位)
77 2 if(btmp)
78 2 {
79 3 /*寫1*/
80 3 DQ=0; //延時,使得15us以內拉高
81 3 i++;i++;
82 3 DQ=1;
83 3 i=8;
84 3 while(i>0) i--; //整個寫1時隙不低于60us
85 3 }
86 2 else
87 2 {
88 3 /*寫0*/
89 3 DQ=0;
90 3 i=8;
91 3 while(i>0) i--;//保持低在60~120us之間
92 3 DQ=1;
93 3 i++;
94 3 i++;
95 3 }
96 2 }
97 1 }
98 /*啟動溫度轉換*/
99 void convert(void)
100 {
101 1 TxReset(); //產生復位脈沖,初始化DS18B20
102 1 RxWait(); //等待DS18B20給出應答脈沖
103 1 delay(1); //延時
104 1 WrByte(0xcc); //skip rom命令
105 1 WrByte(0x44); //convert T命令
106 1 }
107 /*讀取溫度值*/
108 void RdTemp(void)
109 { uchar i;
110 1 TxReset(); //產生復位脈沖,初始化DS18B20
111 1 RxWait(); //等待DS18B20給出應答脈沖
112 1 delay(1); //延時
113 1 WrByte(0xcc); //skip rom命令
114 1 WrByte(0xbe); //read scratchpad命令
115 1 tplsb=RdByte(); //溫度值低位字節(其中低4位為二進制的“小數”部分)
116 1 tpmsb=RdByte(); //溫度值高位字節(其中高5位為符號位)
117 1 for(i=0;i<4;i++) {tpmsb=tpmsb<<1;}
C51 COMPILER V7.06 11 04/11/2008 13:23:08 PAGE 3
118 1 m=tpmsb&0x7f;
119 1 for(i=0;i<4;i++) {tplsb=tplsb>>1;}
120 1 s=m|tplsb;
121 1 //if(s) diao=1;
122 1
123 1 }
124 /*主程序,讀取的溫度值最終存放在tplsb和tpmsb變量中。tplsb中的低4位為二進制的“小數”部分;
125 tpmsb中的高5位為符號位,真正通過數碼管輸出時,需要進行到十進制有符號實數(包括小數部分) 的轉換*/
126
127 uchar data_table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x63,0x39};//共陰
128 //uchar data_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
129 uchar display(uchar x)
130 {
131 1 P0=data_table[(x/10)%10];P2=0x8f;
132 1 //P2=0xfe;
133 1 delay(1);
134 1 P0=data_table[x%10];P2=0x4f;
135 1 //P2=0xfd;
136 1 delay(1);
137 1 P0=data_table[10];P2=0x2f;
138 1 //P2=0xfb;
139 1 delay(1);
140 1 P0=data_table[11];P2=0x1f;
141 1 //P2=0xf7;
142 1 delay(1);/**/
143 1 }
*** WARNING C173 IN LINE 143 OF 11.C: missing return-expression
144 /*void time0(void) interrupt 1
145 {
146 TH0=20000/256;
147 TL0=20000%256;
148 display(s);
149 if(tplsb==1) P1=0xf0;
150 delay(1000);
151 }*/
152 void main(void)
153 { //uchar i;
154 1 //P0=0x00;
155 1 //P2=0xff;
156 1 /* TMOD=0x01;
157 1 TR0=1;
158 1 EA=1;
159 1 ET0=1;
160 1 TH0=20000/256;
161 1 TL0=20000%256;*/
162 1 //do
163 1 //{
164 1 diao=0;
165 1 delay(1); //延時1ms
166 1 convert(); //啟動溫度轉換,需要750ms
167 1 delay(1000); //延時1s
168 1 RdTemp(); //讀取溫度
169 1 while(1)
170 1 {display(s);diao=1;}
171 1 //}
172 1 //while(1);
173 1 }
174
175
176
177
178
C51 COMPILER V7.06 11 04/11/2008 13:23:08 PAGE 4
179
180
181
182
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 ----
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 + -