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

📄 ds18b20.lst

📁 温度传感器ds18b20的操作代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
                            	// C格式:        unsigned int F_18B20_Reset(void);
                            	// 实现功能: 一线总线复位及从设备应答控制程序
                            	// 入口参数: 无
                            	// 出口参数: 0表示复位失败   1表示复位成功
                            	//======================================================      
                            	.PUBLIC _F_18B20_Reset
                            	_F_18B20_Reset:
0000A37A 09 93 00 80        	      r1=DQ;                        //将端口b15设置成带数据缓存器的低电平输出
0000A37C 19 D3 08 70        	      [P_IOB_Attrib]=r1;
0000A37E 19 D3 07 70        	      [P_IOB_Dir]= r1 ;
0000A380 40 92              	      r1=0x0000;
0000A381 19 D3 05 70        	      [P_IOB_Data] = r1;
0000A383 09 93 58 02        	      r1 = 600
0000A385 40 F0 3C A3        	      call _F_18B20_Delay               //延时600us,发送复位脉冲(400us--960us)
0000A387 40 92              	      r1=0x0000;                        
0000A388 19 D3 08 70        	      [P_IOB_Attrib]=r1;                 //将端口b15设置成带上拉电阻的输入端
0000A38A 19 D3 07 70        	      [P_IOB_Dir]= r1 ;
0000A38C 09 93 00 80        	      r1=DQ;
0000A38E 19 D3 05 70        	      [P_IOB_Data] = r1;               
0000A390 5E 92              	      r1 = 30
0000A391 40 F0 3C A3        	      call _F_18B20_Delay                          //Delay 30us
0000A393 0A 95 E8 03        	      r2 = 1000
                            	F_18B20_Reset_L:
0000A395 41 24              	        r2 -=1                    
0000A396 11 93 05 70        	        r1 = [P_IOB_Data]
0000A398 09 B3 00 80        	        r1 = r1&DQ;              //====================================
0000A39A 40 42              	        cmp r1,0x0000
0000A39B 47 4E              	        jne F_18B20_Reset_L           //关键所在:先检测DQ是否为低电平,检测到低电平后      
0000A39C 0A 95 E8 03        	        r2 =1000                      //检测高电平,这个时候表示DS18B20完全复位成功
                            	F_18B20_Reset_L2: 
0000A39E 41 24              	        r2-=1                     
0000A39F 11 93 05 70        	        r1 = [P_IOB_Data]
0000A3A1 09 B3 00 80        	        r1 = r1&DQ;                //=================================
0000A3A3 40 42              	        cmp r1,0x0000
0000A3A4 47 5E              	        je F_18B20_Reset_L2
0000A3A5 41 92              	        r1 = 1
0000A3A6 00 EE              	        jmp F_18B20_Reset_Exit
                            	F_18B20_Reset_Exit:
0000A3A7 90 9A              	        retf
                            	//======================================================
                            	// 汇编格式: _F_18B20_Write_1
                            	// C格式:        void F_18B20_Write_1(void);
                            	// 实现功能: 向一线总线写1
                            	// 入口参数: 无
                            	// 出口参数: 无
                            	//======================================================
                            	.PUBLIC _F_18B20_Write_1
                            	_F_18B20_Write_1:
0000A3A8 09 93 00 80        	        r1=DQ;                        //将端口b15设置成带数据缓存器的低电平输出
0000A3AA 19 D3 08 70        	        [P_IOB_Attrib]=r1;
0000A3AC 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3AE 40 92              	        r1=0x0000;
0000A3AF 19 D3 05 70        	        [P_IOB_Data] = r1;
0000A3B1 4F 92              	        r1 = 15
0000A3B2 40 F0 3C A3        	        call _F_18B20_Delay                         
0000A3B4 0A A5 00 80        	        r2 = r2|DQ                      //将DQ线拉高进行写1操作
0000A3B6 1A D5 05 70        	        [P_IOB_Data] = r2
0000A3B8 6D 92              	        r1 = 45
0000A3B9 40 F0 3C A3        	        call _F_18B20_Delay
0000A3BB 40 92              	         r1=0x0000;                            
0000A3BC 19 D3 08 70        	        [P_IOB_Attrib]=r1;                 //将端口b15设置成带上拉电阻的输入端
0000A3BE 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3C0 09 93 00 80        	        r1=DQ;
0000A3C2 19 D3 05 70        	        [P_IOB_Data] = r1; 
0000A3C4 90 9A              	        retf
                            	        
                            	//======================================================
                            	// 汇编格式: _F_18B20_Write_0
                            	// C格式:        void F_18B20_Write_0(void);
                            	// 实现功能: 向一线总线写0
                            	// 入口参数: 无
                            	// 出口参数: 无
                            	//======================================================
                            	.PUBLIC _F_18B20_Write_0
                            	_F_18B20_Write_0:
0000A3C5 09 93 00 80        	        r1=DQ;                        //将端口b15设置成带数据缓存器的低电平输出
0000A3C7 19 D3 08 70        	        [P_IOB_Attrib]=r1;
0000A3C9 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3CB 19 D3 05 70        	        [P_IOB_Data] = r1;
0000A3CD 40 92              	        r1=0x0000;
0000A3CE 19 D3 05 70        	        [P_IOB_Data] = r1;
0000A3D0 7C 92              	        r1 = 60                           //Delay 60us,进行写0操作
0000A3D1 40 F0 3C A3        	        call _F_18B20_Delay
0000A3D3 40 92              	         r1=0x0000;                            
0000A3D4 19 D3 08 70        	        [P_IOB_Attrib]=r1;                 //将端口b15设置成带上拉电阻的输入端
0000A3D6 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3D8 09 93 00 80        	        r1=DQ;
0000A3DA 19 D3 05 70        	        [P_IOB_Data] = r1; 
0000A3DC 90 9A              	        retf
                            	
                            	//======================================================
                            	// 汇编格式: _F_18B20_Read_DQ
                            	// C格式:        unsigned int F_18B20_Read_DQ(void);
                            	// 实现功能: 读一位一线总线的数据
                            	// 入口参数: 无
                            	// 出口参数: 当前读回的位的值0/1
                            	//======================================================      
                            	.PUBLIC _F_18B20_Read_DQ
                            	_F_18B20_Read_DQ:
0000A3DD 09 93 00 80        	        r1=DQ;                        //将端口b15设置成带数据缓存器的低电平输出
0000A3DF 19 D3 08 70        	        [P_IOB_Attrib]=r1;
0000A3E1 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3E3 40 92              	        r1=0x0000;
0000A3E4 19 D3 05 70        	        [P_IOB_Data] = r1;
0000A3E6 42 92              	        r1 = 2                              //延时1us
0000A3E7 40 F0 3C A3        	        call _F_18B20_Delay                         
0000A3E9 40 92              	        r1=0x0000;                        
0000A3EA 19 D3 08 70        	        [P_IOB_Attrib]=r1;                 //将端口b15设置成带上拉电阻的输入端
0000A3EC 19 D3 07 70        	        [P_IOB_Dir]= r1 ;
0000A3EE 09 93 00 80        	        r1=DQ;
0000A3F0 19 D3 05 70        	        [P_IOB_Data] = r1; 
0000A3F2 4F 92              	        r1=15
0000A3F3 40 F0 3C A3        	        call _F_18B20_Delay
0000A3F5 13 97 05 70        	        r3 = [P_IOB_Data]                     //将端口b15设置成带上拉电阻的输入端
0000A3F7 0B B7 00 80        	        r3 = r3&DQ
0000A3F9 02 5E              	        jz L18B20_Read_0                     //jz:运算结果为0,则z=1跳转             
0000A3FA 0B 97 00 80        	        r3 = 0x8000;
                            	L18B20_Read_0:
0000A3FC 6D 92              	        r1 = 45
0000A3FD 40 F0 3C A3        	        call _F_18B20_Delay
0000A3FF 0A A5 00 80        	        r2 = r2|DQ
0000A401 1A D5 05 70        	        [P_IOB_Data] = r2
0000A403 41 92              	        r1 = 1
0000A404 40 F0 3C A3        	        call _F_18B20_Delay                          //Delay 1us
0000A406 03 93              	        r1 = r3
0000A407 90 9A              	        retf
                            	        
                            	        
                            	        
                            	 //==============================================
                            	 //        IRQ中断
                            	 //==============================================
000081AA                    	 .text
                            	 .public _IRQ1;
                            	 _IRQ1:
000081AA A8 DA              	      push r1,r5 to[sp];
000081AB 41 92              	      r1=0x0001;
000081AC 19 D3 12 70        	      [P_Watchdog_Clear]=r1;
000081AE 09 93 00 10        	      r1=0x1000;
000081B0 19 D3 11 70        	      [P_INT_Clear]=r1;
000081B2 A8 90              	      pop r1,r5 from [sp];
000081B3 98 9A              	      reti;
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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