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

📄 18b202114.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.\SDRAM\18b202114.o --depend=.\SDRAM\18b202114.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -IC:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\18b202114.crf ..\18b202114.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  udelay PROC
;;;16     	int i;
;;;17     	num = num / 2;
000000  e1a01000          MOV      r1,r0
000004  e0803fa0          ADD      r3,r0,r0,LSR #31
000008  e1a000c3          ASR      r0,r3,#1
;;;18     	for(i=0;i<num;i++);
00000c  e3a02000          MOV      r2,#0
000010  ea000000          B        |L1.24|
                  |L1.20|
000014  e2822001          ADD      r2,r2,#1
                  |L1.24|
000018  e1520000          CMP      r2,r0
00001c  bafffffc          BLT      |L1.20|
;;;19     }
000020  e12fff1e          BX       lr
;;;20     
                          ENDP

                  s3c2410_gpio_cfgpin PROC
;;;22     {	
;;;23     	if(state == CFG_IN)
000024  e3500000          CMP      r0,#0
000028  1a000005          BNE      |L1.68|
;;;24     		rGPECON = (rGPECON & 0xff3fffff) | 0x00000000; //set GE11
00002c  e3a01456          MOV      r1,#0x56000000
000030  e5911040          LDR      r1,[r1,#0x40]
000034  e3c11503          BIC      r1,r1,#0xc00000
000038  e3a02456          MOV      r2,#0x56000000
00003c  e5821040          STR      r1,[r2,#0x40]
000040  ea000005          B        |L1.92|
                  |L1.68|
;;;25     	else
;;;26     		rGPECON = (rGPECON & 0xff3fffff) | 0x00400000; //set GE11
000044  e3a01456          MOV      r1,#0x56000000
000048  e5911040          LDR      r1,[r1,#0x40]
00004c  e3c11503          BIC      r1,r1,#0xc00000
000050  e3811501          ORR      r1,r1,#0x400000
000054  e3a02456          MOV      r2,#0x56000000
000058  e5821040          STR      r1,[r2,#0x40]
                  |L1.92|
;;;27     		
;;;28     }
00005c  e12fff1e          BX       lr
;;;29     void s3c2410_gpio_pullup(int state)
                          ENDP

                  s3c2410_gpio_pullup PROC
;;;30     {
;;;31     	if(state == 0)
000060  e3500000          CMP      r0,#0
000064  1a000006          BNE      |L1.132|
;;;32     		rGPEUP  = rGPEUP & 0xf7ff;
000068  e3a01456          MOV      r1,#0x56000000
00006c  e5911048          LDR      r1,[r1,#0x48]
000070  e59f22e8          LDR      r2,|L1.864|
000074  e0011002          AND      r1,r1,r2
000078  e3a02456          MOV      r2,#0x56000000
00007c  e5821048          STR      r1,[r2,#0x48]
000080  ea000004          B        |L1.152|
                  |L1.132|
;;;33     	else
;;;34     		rGPEUP  = rGPEUP | 0x0800;	
000084  e3a01456          MOV      r1,#0x56000000
000088  e5911048          LDR      r1,[r1,#0x48]
00008c  e3811b02          ORR      r1,r1,#0x800
000090  e3a02456          MOV      r2,#0x56000000
000094  e5821048          STR      r1,[r2,#0x48]
                  |L1.152|
;;;35     }
000098  e12fff1e          BX       lr
;;;36     
                          ENDP

                  s3c2410_gpio_setpin PROC
;;;38     {
;;;39     	if(bit == 0)
00009c  e3500000          CMP      r0,#0
0000a0  1a000006          BNE      |L1.192|
;;;40     		rGPEDAT  = rGPEDAT & 0xf7ff;
0000a4  e3a01456          MOV      r1,#0x56000000
0000a8  e5911044          LDR      r1,[r1,#0x44]
0000ac  e59f22ac          LDR      r2,|L1.864|
0000b0  e0011002          AND      r1,r1,r2
0000b4  e3a02456          MOV      r2,#0x56000000
0000b8  e5821044          STR      r1,[r2,#0x44]
0000bc  ea000004          B        |L1.212|
                  |L1.192|
;;;41     	else
;;;42     		rGPEDAT  = rGPEDAT | 0x0800;
0000c0  e3a01456          MOV      r1,#0x56000000
0000c4  e5911044          LDR      r1,[r1,#0x44]
0000c8  e3811b02          ORR      r1,r1,#0x800
0000cc  e3a02456          MOV      r2,#0x56000000
0000d0  e5821044          STR      r1,[r2,#0x44]
                  |L1.212|
;;;43     	
;;;44     }
0000d4  e12fff1e          BX       lr
;;;45     int s3c2410_gpio_getpin(int dq)
                          ENDP

                  s3c2410_gpio_getpin PROC
;;;46     {	
0000d8  e1a01000          MOV      r1,r0
;;;47     	if((rGPEDAT & 0x0800) == 0x0) 
0000dc  e3a00456          MOV      r0,#0x56000000
0000e0  e5900044          LDR      r0,[r0,#0x44]
0000e4  e3100b02          TST      r0,#0x800
0000e8  1a000001          BNE      |L1.244|
;;;48     		return 0;
0000ec  e3a00000          MOV      r0,#0
                  |L1.240|
;;;49     	else 
;;;50     		return 1;
;;;51     }
0000f0  e12fff1e          BX       lr
                  |L1.244|
0000f4  e3a00001          MOV      r0,#1                 ;50
0000f8  eafffffc          B        |L1.240|
;;;52     
                          ENDP

                  ds18b20_reset PROC
;;;54     int ds18b20_reset()      //18b20总线复位  //ds18b20复位,返回0成功,返回1失败
;;;55     {
0000fc  e92d4010          PUSH     {r4,lr}
;;;56     	int i,ret;
;;;57     	s3c2410_gpio_cfgpin(CFG_OUT);
000100  e3a00001          MOV      r0,#1
000104  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;58       	s3c2410_gpio_pullup(0);
000108  e3a00000          MOV      r0,#0
00010c  ebfffffe          BL       s3c2410_gpio_pullup
;;;59     	s3c2410_gpio_setpin(1);
000110  e3a00001          MOV      r0,#1
000114  ebfffffe          BL       s3c2410_gpio_setpin
;;;60     	udelay(20);
000118  e3a00014          MOV      r0,#0x14
00011c  ebfffffe          BL       udelay
;;;61     	s3c2410_gpio_setpin(0);                //拉低数据线电平
000120  e3a00000          MOV      r0,#0
000124  ebfffffe          BL       s3c2410_gpio_setpin
;;;62     	udelay(600);          //精确延时480us-960us
000128  e3a00f96          MOV      r0,#0x258
00012c  ebfffffe          BL       udelay
;;;63     	s3c2410_gpio_setpin(1);                //拉高电平
000130  e3a00001          MOV      r0,#1
000134  ebfffffe          BL       s3c2410_gpio_setpin
;;;64     	udelay(30);           //精确延时15us-60us
000138  e3a0001e          MOV      r0,#0x1e
00013c  ebfffffe          BL       udelay
;;;65     	s3c2410_gpio_cfgpin(CFG_IN);
000140  e3a00000          MOV      r0,#0
000144  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;66       	ret = s3c2410_gpio_getpin(DQ);
000148  e3a00b02          MOV      r0,#0x800
00014c  ebfffffe          BL       s3c2410_gpio_getpin
000150  e1a04000          MOV      r4,r0
;;;67       	if(ret)
000154  e3540000          CMP      r4,#0
000158  0a000004          BEQ      |L1.368|
;;;68       	{
;;;69       		uart_printf("err\n");
00015c  e28f0c02          ADR      r0,|L1.868|
000160  ebfffffe          BL       uart_printf
;;;70     		return -1;
000164  e3e00000          MVN      r0,#0
                  |L1.360|
000168  e8bd4010          POP      {r4,lr}
;;;71       	}
;;;72     	else
;;;73     	{
;;;74     		uart_printf("OK!");
;;;75     	}
;;;76      	s3c2410_gpio_cfgpin(CFG_OUT);
;;;77       	s3c2410_gpio_pullup(0);
;;;78       	s3c2410_gpio_setpin(1); 
;;;79       	return ret;
;;;80     }
00016c  e12fff1e          BX       lr
                  |L1.368|
000170  e28f0f7d          ADR      r0,|L1.876|
000174  ebfffffe          BL       uart_printf
000178  e3a00001          MOV      r0,#1                 ;76
00017c  ebfffffe          BL       s3c2410_gpio_cfgpin
000180  e3a00000          MOV      r0,#0                 ;77
000184  ebfffffe          BL       s3c2410_gpio_pullup
000188  e3a00001          MOV      r0,#1                 ;78
00018c  ebfffffe          BL       s3c2410_gpio_setpin
000190  e1a00004          MOV      r0,r4                 ;79
000194  eafffff3          B        |L1.360|
;;;81     
                          ENDP

                  write_byte PROC
;;;84     void write_byte(unsigned char data)//向18b20写一个字节
;;;85     {
000198  e92d4030          PUSH     {r4,r5,lr}
00019c  e1a04000          MOV      r4,r0
;;;86       char i = 0;
0001a0  e3a05000          MOV      r5,#0
;;;87       s3c2410_gpio_cfgpin(CFG_OUT);
0001a4  e3a00001          MOV      r0,#1
0001a8  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;88       s3c2410_gpio_pullup(1);
0001ac  e3a00001          MOV      r0,#1
0001b0  ebfffffe          BL       s3c2410_gpio_pullup
;;;89       for(i=0; i<8; i++){
0001b4  e1a00000          MOV      r0,r0
0001b8  ea00000e          B        |L1.504|
                  |L1.444|
;;;90         s3c2410_gpio_setpin(0);
0001bc  e3a00000          MOV      r0,#0
0001c0  ebfffffe          BL       s3c2410_gpio_setpin
;;;91         //udelay(2);
;;;92     	i = i;
0001c4  e1a00000          MOV      r0,r0
;;;93     	i = i;
0001c8  e1a00000          MOV      r0,r0
;;;94         //s3c2410_gpio_setpin(1);
;;;95         s3c2410_gpio_setpin(data&0x01);
0001cc  e2040001          AND      r0,r4,#1
0001d0  ebfffffe          BL       s3c2410_gpio_setpin
;;;96         udelay(60);
0001d4  e3a0003c          MOV      r0,#0x3c
0001d8  ebfffffe          BL       udelay
;;;97         s3c2410_gpio_setpin(1);
0001dc  e3a00001          MOV      r0,#1
0001e0  ebfffffe          BL       s3c2410_gpio_setpin
;;;98         udelay(4);
0001e4  e3a00004          MOV      r0,#4
0001e8  ebfffffe          BL       udelay
;;;99         data >>= 1;
0001ec  e1a040c4          ASR      r4,r4,#1
0001f0  e2850001          ADD      r0,r5,#1              ;89
0001f4  e20050ff          AND      r5,r0,#0xff           ;89
                  |L1.504|
0001f8  e3550008          CMP      r5,#8                 ;89
0001fc  baffffee          BLT      |L1.444|
;;;100      }
;;;101    }
000200  e8bd4030          POP      {r4,r5,lr}
000204  e12fff1e          BX       lr
;;;102    unsigned char read_byte(void)//从18b20读一个字节
                          ENDP

                  read_byte PROC
;;;103    {
000208  e92d4030          PUSH     {r4,r5,lr}
;;;104      unsigned char i;
;;;105      unsigned char data=0;
00020c  e3a05000          MOV      r5,#0
;;;106      s3c2410_gpio_cfgpin(CFG_OUT);
000210  e3a00001          MOV      r0,#1
000214  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;107      s3c2410_gpio_pullup(0);
000218  e3a00000          MOV      r0,#0
00021c  ebfffffe          BL       s3c2410_gpio_pullup
;;;108      for(i=0; i<8; i++)
000220  e3a04000          MOV      r4,#0
000224  ea000015          B        |L1.640|
                  |L1.552|
;;;109        { 
;;;110    	  data >>= 1;
000228  e1a050c5          ASR      r5,r5,#1
;;;111    	  s3c2410_gpio_cfgpin(CFG_OUT);
00022c  e3a00001          MOV      r0,#1
000230  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;112          s3c2410_gpio_setpin(0);
000234  e3a00000          MOV      r0,#0
000238  ebfffffe          BL       s3c2410_gpio_setpin
;;;113          udelay(20);
00023c  e3a00014          MOV      r0,#0x14
000240  ebfffffe          BL       udelay
;;;114          s3c2410_gpio_setpin(1);
000244  e3a00001          MOV      r0,#1
000248  ebfffffe          BL       s3c2410_gpio_setpin
;;;115          s3c2410_gpio_cfgpin(CFG_IN);  
00024c  e3a00000          MOV      r0,#0
000250  ebfffffe          BL       s3c2410_gpio_cfgpin
;;;116    	  //udelay(10);
;;;117          if(s3c2410_gpio_getpin(DQ))
000254  e3a00b02          MOV      r0,#0x800
000258  ebfffffe          BL       s3c2410_gpio_getpin
00025c  e3500000          CMP      r0,#0
000260  0a000001          BEQ      |L1.620|
;;;118        		data |= 0x80;
000264  e3855080          ORR      r5,r5,#0x80
000268  ea000000          B        |L1.624|
                  |L1.620|
;;;119    	  else
;;;120    	  		data &= 0x7f;
00026c  e205507f          AND      r5,r5,#0x7f
                  |L1.624|
;;;121          udelay(62);
000270  e3a0003e          MOV      r0,#0x3e
000274  ebfffffe          BL       udelay
000278  e2840001          ADD      r0,r4,#1              ;108
00027c  e20040ff          AND      r4,r0,#0xff           ;108
                  |L1.640|
000280  e3540008          CMP      r4,#8                 ;108
000284  baffffe7          BLT      |L1.552|
;;;122          //s3c2410_gpio_cfgpin(CFG_OUT);
;;;123          //s3c2410_gpio_pullup(0);
;;;124          //s3c2410_gpio_setpin(1);
;;;125          //udelay(10);
;;;126        }
;;;127      return data;
000288  e1a00005          MOV      r0,r5
00028c  e8bd4030          POP      {r4,r5,lr}
;;;128    }
000290  e12fff1e          BX       lr
;;;129    
                          ENDP

                  convert PROC
;;;130    void convert(void)
;;;131    {
000294  e92d4010          PUSH     {r4,lr}
;;;132    	ds18b20_reset();
000298  ebfffffe          BL       ds18b20_reset
;;;133    	//udelay(100);
;;;134    	write_byte(0xcc);
00029c  e3a000cc          MOV      r0,#0xcc
0002a0  ebfffffe          BL       write_byte
;;;135    	write_byte(0x44);	
0002a4  e3a00044          MOV      r0,#0x44
0002a8  ebfffffe          BL       write_byte
;;;136    }
0002ac  e8bd4010          POP      {r4,lr}
0002b0  e12fff1e          BX       lr
;;;137      
                          ENDP

                  temp_read PROC
;;;138    void temp_read(void)
;;;139    {
0002b4  e92d41f0          PUSH     {r4-r8,lr}
;;;140    	unsigned char a,b;
;;;141    	uchar i,j;
;;;142    	for(j = 0;j < 4;j++)
0002b8  e3a07000          MOV      r7,#0
0002bc  ea000023          B        |L1.848|
                  |L1.704|
;;;143    	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -