📄 stest.lst
字号:
C51 COMPILER V6.23a STEST 05/05/2004 02:05:28 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE STEST
OBJECT MODULE PLACED IN stest.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE stest.c BROWSE DEBUG OBJECTEXTEND SRC(.\stest.SRC)
stmt level source
1 #include <AT89X51.h>
2 #include <intrins.h>
3
4
5 #define TMPort P1_7
6
7 unsigned char MYWD[7]={0,0,0,0,0,'`','C'},DS1820ERR[]="NO DS1820!",TMCL[]={"TMCL"};
8 unsigned char disbuf[10]={0};
9 unsigned char trance=0,recived=0,comno=0,comzf;//发送状态、接受命令字符序号、接收的字符
10
11 unsigned int t;
12 bit DS1820ON,readtm;//DS1820响应、是否接收测温命令。
13
14 void initUart(void)//波特率9600,24M时钟
15 {
16 1 TMOD|=0x20;
17 1 SCON=0x50;
18 1 PCON|=0x80;
19 1 TH1=0xf3;
20 1 TL1=0xf3;
21 1 TR1=1;
22 1 ES=1;
23 1 }
24
25
26 void uart(void) interrupt 4
27 {
28 1 unsigned char m=0;
29 1 if(RI)
30 1 {comzf=SBUF;RI=0;recived=1;}
31 1 else
32 1 {TI=0;trance=1;}
33 1 }
34
35
36 void Delay_110(void) //延时110微秒,24M晶振
37 {EA=0;
38 1 #pragma asm
39 1 MOV R0,#34H
40 1 MOV R1,#02H
41 1 TSR2:
42 1 DJNZ R0,TSR2
43 1 MOV R0,#34H
44 1 DJNZ R1,TSR2
45 1 #pragma endasm
46 1 EA=1;}
47
48 void Delay_510(void) //延时510微秒,24M晶振
49 {EA=0;
50 1 #pragma asm
51 1 nop
52 1 nop
53 1 MOV R0,#7DH
54 1 MOV R1,#04H
55 1 TSR1:
C51 COMPILER V6.23a STEST 05/05/2004 02:05:28 PAGE 2
56 1 DJNZ R0,TSR1
57 1 MOV R0,#7DH
58 1 DJNZ R1,TSR1
59 1 #pragma endasm
60 1 EA=1;}
61
62 void InitDS1820(void) //初始化DS1820
63 { EA=0;
64 1 TMPort = 1; //拉高TMPort
65 1 _nop_();//保持一个周期
66 1 _nop_();
67 1 TMPort = 0; //拉低TMPort
68 1 Delay_510(); //延时 DS1820复位时间要500us的低电平
69 1 TMPort = 1; //拉高TMPort
70 1 Delay_110(); //延时110us 等待DS1820回应
71 1 if (!TMPort) //回应信号为低电平
72 1 {DS1820ON=1;}
73 1 else
74 1 {DS1820ON=0;}
75 1 Delay_110(); //延时
76 1 Delay_110();
77 1 TMPort=1; //拉高TMPort
78 1 EA=1;
79 1 }
80
81
82 void ds1820command(unsigned char a) //写ds1820命令函数。
83 {
84 1 EA=0;
85 1 #pragma asm
86 1 MOV A,R7
87 1 MOV R2,#8
88 1 CLR C
89 1 WR1:
90 1 CLR TMPort
91 1 MOV R3,#2//延时3us,24M时钟
92 1 DJNZ R3,$
93 1 RRC A
94 1 MOV TMPort,C
95 1 MOV R3,#68//延时70us
96 1 DJNZ R3,$
97 1 SETB TMPort
98 1 NOP
99 1 NOP
100 1 NOP
101 1 NOP
102 1 DJNZ R2,WR1
103 1 SETB TMPort
104 1 #pragma endasm
105 1 EA=1;}
*** WARNING C280 IN LINE 82 OF STEST.C: 'a': unreferenced local variable
106
107 void ds1820rd(unsigned char *pt)//读ds1820数据
108 {
109 1 EA=0;
110 1 #pragma asm
111 1 MOV R4,#9
112 1 MOV A,R1
113 1 MOV R0,A
114 1 RD18201:
115 1 MOV R2,#8
116 1 RD18202:
C51 COMPILER V6.23a STEST 05/05/2004 02:05:28 PAGE 3
117 1 SETB TMPort
118 1 NOP//延时2us,24M时钟
119 1 NOP
120 1 NOP
121 1 NOP
122 1 CLR TMPort//写时间片开始
123 1 NOP//延时2us,24M时钟
124 1 NOP
125 1 NOP
126 1 NOP
127 1 SETB TMPort//置为高电平,准备输入数据
128 1 MOV R3,#10//延时11us,24M时钟
129 1 DJNZ R3,$
130 1 MOV C,TMPort
131 1 RRC A
132 1 MOV R3,#48//延时50us,24M时钟
133 1 DJNZ R3,$
134 1 DJNZ R2,RD18202
135 1 MOV @R0,A
136 1 INC R0
137 1 DJNZ R4,RD18201
138 1 #pragma endasm
139 1 EA=1;}
*** WARNING C280 IN LINE 107 OF STEST.C: 'pt': unreferenced local variable
140
141 void tmtoc (void)
142 {
143 1 unsigned char sign;//符号、实际温度的10倍整数
144 1 int tm; //实际温度的10倍
145 1 sign=disbuf[1]&0x20;
146 1 if (sign)//disbuf[1]高五位为符号位,判断符号根据补码存储方式,得出真实温度
147 1 {disbuf[0]=~disbuf[0];//精确到0.1度,四舍五入
148 2 disbuf[1]=~disbuf[1];
149 2 tm=((int)disbuf[1]*256+(int)disbuf[0]+1)*0.625+0.5;}
150 1 else tm=((int)disbuf[1]*256+(int)disbuf[0])*0.625+0.5;
151 1 //tmof10=(int)tm;//输出温度各位的ASCii码
152 1
153 1 if (tm>=1000) MYWD[0]='1';
154 1 else if (sign) MYWD[0]='-';
155 1 else MYWD[0]='+';
156 1
157 1 MYWD[1]=tm/100%10+'0';
158 1 if (MYWD[0]=='0'&&MYWD[1]=='0')MYWD[1]='\0';
159 1 MYWD[2]=tm/10%10+'0';
160 1 MYWD[3]='.';
161 1 MYWD[4]=tm%10+'0';
162 1 }
163
164 void disp(char *p,unsigned char m) //输出一个字符数组,p为数组名,m为字符个数
165 {
166 1 unsigned char i;
167 1 i=EA;
168 1 EA=1;
169 1 for(;*p!=0&&m!=0;p++,m--)
170 1 {
171 2 SBUF=*p;
172 2 while(trance==0);
173 2 trance=0;
174 2 }
175 1 EA=i;
176 1 }
177
C51 COMPILER V6.23a STEST 05/05/2004 02:05:28 PAGE 4
178
179 void TMCLSHOW(void)
180 {
181 1 InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
182 1 if (!DS1820ON) {disp(DS1820ERR,12);}
183 1 ds1820command(0xCC);
184 1 ds1820command(0x44);
185 1 TMPort=1;
186 1
187 1 for (t=0;t<1500;t++) Delay_510();//等待转化过程完成
188 1 InitDS1820();//读RAM中数据:初始化、skiprom、读命令、保存数据
189 1 ds1820command(0xcc);
190 1 ds1820command(0xbe);
191 1 ds1820rd(disbuf);
192 1 //disp(disbuf,9);
193 1 tmtoc();
194 1 disp("NOW,temperature is:",20);
195 1 disp(MYWD,7);
196 1 disp("\n",1);
197 1 }
198
199 void main(void)
200 {
201 1 DS1820ON=0; //DS1820是否存在
202 1 initUart();
203 1 InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
204 1 if (!DS1820ON) {disp(DS1820ERR,12);}
205 1 P1=0x55;
206 1 TMCLSHOW();
207 1 P1=0x33;
208 1 EA=1;
209 1 while (1)
210 1 if (recived==1)//判断是否为温度测量命令
211 1 {if(comzf==TMCL[comno])
212 2 {comno++;
213 3 if (comno>3)
214 3 {comno=0;
215 4 TMCLSHOW();
216 4 }
217 3 }
218 2 else comno=0;
219 2 recived=0;
220 2 }
221 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 681 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 8
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -