📄 wu01.lst
字号:
C51 COMPILER V7.10 WU01 07/15/2008 17:30:13 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE WU01
OBJECT MODULE PLACED IN wu01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe wu01.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3
4 #define TEST_TIME
5 #undef TEST_TIME
6
7 sbit DQ =P3^3; //定义通信端口
8 //DB 0C0H,0F3H,0A4H,0A1H,93H,89H,088H,0E3H,00H,81H
9 unsigned char data dis_digit;
10 unsigned char code dis_code[11]= {0x88,0xeb,0x4c,0x49, // 0, 1, 2, 3
11 0x2b,0x19,0x18,0xcb,0x08,0x09, 0xff};// 4, 5, 6, 7, 8, 9, off
12 //{0xc0,0xf3,0xa4,0xa1,
13 // 0x93,0x89,0x88,0xe3,0x00,0x81,0xff};
14 //
15 //
16 unsigned char data dis_buf[4];
17 unsigned char data dis_index;
18
19
20 //延时函数
21 void delay(unsigned int i) //经验表明,这里i=1时约等于6.9us
22 {
23 1 while(i--);
24 1 }
25
26 //初始化函数
27 bit Init_DS18B20(void)
28 {
29 1 unsigned char x=0;
30 1 unsigned int time = 0;
31 1
32 1 DQ = 1; //DQ复位
33 1 delay(18); //稍做延时
34 1 DQ = 0; //单片机将DQ拉低
35 1 delay(90); //精确延时 大于 480us
36 1 #ifdef TEST_TIME
/* TR0 = 0;
TH0 = 0;
TL0 = 0;
TR0 = 1;
*/
#endif
43 1
44 1 #ifdef TEST_TIME
/*
TR0 = 0;
time = (TH0<<8) + TL0 -2;
*/
/*here time = 0x202 ,that means
514 * 12/11.0592 = 557.73 us.
that means every delay() is 6.9us.
*/
#endif
54 1
55 1 DQ = 1; //拉高总线
C51 COMPILER V7.10 WU01 07/15/2008 17:30:13 PAGE 2
56 1 delay(14);
57 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
58 1 if(x==0)
59 1 return 1;
60 1 else
61 1 return 0;
62 1 }
63
64 //读一个字节
65 unsigned char ReadOneChar(void)
66 {
67 1 unsigned char i=0;
68 1 unsigned char dat = 0;
69 1 for (i=8;i>0;i--)
70 1 {
71 2 DQ = 0; // 给脉冲信号
72 2 dat>>=1;
73 2 DQ = 1; // 给脉冲信号
74 2 if(DQ)
75 2 dat|=0x80;
76 2 delay(4);
77 2 }
78 1 return(dat);
79 1 }
80
81 //写一个字节
82 void WriteOneChar(unsigned char dat)
83 {
84 1 unsigned char i=0;
85 1 for (i=8; i>0; i--)
86 1 {
87 2 DQ = 0;
88 2 DQ = dat&0x01;
89 2 delay(5);
90 2 DQ = 1;
91 2 dat>>=1;
92 2 }
93 1 }
94
95 //读取温度
96 unsigned int ReadTemperature(void)
97 {
98 1 unsigned char a=0;
99 1 unsigned char b=0;
100 1 unsigned int t=0;
101 1 float tt=0;
102 1 Init_DS18B20();
103 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
104 1 WriteOneChar(0x44); // 启动温度转换
105 1 Init_DS18B20();
106 1 WriteOneChar(0xCC); //跳过读序号列号的操作
107 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
108 1 a = ReadOneChar();
109 1 b = ReadOneChar();
110 1 t=b;
111 1 t<<=8;
112 1 t=t|a; //将温度的高位与低位合并
113 1 tt=t *0.625;
114 1 t= tt*10+0.5; //对结果进行4舍5入
115 1 return(t);
116 1 }
117
C51 COMPILER V7.10 WU01 07/15/2008 17:30:13 PAGE 3
118 void Delay_ms (unsigned int Nms )
119 {
120 1 unsigned char i;
121 1 while(Nms--)
122 1 for(i=0; i<125; i++) ;
123 1 }
124
125 void main()
126 {
127 1 unsigned int t = 0;
128 1 P0 = 0x00;
129 1 P2 = 0x00;
130 1
131 1 //以下为定时器初始化。
132 1
133 1 TMOD = 0x01; // M1,M0 = 0,1 工作在方式1,为16位定时器
134 1 TH0 = 0xFC;
135 1 TL0 = 0x17; // TH和TL各提供8位。
136 1 IE = 0x82; //开cpu中断 和 源中断 即EA = 1, ET0 = 1
137 1 dis_buf[0] = 0xff;
138 1 dis_buf[1] = 0xff;
139 1 dis_buf[2] = 0xff;
140 1 dis_buf[3] = 0xff;
141 1
142 1 dis_digit = 0xfe;
143 1 dis_index = 0;
144 1
145 1 TR0 = 1; //在 TCON 中,启动定时器0。启动工作需要放置在初始化之后,这是一个好的习惯。
146 1 do{
147 2 t = ReadTemperature();
148 2
149 2 if (t>0 && t < 9999)
150 2 {
151 3 dis_buf[0] = dis_code[t/1000];
152 3 dis_buf[1] = dis_code[(t%1000)/100]&0xef;
153 3 dis_buf[2] = dis_code[(t%100)/10];
154 3 dis_buf[3] = dis_code[t%10];
155 3 }
156 2
157 2 Delay_ms(300);
158 2 }
159 1 while(1);
160 1 }
161 void timer0() interrupt 1 using 1 //函数名字可以任意取, interrupt 1中的"1"表示定时器0的中断号为1。
162 // 定时器0中断服务程序, 用于数码管的动态扫描
163 // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
164 // dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
165 // 选通P2.0口数码管
166 // dis_buf --- 显于缓冲区基地址
167 {
168 1 TH0 = 0xFC;
169 1 TL0 = 0x17; //在定时器中断中重新赋初始值。可以计算这里的时钟周期为
170 1 // (0x10000- 0xfc17) * (1/(11.0592 * 10^6 / 12)) = 1.085ms
171 1
172 1 P2 = 0xff; // 先关闭所有数码管
173 1 P0 = dis_buf[dis_index]; // 显示代码传送到P0口
174 1 P2 = dis_digit; //
175 1
176 1 dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管
177 1 dis_index++; //
178 1
179 1 if (dis_index >= 4)
C51 COMPILER V7.10 WU01 07/15/2008 17:30:13 PAGE 4
180 1 {
181 2 dis_index = 0;
182 2 dis_digit = 0xfe;
183 2 }
184 1
185 1 }
186
187
188
C51 COMPILER V7.10 WU01 07/15/2008 17:30:13 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
_Delay_ms. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
Nms. . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
_WriteOneChar. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
dat. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
ReadTemperature. . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
a. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0001H 1
b. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
t. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
tt . . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0002H 4
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
Init_DS18B20 . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
x. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
time . . . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
ReadOneChar. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
dat. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
t. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
dis_digit. . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0000H 1
dis_index. . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0001H 1
dis_code . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 11
TH0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008CH 1
TL0. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008AH 1
timer0 . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
dis_buf. . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0002H 4
_delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 529 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 10
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 + -