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

📄 smg_ds18b20.lst

📁 ds18b20在数码管上显示温度,在avr128已编译通过
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
      59 EFCF      LDI	R28,0xFF
      5A E1D0      LDI	R29,0x10
      5B BFCD      OUT	0x3D,R28
      5C BFDE      OUT	0x3E,R29
      5D 51CE      SUBI	R28,0x1E
      5E 40D0      SBCI	R29,0
      5F EA0A      LDI	R16,0xAA
      60 8308      STD	Y+0,R16
      61 2400      CLR	R0
      62 E1EA      LDI	R30,0x1A
      63 E0F1      LDI	R31,1
      64 E011      LDI	R17,1
      65 33E9      CPI	R30,0x39
      66 07F1      CPC	R31,R17
      67 F011      BEQ	0x006A
      68 9201      ST	R0,Z+
      69 CFFB      RJMP	0x0065
      6A 8300      STD	Z+0,R16
      6B E9E8      LDI	R30,0x98
      6C E0F0      LDI	R31,0
      6D E0A0      LDI	R26,0
      6E E0B1      LDI	R27,1
      6F E010      LDI	R17,0
      70 E000      LDI	R16,0
      71 BF0B      OUT	0x3B,R16
      72 3BE2      CPI	R30,0xB2
      73 07F1      CPC	R31,R17
      74 F021      BEQ	0x0079
      75 95C8      LPM
      76 9631      ADIW	R30,1
      77 920D      ST	R0,X+
      78 CFF9      RJMP	0x0072
      79 940E 01A8 CALL	_main
_exit:
      7B CFFF      RJMP	_exit
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\delay.h
(0001) #ifndef	_DELAY_H
(0002) #define	_DELAY_H
(0003) 
(0004) // mcu:avr   crystal=8MHz
(0005) 
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014) 
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned int xus);
(0023) 
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032) 
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041) 
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay10us(Word x10us);
(0050) 
(0051) 
(0052) void Delay_1us()
(0053) {
(0054) 	unsigned char t=2;
_Delay_1us:
  t                    --> R16
      7C E002      LDI	R16,2
(0055)    	t--;
      7D 950A      DEC	R16
      7E 9508      RET
_Delay_Us:
  xus                  --> R20
      7F 934A      ST	R20,-Y
      80 935A      ST	R21,-Y
      81 01A8      MOVW	R20,R16
(0056) }
(0057) 
(0058) void Delay_Us(unsigned int xus)
(0059) {
      82 C001      RJMP	0x0084
(0060) 	 while (xus--)
(0061)        	Delay_1us();
      83 DFF8      RCALL	_Delay_1us
      84 011A      MOVW	R2,R20
      85 5041      SUBI	R20,1
      86 4050      SBCI	R21,0
      87 2022      TST	R2
      88 F7D1      BNE	0x0083
      89 2033      TST	R3
      8A F7C1      BNE	0x0083
      8B 9159      LD	R21,Y+
      8C 9149      LD	R20,Y+
      8D 9508      RET
(0062) }
(0063) 
(0064) void Delay_1ms(void)
(0065) {
(0066) 	unsigned int i;
(0067) 	for(i=0;i<1142;i++)
_Delay_1ms:
  i                    --> R16
      8E 2700      CLR	R16
      8F 2711      CLR	R17
      90 C002      RJMP	0x0093
      91 5F0F      SUBI	R16,0xFF
      92 4F1F      SBCI	R17,0xFF
      93 3706      CPI	R16,0x76
      94 E0E4      LDI	R30,4
      95 071E      CPC	R17,R30
      96 F3D0      BCS	0x0091
      97 9508      RET
_Delay_Ms:
  i                    --> R20
  j                    --> R22
  xms                  --> R16
      98 940E 03CF CALL	push_xgsetF000
(0068) 		;
(0069) }
(0070) 
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) 	Word i,j; //variable:declare Word
(0074) 	for(i=0; i<xms; i++)
      9A 2744      CLR	R20
      9B 2755      CLR	R21
      9C C014      RJMP	0x00B1
(0075) 		for(j=0; j<498;j++)
      9D 2766      CLR	R22
      9E 2777      CLR	R23
      9F C00B      RJMP	0x00AB
