⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.txt

📁 在mdk下面实现对于ds18b20的控制
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; 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 + -