📄 text1.lst
字号:
C51 COMPILER V7.08 TEXT1 05/21/2008 21:49:20 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include <string.h>
3 #include <intrins.h>
4 sbit P15=P1^5;
5 sbit DQ=P1^0;
6 #define COUNT 10
7 #define NODE_ADDR 64
8 #define uchar unsigned char
9 uchar data shidu1,shidu2;
10 uchar data temp_data[2]={0x00,0x00};
11 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
12 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
13
14 unsigned char buffer[COUNT];
15 int pointer;
16
17 /********************************************************/
18 void DelayM(unsigned int a);
19 void DelayM(unsigned int a){//延时函数 1MS/次
20 1 unsigned char i;
21 1 while( --a != 0){
22 2 for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
23 2 } //i 从0加到125,CPU大概就耗时1毫秒
24 1 }
25
26 /**********************************************************************/
27 //延迟函数 11us
28 void delay(int t)
29 {
30 1 for(;t>0;t--);
31 1 }
32
33
34
35 //18B20复位函数
36 ow_reset(void)
37 {
38 1 char presence=1;
39 1 while(presence)
40 1 {
41 2 while(presence)
42 2 {
43 3 DQ=1;_nop_();_nop_();
44 3 DQ=0;
45 3 delay(50);
46 3 DQ=1;
47 3 delay(6);
48 3 presence=DQ;
49 3 }
50 2 delay(45);
51 2 presence= ~DQ;
52 2 }
53 1 DQ=1;
54 1
55 1 }
C51 COMPILER V7.08 TEXT1 05/21/2008 21:49:20 PAGE 2
56
57
58
59 //18B20写命令函数 向总线上写一个比特
60 void write_byte(uchar val)
61 {
62 1 uchar i;
63 1 for(i=8;i>0;i--)
64 1 {
65 2 DQ=1;_nop_();_nop_();
66 2 DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
67 2 DQ=val&0x01;
68 2 delay(6);
69 2 val=val/2;
70 2 }
71 1 DQ=1;
72 1 delay(1);
73 1 }
74
75 //18B20读1比特函数,从总线上读取一个字节
76 uchar read_byte(void)
77 {
78 1 uchar i;
79 1 uchar value=0;
80 1 for (i=8;i>0;i--)
81 1 {
82 2 DQ=1;_nop_();_nop_();
83 2 value>>=1;
84 2 DQ=0;
85 2 _nop_();_nop_();_nop_();_nop_();
86 2 DQ=1;_nop_();_nop_();_nop_();_nop_();
87 2 if(DQ)value|=0x80;
88 2 delay(6);
89 2 }
90 1 DQ=1;
91 1 return(value);
92 1 }
93
94
95 //读取温度函数
96 read_temp()
97 {
98 1 ow_reset();
99 1 write_byte(0xCC);
100 1 write_byte(0xBE);
101 1 temp_data[0]=read_byte();
102 1 temp_data[1]=read_byte();
103 1 ow_reset();
104 1 write_byte(0xCC);
105 1 write_byte(0x44);
106 1 }
107 work_temp()
108 {
109 1 uchar n=0;
110 1 if (temp_data[1]>127)
111 1 {
112 2 temp_data[1]=(256-temp_data[1]);
113 2 temp_data[0]=(256-temp_data[0]);
114 2 n=1;
115 2 }
116 1
117 1 display[4]=temp_data[0]&0x0f;
C51 COMPILER V7.08 TEXT1 05/21/2008 21:49:20 PAGE 3
118 1 display[0]=ditab[display[4]];//xiao
119 1 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
120 1 display[3]=display[4]/100;//+-
121 1 display[1]=display[4]%100;//
122 1 display[2]=display[1]/10;//shi
123 1 display[1]=display[1]%10;//ge
124 1 if(!display[3])
125 1 {
126 2 display[3]=0x00;
127 2 if(!display[2])
128 2 {
129 3 display[2]=0x00;
130 3 }
131 2 }
132 1 if(n)
133 1 {
134 2 display[3]=0x0a;
135 2 }
136 1
137 1
138 1
139 1 }
140
141
142 main()
143 {
144 1 P15=1;
145 1 ow_reset();
146 1 write_byte(0xcc);
147 1 write_byte(0x44);
148 1 while(1)
149 1 {
150 2 read_temp();
151 2 work_temp();
152 2
153 2 // buffer[0]=(0x30);
154 2 // buffer[1]=(0x31);
155 2 // buffer[2]=(0x32);
156 2 // buffer[3]=(0x33);
157 2
158 2 while(pointer<COUNT)
159 2 {
160 3 buffer[pointer]='A'+pointer;
161 3 pointer++;
162 3 }
163 2 // buffer[0]='S';
164 2 buffer[0]=(0x30+display[2]);
165 2 buffer[1]=(0x30+display[1]);
166 2 buffer[2]=('.');
167 2 buffer[3]=(0x30+display[0]);
168 2 SCON=0xc0;
169 2 TMOD=0x20;
170 2 TH1=0xfd;
171 2 TR1=1;
172 2 ET1=0;
173 2 ES=1;
174 2 EA=1;
175 2 pointer=-1;
176 2 TB8=1;
177 2 SBUF=NODE_ADDR;
178 2 while(pointer<COUNT);
179 2 }
C51 COMPILER V7.08 TEXT1 05/21/2008 21:49:20 PAGE 4
180 1 }
181 void send(void) interrupt 4 using 3
182 {
183 1 TI=0;
184 1 pointer++;
185 1 if(pointer>=COUNT)
186 1 return;
187 1 else
188 1 {
189 2 TB8=0;
190 2 SBUF=buffer[pointer];
191 2 }
192 1 }
193
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 464 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 ----
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 + -