(0076) 		{
(0077) 			NOP();
      A0 0000      NOP
(0078) 			NOP();
      A1 0000      NOP
(0079) 			NOP();
      A2 0000      NOP
(0080) 			NOP();
      A3 0000      NOP
(0081) 			NOP();
      A4 0000      NOP
(0082) 			NOP();
      A5 0000      NOP
(0083) 			NOP();
      A6 0000      NOP
(0084) 			NOP();
      A7 0000      NOP
(0085) 			NOP();
      A8 0000      NOP
      A9 5F6F      SUBI	R22,0xFF
      AA 4F7F      SBCI	R23,0xFF
      AB 3F62      CPI	R22,0xF2
      AC E0E1      LDI	R30,1
      AD 077E      CPC	R23,R30
      AE F388      BCS	0x00A0
      AF 5F4F      SUBI	R20,0xFF
      B0 4F5F      SBCI	R21,0xFF
      B1 1740      CP	R20,R16
      B2 0751      CPC	R21,R17
      B3 F348      BCS	0x009D
      B4 940C 03D4 JMP	pop_xgsetF000
_Delay10us:
  i                    --> R20
  j                    --> R22
  x10us                --> R16
      B6 940E 03CF CALL	push_xgsetF000
(0086) 		}
(0087) }
(0088) 
(0089) void Delay10us(Word x10us)//crystal=8MHz
(0090) {
(0091) 	Word i;Byte j; //variable:declare Word
(0092) 	for(i=0; i<x10us; i++)
      B8 2744      CLR	R20
      B9 2755      CLR	R21
      BA C00A      RJMP	0x00C5
(0093) 	{
(0094) 			for(j=0;j<2;j++)
      BB 2766      CLR	R22
      BC C004      RJMP	0x00C1
(0095) 			{
(0096) 			 	NOP();
      BD 0000      NOP
(0097) 				NOP();
      BE 0000      NOP
(0098) 				NOP();
      BF 0000      NOP
      C0 9563      INC	R22
      C1 3062      CPI	R22,2
      C2 F3D0      BCS	0x00BD
      C3 5F4F      SUBI	R20,0xFF
      C4 4F5F      SBCI	R21,0xFF
      C5 1740      CP	R20,R16
      C6 0751      CPC	R21,R17
      C7 F398      BCS	0x00BB
      C8 940C 03D4 JMP	pop_xgsetF000
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\initrialm128.h
(0001) //ICC-AVR application builder : 2007-6-27 10:26:06
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) /**************初始化m8函数***************/
(0006) #ifndef Initrial_M128_H
(0007) #define Initrial_M128_H
(0008) 
(0009) void Init_Devices(void);
(0010) void Port_Init(void);  
(0011) 
(0012)  
(0013) 
(0014) //call this routine to initialize all peripherals
(0015) void Init_Devices(void)
(0016) {
(0017) 	//stop errant interrupts until set up
(0018) 	CLI(); //disable all interrupts
_Init_Devices:
      CA 94F8      BCLR	7
(0019) 	Port_Init(); 
      CB D002      RCALL	_Port_Init
(0020) 	SEI(); //re-enable interrupts
      CC 9478      BSET	7
      CD 9508      RET
(0021) 	//all peripherals are now initialized
(0022) }
(0023) 
(0024) void Port_Init(void)
(0025) {
(0026) 	PORTA = 0xff;
_Port_Init:
      CE EF8F      LDI	R24,0xFF
      CF BB8B      OUT	0x1B,R24
(0027) 	DDRA  = 0xff;
      D0 BB8A      OUT	0x1A,R24
(0028) 	PORTB = 0xff;
      D1 BB88      OUT	0x18,R24
(0029) 	DDRB  = 0xff;
      D2 BB87      OUT	0x17,R24
(0030) 	PORTC = 0xff; //m103 output only
      D3 BB85      OUT	0x15,R24
(0031) 	DDRC  = 0xff;
      D4 BB84      OUT	0x14,R24
(0032) 	PORTD = 0xff;
      D5 BB82      OUT	0x12,R24
(0033) 	DDRD  = 0xff;
      D6 BB81      OUT	0x11,R24
(0034) 	PORTE = 0xFF;
      D7 B983      OUT	0x03,R24
(0035) 	DDRE  = 0xff;
      D8 B982      OUT	0x02,R24
(0036) 	PORTF = 0xff;
      D9 9380 0062 STS	0x0062,R24
(0037) 	DDRF  = 0xff;
      DB 9380 0061 STS	0x0061,R24
(0038) 	PORTG = 0xff;
      DD 9380 0065 STS	0x0065,R24
(0039) 	DDRG  = 0xff;
      DF 9380 0064 STS	0x0064,R24
      E1 9508      RET
_resetDS18B20:
  errTime              --> R10
      E2 92AA      ST	R10,-Y
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\ds18b20.h
(0001) /*--------------------------------------------------*/
(0002) /*             AVR-ARM开发网论坛                    */
(0003) /*           http://www.avrarm.com                  */
(0004) /*            AVR生成代码测试程序                   */
(0005) /*--------------------------------------------------*/
(0006) /*     程序由AVR辅助开发工具V2.1.1自动生成          */
(0007) /*     AVR系统的处理器为:   ATMega128               */
(0008) /*     AVR系统的晶振频率:   8.0000 Mhz             */
(0009) /*--------------------------------------------------*/
(0010) 
(0011) #include "define.h"
(0012) #include "delay.h"
(0013) 
(0014) 
(0015) /**********************************************************************
(0016) functionName: unsigned char resetDS18B20(void)
(0017) description :DS18B20初始化
(0018) **********************************************************************/
(0019) unsigned char resetDS18B20(void)
(0020) {
(0021) 	unsigned char errTime=0;
      E3 24AA      CLR	R10
(0022) 	RLS_DS18B20;		//释放总线
      E4 9812      CBI	0x02,2
(0023) 	_NOP();
      E5 0000      NOP
(0024) 	HLD_DS18B20;		//Maga16控制总线
      E6 9A12      SBI	0x02,2
(0025) 	CLR_DS18B20;		//强制拉低
      E7 981A      CBI	0x03,2
(0026) 	Delay_Us(480); 	//209.42us
      E8 EE00      LDI	R16,0xE0
      E9 E011      LDI	R17,1
      EA DF94      RCALL	_Delay_Us
(0027) 	//以上延时大于480us
(0028) 	RLS_DS18B20;		//释放总线,总线自动上拉
      EB 9812      CBI	0x02,2
(0029) 	_NOP();
      EC 0000      NOP
      ED C009      RJMP	0x00F7
(0030) 	while(STU_DS18B20)
(0031) 	{
(0032) 	   Delay_Us(6);	//5.15us
      EE E006      LDI	R16,6
      EF E010      LDI	R17,0
      F0 DF8E      RCALL	_Delay_Us
(0033) 	   errTime++;
      F1 94A3      INC	R10
(0034) 	   if(errTime>20)
      F2 E184      LDI	R24,0x14
      F3 158A      CP	R24,R10
      F4 F410      BCC	0x00F7
(0035) 		  return(0x00); 	//如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
      F5 2700      CLR	R16
      F6 C010      RJMP	0x0107
      F7 990A      SBIC	0x01,2
      F8 CFF5      RJMP	0x00EE
(0036) 	}
(0037) 	errTime=0;
      F9 24AA      CLR	R10
      FA C009      RJMP	0x0104
(0038) 	while(!(STU_DS18B20))
(0039) 	{
(0040) 	   Delay_Us(6);	//5.15us
      FB E006      LDI	R16,6
      FC E010      LDI	R17,0
      FD DF81      RCALL	_Delay_Us
(0041) 	   errTime++;
      FE 94A3      INC	R10
(0042) 	   if(errTime>50)
      FF E382      LDI	R24,0x32
     100 158A      CP	R24,R10
     101 F410      BCC	0x0104
(0043) 		  return(0x00); 	//如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
     102 2700      CLR	R16
     103 C003      RJMP	0x0107
     104 9B0A      SBIS	0x01,2
     105 CFF5      RJMP	0x00FB
(0044) 	}
(0045) 	return(0xff);
     106 EF0F      LDI	R16,0xFF
     107 90A9      LD	R10,Y+
     108 9508      RET
_readByteDS18B20:
  retVal               --> R20
  i                    --> R22
     109 934A      ST	R20,-Y
     10A 936A      ST	R22,-Y
(0046) 
(0047) }
(0048) 
(0049) /**********************************************************************
(0050) functionName: unsigned char readByteDS18B20(void)
(0051) description :读DS18B20一个字节
(0052) **********************************************************************/
(0053) unsigned char readByteDS18B20(void)
(0054) {
(0055) 	unsigned char i;
(0056) 	unsigned char retVal=0;
     10B 2744      CLR	R20
(0057) 	RLS_DS18B20;		//释放总线
     10C 9812      CBI	0x02,2
(0058) 	for(i=8;i>0;i--)
     10D E068      LDI	R22,0x8
     10E C011      RJMP	0x0120
(0059) 	{
(0060) 	   retVal>>=1;
     10F 9546      LSR	R20
(0061) 	   HLD_DS18B20; 	//Maga16控制总线
     110 9A12      SBI	0x02,2
(0062) 	   CLR_DS18B20; 	//强制拉低
     111 981A      CBI	0x03,2
(0063) 	   Delay_Us(8);	//延时大于1us
     112 E008      LDI	R16,0x8
     113 E010      LDI	R17,0
     114 DF6A      RCALL	_Delay_Us
(0064) 	   SET_DS18B20; 	//释放总线,DS18B20会将总线强制拉低
     115 9A1A      SBI	0x03,2
(0065) 	   //delay_nus(8);
(0066) 	   RLS_DS18B20; 	 //释放总线
     116 9812      CBI	0x02,2
(0067) 	   if(STU_DS18B20)
     117 9B0A      SBIS	0x01,2
     118 C001      RJMP	0x011A
(0068) 		  retVal|=0x80;
     119 6840      ORI	R20,0x80
(0069) 	   Delay_Us(32);		 //31us
     11A E200      LDI	R16,0x20
     11B E010      LDI	R17,0
     11C DF62      RCALL	_Delay_Us
(0070) 	   HLD_DS18B20; 	 //释放总线
     11D 9A12      SBI	0x02,2
(0071) 	   SET_DS18B20; 	//释放总线,DS18B20会将总线强制拉低
     11E 9A1A      SBI	0x03,2
     11F 956A      DEC	R22
     120 E080      LDI	R24,0

⌨️ 快捷键说明

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