📄 ds18b20.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 939] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\ds18b20.o" --depend=".\NOR FLASH\ds18b20.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -IC:\Keil\ARM\INC\Samsung --omf_browse=".\NOR FLASH\ds18b20.crf" Source\ds18b20.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
beep_on_off PROC
;;;35 void beep_on_off(int time)
;;;36 {
000000 e92d4070 PUSH {r4-r6,lr}
000004 e1a04000 MOV r4,r0
;;;37 int i;
;;;38 rCPLDLEDADDR = 0x00;
000008 e3a00000 MOV r0,#0
00000c e59f1488 LDR r1,|L1.1180|
000010 e5c10000 STRB r0,[r1,#0]
;;;39 for(i = 0; i < 10000/time; i++);
000014 e3a05000 MOV r5,#0
000018 ea000000 B |L1.32|
|L1.28|
00001c e2855001 ADD r5,r5,#1
|L1.32|
000020 e1a01004 MOV r1,r4
000024 e59f0474 LDR r0,|L1.1184|
000028 ebfffffe BL __aeabi_idivmod
00002c e1500005 CMP r0,r5
000030 cafffff9 BGT |L1.28|
;;;40 rCPLDLEDADDR = 0xFE;
000034 e3a000fe MOV r0,#0xfe
000038 e59f145c LDR r1,|L1.1180|
00003c e5c10000 STRB r0,[r1,#0]
;;;41 for(i = 0; i < 10000/time; i++);
000040 e3a05000 MOV r5,#0
000044 ea000000 B |L1.76|
|L1.72|
000048 e2855001 ADD r5,r5,#1
|L1.76|
00004c e1a01004 MOV r1,r4
000050 e59f0448 LDR r0,|L1.1184|
000054 ebfffffe BL __aeabi_idivmod
000058 e1500005 CMP r0,r5
00005c cafffff9 BGT |L1.72|
;;;42 }
000060 e8bd4070 POP {r4-r6,lr}
000064 e12fff1e BX lr
;;;43
ENDP
udelay PROC
;;;54 int i;
;;;55 for(i=0; i < num;i++);
000068 e3a01000 MOV r1,#0
00006c ea000000 B |L1.116|
|L1.112|
000070 e2811001 ADD r1,r1,#1
|L1.116|
000074 e1510000 CMP r1,r0
000078 bafffffc BLT |L1.112|
;;;56 }
00007c e12fff1e BX lr
;;;57 /*********************************************************************************************
ENDP
s3c2410_gpio_cfgpin PROC
;;;67 {
;;;68 if(state == CFG_IN)
000080 e3500000 CMP r0,#0
000084 1a000005 BNE |L1.160|
;;;69 rGPECON = (rGPECON & 0xff3fffff) | 0x00000000; //set GE11
000088 e3a01456 MOV r1,#0x56000000
00008c e5911040 LDR r1,[r1,#0x40]
000090 e3c11503 BIC r1,r1,#0xc00000
000094 e3a02456 MOV r2,#0x56000000
000098 e5821040 STR r1,[r2,#0x40]
00009c ea000005 B |L1.184|
|L1.160|
;;;70 else
;;;71 rGPECON = (rGPECON & 0xff3fffff) | 0x00400000; //set GE11
0000a0 e3a01456 MOV r1,#0x56000000
0000a4 e5911040 LDR r1,[r1,#0x40]
0000a8 e3c11503 BIC r1,r1,#0xc00000
0000ac e3811501 ORR r1,r1,#0x400000
0000b0 e3a02456 MOV r2,#0x56000000
0000b4 e5821040 STR r1,[r2,#0x40]
|L1.184|
;;;72
;;;73 }
0000b8 e12fff1e BX lr
;;;74 /*********************************************************************************************
ENDP
s3c2410_gpio_pullup PROC
;;;84 {
;;;85 if(state == 0)
0000bc e3500000 CMP r0,#0
0000c0 1a000006 BNE |L1.224|
;;;86 rGPEUP = rGPEUP & 0xf7ff;
0000c4 e3a01456 MOV r1,#0x56000000
0000c8 e5911048 LDR r1,[r1,#0x48]
0000cc e59f23d0 LDR r2,|L1.1188|
0000d0 e0011002 AND r1,r1,r2
0000d4 e3a02456 MOV r2,#0x56000000
0000d8 e5821048 STR r1,[r2,#0x48]
0000dc ea000004 B |L1.244|
|L1.224|
;;;87 else
;;;88 rGPEUP = rGPEUP | 0x0800;
0000e0 e3a01456 MOV r1,#0x56000000
0000e4 e5911048 LDR r1,[r1,#0x48]
0000e8 e3811b02 ORR r1,r1,#0x800
0000ec e3a02456 MOV r2,#0x56000000
0000f0 e5821048 STR r1,[r2,#0x48]
|L1.244|
;;;89 }
0000f4 e12fff1e BX lr
;;;90 /*********************************************************************************************
ENDP
s3c2410_gpio_setpin PROC
;;;99 {
;;;100 if(bit == 0)
0000f8 e3500000 CMP r0,#0
0000fc 1a000006 BNE |L1.284|
;;;101 rGPEDAT = rGPEDAT & 0xf7ff;
000100 e3a01456 MOV r1,#0x56000000
000104 e5911044 LDR r1,[r1,#0x44]
000108 e59f2394 LDR r2,|L1.1188|
00010c e0011002 AND r1,r1,r2
000110 e3a02456 MOV r2,#0x56000000
000114 e5821044 STR r1,[r2,#0x44]
000118 ea000004 B |L1.304|
|L1.284|
;;;102 else
;;;103 rGPEDAT = rGPEDAT | 0x0800;
00011c e3a01456 MOV r1,#0x56000000
000120 e5911044 LDR r1,[r1,#0x44]
000124 e3811b02 ORR r1,r1,#0x800
000128 e3a02456 MOV r2,#0x56000000
00012c e5821044 STR r1,[r2,#0x44]
|L1.304|
;;;104
;;;105 }
000130 e12fff1e BX lr
;;;106 /*********************************************************************************************
ENDP
s3c2410_gpio_getpin PROC
;;;115 int s3c2410_gpio_getpin(int dq)
;;;116 {
000134 e1a01000 MOV r1,r0
;;;117 if((rGPEDAT & 0x0800) == 0x0)
000138 e3a00456 MOV r0,#0x56000000
00013c e5900044 LDR r0,[r0,#0x44]
000140 e3100b02 TST r0,#0x800
000144 1a000001 BNE |L1.336|
;;;118 return 0;
000148 e3a00000 MOV r0,#0
|L1.332|
;;;119 else
;;;120 return 1;
;;;121 }
00014c e12fff1e BX lr
|L1.336|
000150 e3a00001 MOV r0,#1 ;120
000154 eafffffc B |L1.332|
;;;122 /*********************************************************************************************
ENDP
ds18b20_reset PROC
;;;131 int ds18b20_reset(void) //ds18b20复位,返回0成功,返回1失败
;;;132 {
000158 e92d4010 PUSH {r4,lr}
;;;133 int ret;
;;;134 s3c2410_gpio_cfgpin(CFG_OUT);
00015c e3a00001 MOV r0,#1
000160 ebfffffe BL s3c2410_gpio_cfgpin
;;;135 s3c2410_gpio_pullup(0);
000164 e3a00000 MOV r0,#0
000168 ebfffffe BL s3c2410_gpio_pullup
;;;136 s3c2410_gpio_setpin(0); //拉低数据线电平
00016c e3a00000 MOV r0,#0
000170 ebfffffe BL s3c2410_gpio_setpin
;;;137 udelay(300); //精确延时480us-960us
000174 e3a00f4b MOV r0,#0x12c
000178 ebfffffe BL udelay
;;;138 s3c2410_gpio_setpin(1); //拉高电平
00017c e3a00001 MOV r0,#1
000180 ebfffffe BL s3c2410_gpio_setpin
;;;139 udelay(25); //精确延时15us-60us
000184 e3a00019 MOV r0,#0x19
000188 ebfffffe BL udelay
;;;140 s3c2410_gpio_cfgpin(CFG_IN);
00018c e3a00000 MOV r0,#0
000190 ebfffffe BL s3c2410_gpio_cfgpin
;;;141 ret = s3c2410_gpio_getpin(DQ);
000194 e3a00b02 MOV r0,#0x800
000198 ebfffffe BL s3c2410_gpio_getpin
00019c e1a04000 MOV r4,r0
;;;142 if(ret)
0001a0 e3540000 CMP r4,#0
0001a4 0a000004 BEQ |L1.444|
;;;143 {
;;;144 uart_printf(" Error\n");
0001a8 e28f0fbe ADR r0,|L1.1192|
0001ac ebfffffe BL uart_printf
;;;145 return -1;
0001b0 e3e00000 MVN r0,#0
|L1.436|
0001b4 e8bd4010 POP {r4,lr}
;;;146 }
;;;147 else
;;;148 {
;;;149 // uart_printf("OK!");
;;;150 udelay(40);
;;;151 }
;;;152 return ret;
;;;153 }
0001b8 e12fff1e BX lr
|L1.444|
0001bc e3a00028 MOV r0,#0x28 ;150
0001c0 ebfffffe BL udelay
0001c4 e1a00004 MOV r0,r4 ;152
0001c8 eafffff9 B |L1.436|
;;;154
ENDP
write_byte PROC
;;;164 void write_byte(unsigned char data)//向18b20写一个字节
;;;165 {
0001cc e92d4010 PUSH {r4,lr}
0001d0 e1a03000 MOV r3,r0
;;;166 char i = 0;
0001d4 e3a04000 MOV r4,#0
;;;167 s3c2410_gpio_cfgpin(CFG_OUT);
0001d8 e3a00001 MOV r0,#1
0001dc ebfffffe BL s3c2410_gpio_cfgpin
;;;168 s3c2410_gpio_pullup(0);
0001e0 e3a00000 MOV r0,#0
0001e4 ebfffffe BL s3c2410_gpio_pullup
;;;169 for(i=0; i<8; i++){
0001e8 e1a00000 MOV r0,r0
0001ec ea00000d B |L1.552|
|L1.496|
;;;170 s3c2410_gpio_setpin(1);
0001f0 e3a00001 MOV r0,#1
0001f4 ebfffffe BL s3c2410_gpio_setpin
;;;171 i = i;
0001f8 e1a00000 MOV r0,r0
;;;172 s3c2410_gpio_setpin(0);
0001fc e3a00000 MOV r0,#0
000200 ebfffffe BL s3c2410_gpio_setpin
;;;173 //udelay(2);
;;;174 udelay(1);
000204 e3a00001 MOV r0,#1
000208 ebfffffe BL udelay
;;;175 s3c2410_gpio_setpin(data&0x01);
00020c e2030001 AND r0,r3,#1
000210 ebfffffe BL s3c2410_gpio_setpin
;;;176 udelay(25);
000214 e3a00019 MOV r0,#0x19
000218 ebfffffe BL udelay
;;;177 data >>= 1;
00021c e1a030c3 ASR r3,r3,#1
000220 e2840001 ADD r0,r4,#1 ;169
000224 e20040ff AND r4,r0,#0xff ;169
|L1.552|
000228 e3540008 CMP r4,#8 ;169
00022c baffffef BLT |L1.496|
;;;178 }
;;;179 s3c2410_gpio_setpin(1);
000230 e3a00001 MOV r0,#1
000234 ebfffffe BL s3c2410_gpio_setpin
;;;180 }
000238 e8bd4010 POP {r4,lr}
00023c e12fff1e BX lr
;;;181 /*********************************************************************************************
ENDP
read_byte PROC
;;;190 unsigned char read_byte(void)//从18b20读一个字节
;;;191 {
000240 e92d4010 PUSH {r4,lr}
;;;192 unsigned char i;
;;;193 unsigned char data=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -