📄 18b202114.txt
字号:
;;;144 ds18b20_reset();
0002c0 ebfffffe BL ds18b20_reset
;;;145 udelay(100);
0002c4 e3a00064 MOV r0,#0x64
0002c8 ebfffffe BL udelay
;;;146 write_byte(0x55);
0002cc e3a00055 MOV r0,#0x55
0002d0 ebfffffe BL write_byte
;;;147 for(i =0; i < 8; i++)
0002d4 e3a06000 MOV r6,#0
0002d8 ea000005 B |L1.756|
|L1.732|
;;;148 {
;;;149 write_byte(SN[j][i]);
0002dc e59f108c LDR r1,|L1.880|
0002e0 e0811187 ADD r1,r1,r7,LSL #3
0002e4 e7d10006 LDRB r0,[r1,r6]
0002e8 ebfffffe BL write_byte
0002ec e2860001 ADD r0,r6,#1 ;147
0002f0 e20060ff AND r6,r0,#0xff ;147
|L1.756|
0002f4 e3560008 CMP r6,#8 ;147
0002f8 bafffff7 BLT |L1.732|
;;;150 }
;;;151 write_byte(0xbe);
0002fc e3a000be MOV r0,#0xbe
000300 ebfffffe BL write_byte
;;;152 a = read_byte();
000304 ebfffffe BL read_byte
000308 e1a04000 MOV r4,r0
;;;153 b = read_byte();
00030c ebfffffe BL read_byte
000310 e1a05000 MOV r5,r0
;;;154 f[j] = b;
000314 e59f1058 LDR r1,|L1.884|
000318 e7c15007 STRB r5,[r1,r7]
;;;155 if(f[j])
00031c e2810000 ADD r0,r1,#0
000320 e7d00007 LDRB r0,[r0,r7]
000324 e3500000 CMP r0,#0
000328 0a000004 BEQ |L1.832|
;;;156 {
;;;157 TMP[j] = ~a + 1;
00032c e1e00004 MVN r0,r4
000330 e2800001 ADD r0,r0,#1
000334 e59f103c LDR r1,|L1.888|
000338 e7c10007 STRB r0,[r1,r7]
00033c ea000001 B |L1.840|
|L1.832|
;;;158 }
;;;159 else
;;;160 {
;;;161 TMP[j] = a;
000340 e59f0030 LDR r0,|L1.888|
000344 e7c04007 STRB r4,[r0,r7]
|L1.840|
000348 e2870001 ADD r0,r7,#1 ;142
00034c e20070ff AND r7,r0,#0xff ;142
|L1.848|
000350 e3570004 CMP r7,#4 ;142
000354 baffffd9 BLT |L1.704|
;;;162 }
;;;163 }
;;;164 }
000358 e8bd41f0 POP {r4-r8,lr}
00035c e12fff1e BX lr
|L1.864|
000360 0000f7ff DCD 0x0000f7ff
|L1.868|
000364 6572720a DCB "err\n"
000368 00000000 DCB "\0\0\0\0"
|L1.876|
00036c 4f4b2100 DCB "OK!\0"
|L1.880|
000370 00000000 DCD ||SN||
|L1.884|
000374 00000000 DCD f
|L1.888|
000378 00000000 DCD TMP
ENDP
||rom|| PROC
;;;171 void rom() //
;;;172 { //
00037c e92d4010 PUSH {r4,lr}
;;;173 uchar i; //
;;;174 //以下是定义8个序列号变量 //
;;;175 uchar sn1; //
;;;176 uchar sn2; //
;;;177 uchar sn3; //
;;;178 uchar sn4; //
;;;179 uchar sn5; //
;;;180 uchar sn6; //
;;;181 uchar sn7; //
;;;182 uchar sn8; //
;;;183 //
;;;184 ds18b20_reset (); //复位 //
000380 ebfffffe BL ds18b20_reset
;;;185 udelay (10); //延时 //
000384 e3a0000a MOV r0,#0xa
000388 ebfffffe BL udelay
;;;186 write_byte(0x33); //发送读序列号子程序 //
00038c e3a00033 MOV r0,#0x33
000390 ebfffffe BL write_byte
;;;187 for(i=0;i<8;i++)
000394 e3a04000 MOV r4,#0
000398 ea000006 B |L1.952|
|L1.924|
;;;188 {
;;;189 SN[0][i]=read_byte(); //读取第一个序列号,应为16H; //
00039c ebfffffe BL read_byte
0003a0 e51f1038 LDR r1,|L1.880|
0003a4 e7c10004 STRB r0,[r1,r4]
;;;190 udelay(4);
0003a8 e3a00004 MOV r0,#4
0003ac ebfffffe BL udelay
0003b0 e2840001 ADD r0,r4,#1 ;187
0003b4 e20040ff AND r4,r0,#0xff ;187
|L1.952|
0003b8 e3540008 CMP r4,#8 ;187
0003bc bafffff6 BLT |L1.924|
;;;191 }
;;;192 for(i=0;i<8;i++)
0003c0 e3a04000 MOV r4,#0
0003c4 ea000005 B |L1.992|
|L1.968|
;;;193 {
;;;194 uart_printf("0x%X\n",SN[0][i]);
0003c8 e51f0060 LDR r0,|L1.880|
0003cc e7d01004 LDRB r1,[r0,r4]
0003d0 e28f0f45 ADR r0,|L1.1260|
0003d4 ebfffffe BL uart_printf
0003d8 e2840001 ADD r0,r4,#1 ;192
0003dc e20040ff AND r4,r0,#0xff ;192
|L1.992|
0003e0 e3540008 CMP r4,#8 ;192
0003e4 bafffff7 BLT |L1.968|
;;;195 }
;;;196 } //
0003e8 e8bd4010 POP {r4,lr}
0003ec e12fff1e BX lr
;;;197 //////////////////////////////////////////////////////////////////////////
ENDP
tmp PROC
;;;203 void tmp(void)
;;;204 {
0003f0 e92d41ff PUSH {r0-r8,lr}
;;;205 int i;
;;;206 int date;
;;;207 unsigned char a,b,temp;
;;;208 volatile unsigned char t;
;;;209 //t = read_Tz();
;;;210 //uart_printf("%4f\n",t);
;;;211 //init_ds();
;;;212 //write_byte(0x00);
;;;213 //read_byte();
;;;214 uart_printf("init start\n");
0003f4 e28f00f8 ADR r0,|L1.1268|
0003f8 ebfffffe BL uart_printf
;;;215
;;;216 //init_ds();
;;;217 write_byte(0xcc);
0003fc e3a000cc MOV r0,#0xcc
000400 ebfffffe BL write_byte
;;;218 write_byte(0x44);
000404 e3a00044 MOV r0,#0x44
000408 ebfffffe BL write_byte
;;;219 udelay(3000000);
00040c e59f00ec LDR r0,|L1.1280|
000410 ebfffffe BL udelay
;;;220 uart_printf("init.end\n");
000414 e28f00e8 ADR r0,|L1.1284|
000418 ebfffffe BL uart_printf
;;;221
;;;222 for(i = 0; i < 4; i++)
00041c e3a04000 MOV r4,#0
000420 ea000024 B |L1.1208|
|L1.1060|
;;;223 {
;;;224 // init_ds();
;;;225 write_byte(0x55);
000424 e3a00055 MOV r0,#0x55
000428 ebfffffe BL write_byte
;;;226 write_byte(0xbe);
00042c e3a000be MOV r0,#0xbe
000430 ebfffffe BL write_byte
;;;227 a = read_byte(); //读取温度值低位
000434 ebfffffe BL read_byte
000438 e1a05000 MOV r5,r0
;;;228 b = read_byte(); //读取温度值高位
00043c ebfffffe BL read_byte
000440 e1a06000 MOV r6,r0
;;;229 //前5位符号,温度大于0,这5位为0,值乘0.0625即得实际温度
;;;230 //温度小于0,这5位为1,数值取反加1再乘0.0625即得实际温度
;;;231 #if 0
;;;232 t = b;
;;;233 t <<= 8;
;;;234 t = t | a;
;;;235
;;;236 t = t * 0.0625;
;;;237 t = t * 10 + 0.5; //放大10倍输出并四舍五入
;;;238 #endif
;;;239
;;;240 temp = b & 0x80;
000444 e2067080 AND r7,r6,#0x80
;;;241 if(temp == 0)
000448 e3570000 CMP r7,#0
00044c 1a000004 BNE |L1.1124|
;;;242 {
;;;243 t = b << 4;
000450 e1a08206 LSL r8,r6,#4
;;;244 a = a>>4;
000454 e1a05245 ASR r5,r5,#4
;;;245 t = t + a;
000458 e0880005 ADD r0,r8,r5
00045c e20080ff AND r8,r0,#0xff
000460 ea000005 B |L1.1148|
|L1.1124|
;;;246 }
;;;247 else
;;;248 {
;;;249 b = b & 0x07;
000464 e2066007 AND r6,r6,#7
;;;250 t = b << 8;
000468 e1a08406 LSL r8,r6,#8
;;;251 t = t + a;
00046c e0888005 ADD r8,r8,r5
;;;252 t = ~t + 1;
000470 e1e00008 MVN r0,r8
000474 e2800001 ADD r0,r0,#1
000478 e20080ff AND r8,r0,#0xff
|L1.1148|
;;;253 }
;;;254 t = t * 0.625;
00047c e1a00008 MOV r0,r8
000480 ebfffffe BL __aeabi_ui2d
000484 e58d0008 STR r0,[sp,#8]
000488 e58d100c STR r1,[sp,#0xc]
00048c e28f007c ADR r0,|L1.1296|
000490 e890000c LDM r0,{r2,r3}
000494 e59d0008 LDR r0,[sp,#8]
000498 ebfffffe BL __aeabi_dmul
00049c e88d0003 STM sp,{r0,r1}
0004a0 ebfffffe BL __aeabi_d2uiz
0004a4 e20080ff AND r8,r0,#0xff
;;;255
;;;256 uart_printf("%f\n",t);
0004a8 e1a01008 MOV r1,r8
0004ac e28f0064 ADR r0,|L1.1304|
0004b0 ebfffffe BL uart_printf
0004b4 e2844001 ADD r4,r4,#1 ;222
|L1.1208|
0004b8 e3540004 CMP r4,#4 ;222
0004bc baffffd8 BLT |L1.1060|
;;;257 }
;;;258
;;;259 }
0004c0 e8bd41ff POP {r0-r8,lr}
0004c4 e12fff1e BX lr
;;;260 void tmp_main() //
ENDP
tmp_main PROC
;;;261 { //
0004c8 e92d4010 PUSH {r4,lr}
;;;262
;;;263 unsigned int a = 0, b = 0, c = 0, t = 0;
0004cc e1a00000 MOV r0,r0
0004d0 e1a00000 MOV r0,r0
0004d4 e1a00000 MOV r0,r0
0004d8 e1a00000 MOV r0,r0
;;;264 float tt = 0;
0004dc e1a00000 MOV r0,r0
;;;265 do{ //
0004e0 e1a00000 MOV r0,r0
|L1.1252|
;;;266 /* ds18b20_reset(); */
;;;267
;;;268 //rom(); //调用读序列号子程序 //
;;;269 //convert(); //
;;;270 //udelay(10000); //如果是不断地读取的话可以不延时 //
;;;271 //temp_read(); //读取温度,执行完毕温度将存于TMP[]数组中//
;;;272 // for(i=0;i < 4;i++) {}
;;;273
;;;274 ds18b20_reset();
0004e4 ebfffffe BL ds18b20_reset
;;;275 #if 0
;;;276 write_byte(0xcc);
;;;277 write_byte(0x44);
;;;278 //udelay(500);
;;;279 ds18b20_reset();
;;;280 write_byte(0xcc);
;;;281 write_byte(0xbe);
;;;282
;;;283 a = read_byte();
;;;284 b = read_byte();
;;;285
;;;286 t = b;
;;;287 t <<= 8;
;;;288 t = t | a;
;;;289
;;;290 tt = t * 0.0625;
;;;291 tt = tt * 10 + 0.5; //放大10倍输出并四舍五入
;;;292 uart_printf("t = %d\n",(int)tt);
;;;293 uart_printf("a = %X\n",a);
;;;294 uart_printf("b = %X\n",b);
;;;295 #endif
;;;296
;;;297
;;;298 }while(1); //
0004e8 eafffffd B |L1.1252|
;;;299
;;;300
;;;301 } //
;;;302
ENDP
|L1.1260|
0004ec 30782558 DCB "0x%X"
0004f0 0a000000 DCB "\n\0\0\0"
|L1.1268|
0004f4 696e6974 DCB "init"
0004f8 20737461 DCB " sta"
0004fc 72740a00 DCB "rt\n\0"
|L1.1280|
000500 002dc6c0 DCD 0x002dc6c0
|L1.1284|
000504 696e6974 DCB "init"
000508 2e656e64 DCB ".end"
00050c 0a000000 DCB "\n\0\0\0"
|L1.1296|
000510 00000000
000514 3fe40000 DCFD 0x3fe4000000000000 ; 0.625
|L1.1304|
000518 25660a00 DCB "%f\n\0"
AREA ||.data||, DATA, ALIGN=2
opencount
000000 00000000 DCD 0x00000000
TMP
000004 00000000 DCD 0x00000000
f
000008 00000000 DCD 0x00000000
AREA ||.bss||, DATA, NOINIT, ALIGN=0
||SN||
% 32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -