📄 18b20.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 939] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\18b20.o" --depend=".\NOR FLASH\18b20.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -IC:\Keil\ARM\INC\Samsung --omf_browse=".\NOR FLASH\18b20.crf" Source\18b20.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
TempDelay PROC
;;;71 {
;;;72 while(us--);
000000 e1a00000 MOV r0,r0
|L1.4|
000004 e1b01000 MOVS r1,r0
000008 e2402001 SUB r2,r0,#1
00000c e20200ff AND r0,r2,#0xff
000010 1afffffb BNE |L1.4|
;;;73 }
000014 e12fff1e BX lr
;;;74 /************************************************************
ENDP
ds18b20_dq_high PROC
;;;81 {
;;;82 rGPEDAT = rGPEDAT | 0x0800;
000018 e3a00456 MOV r0,#0x56000000
00001c e5900044 LDR r0,[r0,#0x44]
000020 e3800b02 ORR r0,r0,#0x800
000024 e3a01456 MOV r1,#0x56000000
000028 e5810044 STR r0,[r1,#0x44]
;;;83 }
00002c e12fff1e BX lr
;;;84
ENDP
ds18b20_dq_low PROC
;;;92 {
;;;93 rGPEDAT = rGPEDAT & 0xf7ff;
000030 e3a00456 MOV r0,#0x56000000
000034 e5900044 LDR r0,[r0,#0x44]
000038 e59f1388 LDR r1,|L1.968|
00003c e0000001 AND r0,r0,r1
000040 e3a01456 MOV r1,#0x56000000
000044 e5810044 STR r0,[r1,#0x44]
;;;94 }
000048 e12fff1e BX lr
;;;95 void _nop_(void)
ENDP
_nop_ PROC
;;;96 {
;;;97 int i=0;
00004c e3a00000 MOV r0,#0
;;;98 i = i;
000050 e1a00000 MOV r0,r0
;;;99 }
000054 e12fff1e BX lr
;;;100
ENDP
Init18b20 PROC
;;;115
;;;116 {
000058 e52de004 PUSH {lr}
;;;117
;;;118 //dq=1;
;;;119 ds18b20_dq_high();
00005c ebfffffe BL ds18b20_dq_high
;;;120 _nop_();
000060 ebfffffe BL _nop_
;;;121 //dq=0;
;;;122 ds18b20_dq_low();
000064 ebfffffe BL ds18b20_dq_low
;;;123 TempDelay(86); //delay 530 uS//80
000068 e3a00056 MOV r0,#0x56
00006c ebfffffe BL TempDelay
;;;124 _nop_();
000070 ebfffffe BL _nop_
;;;125
;;;126 //dq=1;
;;;127 ds18b20_dq_high();
000074 ebfffffe BL ds18b20_dq_high
;;;128 TempDelay(14); //delay 100 uS//14
000078 e3a0000e MOV r0,#0xe
00007c ebfffffe BL TempDelay
;;;129 _nop_();
000080 ebfffffe BL _nop_
;;;130 _nop_();
000084 ebfffffe BL _nop_
;;;131 _nop_();
000088 ebfffffe BL _nop_
;;;132
;;;133 if( (rGPEDAT & 0x0800) == 0x0000)
00008c e3a00456 MOV r0,#0x56000000
000090 e5900044 LDR r0,[r0,#0x44]
000094 e3100b02 TST r0,#0x800
000098 1a000003 BNE |L1.172|
;;;134 flag = 1; //detect 1820 success!
00009c e3a00001 MOV r0,#1
0000a0 e59f1324 LDR r1,|L1.972|
0000a4 e5810000 STR r0,[r1,#0] ; flag
0000a8 ea000002 B |L1.184|
|L1.172|
;;;135 else
;;;136 flag = 0; //detect 1820 fail!
0000ac e3a00000 MOV r0,#0
0000b0 e59f1314 LDR r1,|L1.972|
0000b4 e5810000 STR r0,[r1,#0] ; flag
|L1.184|
;;;137
;;;138 TempDelay(20); //20
0000b8 e3a00014 MOV r0,#0x14
0000bc ebfffffe BL TempDelay
;;;139 _nop_();
0000c0 ebfffffe BL _nop_
;;;140 _nop_();
0000c4 ebfffffe BL _nop_
;;;141 // dq = 1;
;;;142 ds18b20_dq_high();
0000c8 ebfffffe BL ds18b20_dq_high
;;;143
;;;144 }
0000cc e49de004 POP {lr}
0000d0 e12fff1e BX lr
;;;145
ENDP
WriteByte PROC
;;;158 void WriteByte (uchar wr) //单字节写入
;;;159 {
0000d4 e92d4030 PUSH {r4,r5,lr}
0000d8 e1a03000 MOV r3,r0
;;;160 int dpbit;
;;;161 uchar i;
;;;162 for (i=0;i<8;i++)
0000dc e3a05000 MOV r5,#0
0000e0 ea00000f B |L1.292|
|L1.228|
;;;163 {
;;;164 //dq = 0;
;;;165 ds18b20_dq_low();
0000e4 ebfffffe BL ds18b20_dq_low
;;;166 _nop_();
0000e8 ebfffffe BL _nop_
;;;167
;;;168 dpbit = wr&0x01;
0000ec e2034001 AND r4,r3,#1
;;;169 if(dpbit == 0x0)
0000f0 e3540000 CMP r4,#0
0000f4 1a000001 BNE |L1.256|
;;;170 ds18b20_dq_low();
0000f8 ebfffffe BL ds18b20_dq_low
0000fc ea000000 B |L1.260|
|L1.256|
;;;171 else
;;;172 ds18b20_dq_high();
000100 ebfffffe BL ds18b20_dq_high
|L1.260|
;;;173
;;;174 TempDelay(5); //delay 45 uS //5
000104 e3a00005 MOV r0,#5
000108 ebfffffe BL TempDelay
;;;175 _nop_();
00010c ebfffffe BL _nop_
;;;176 _nop_();
000110 ebfffffe BL _nop_
;;;177 //dq=1;
;;;178 ds18b20_dq_high();
000114 ebfffffe BL ds18b20_dq_high
;;;179 wr >>= 1;
000118 e1a030c3 ASR r3,r3,#1
00011c e2850001 ADD r0,r5,#1 ;162
000120 e20050ff AND r5,r0,#0xff ;162
|L1.292|
000124 e3550008 CMP r5,#8 ;162
000128 baffffed BLT |L1.228|
;;;180 }
;;;181
;;;182 }
00012c e8bd4030 POP {r4,r5,lr}
000130 e12fff1e BX lr
;;;183
ENDP
ReadByte PROC
;;;196 uchar ReadByte (void) //读取单字节
;;;197 {
000134 e92d4010 PUSH {r4,lr}
;;;198 uchar i,u=0;
000138 e3a04000 MOV r4,#0
;;;199 for(i=0;i<8;i++)
00013c e3a03000 MOV r3,#0
000140 ea00000d B |L1.380|
|L1.324|
;;;200 {
;;;201 //dq = 0;
;;;202 ds18b20_dq_low();
000144 ebfffffe BL ds18b20_dq_low
;;;203 u >>= 1;
000148 e1a040c4 ASR r4,r4,#1
;;;204 //dq = 1;
;;;205 ds18b20_dq_high();
00014c ebfffffe BL ds18b20_dq_high
;;;206 if((rGPEDAT & 0x0800) == 0x0800)
000150 e3a00456 MOV r0,#0x56000000
000154 e5900044 LDR r0,[r0,#0x44]
000158 e2000b02 AND r0,r0,#0x800
00015c e3500b02 CMP r0,#0x800
000160 1a000000 BNE |L1.360|
;;;207 u |= 0x80;
000164 e3844080 ORR r4,r4,#0x80
|L1.360|
;;;208 TempDelay (4);
000168 e3a00004 MOV r0,#4
00016c ebfffffe BL TempDelay
;;;209 _nop_();
000170 ebfffffe BL _nop_
000174 e2830001 ADD r0,r3,#1 ;199
000178 e20030ff AND r3,r0,#0xff ;199
|L1.380|
00017c e3530008 CMP r3,#8 ;199
000180 baffffef BLT |L1.324|
;;;210 }
;;;211 return(u);
000184 e1a00004 MOV r0,r4
000188 e8bd4010 POP {r4,lr}
;;;212 }
00018c e12fff1e BX lr
;;;213
ENDP
read_bytes PROC
;;;227
;;;228 {
000190 e92d4030 PUSH {r4,r5,lr}
000194 e1a04000 MOV r4,r0
;;;229
;;;230 uchar i;
;;;231 for(i=0;i < j; i++) {
000198 e3a05000 MOV r5,#0
00019c ea00000a B |L1.460|
|L1.416|
;;;232 *p = ReadByte();
0001a0 ebfffffe BL ReadByte
0001a4 e59f1224 LDR r1,|L1.976|
0001a8 e5911000 LDR r1,[r1,#0] ; p
0001ac e5c10000 STRB r0,[r1,#0]
;;;233 p++;
0001b0 e59f0218 LDR r0,|L1.976|
0001b4 e5900000 LDR r0,[r0,#0] ; p
0001b8 e2800001 ADD r0,r0,#1
0001bc e59f120c LDR r1,|L1.976|
0001c0 e5810000 STR r0,[r1,#0] ; p
0001c4 e2850001 ADD r0,r5,#1 ;231
0001c8 e20050ff AND r5,r0,#0xff ;231
|L1.460|
0001cc e1550004 CMP r5,r4 ;231
0001d0 bafffff2 BLT |L1.416|
;;;234 }
;;;235 }
0001d4 e8bd4030 POP {r4,r5,lr}
0001d8 e12fff1e BX lr
;;;236
ENDP
||CRC|| PROC
;;;249 uchar CRC (uchar j)
;;;250 {
0001dc e1a02000 MOV r2,r0
;;;251
;;;252 uchar i,crc_data=0;
0001e0 e3a00000 MOV r0,#0
;;;253 for(i=0;i < 256; i++)
0001e4 e3a01000 MOV r1,#0
0001e8 ea000006 B |L1.520|
|L1.492|
;;;254 crc_data = CrcTable[crc_data^temp_buff[i]];
0001ec e59f31e0 LDR r3,|L1.980|
0001f0 e7d33001 LDRB r3,[r3,r1]
0001f4 e0233000 EOR r3,r3,r0
0001f8 e59fc1d8 LDR r12,|L1.984|
0001fc e7dc0003 LDRB r0,[r12,r3]
000200 e2813001 ADD r3,r1,#1 ;253
000204 e20310ff AND r1,r3,#0xff ;253
|L1.520|
000208 e3510c01 CMP r1,#0x100 ;253
00020c bafffff6 BLT |L1.492|
;;;255 return (crc_data);
;;;256 }
000210 e12fff1e BX lr
;;;257
ENDP
GemTemp PROC
;;;271
;;;272 {
000214 e92d4010 PUSH {r4,lr}
;;;273
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -