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

📄 smg_ds18b20.lst

📁 ds18b20在数码管上显示温度,在avr128已编译通过
💻 LST
📖 第 1 页 / 共 4 页
字号:
     121 1786      CP	R24,R22
     122 F360      BCS	0x010F
(0072) 	   //delay_nus(30); 	 //30.38us
(0073) 	}
(0074) 	Delay_Us(5);		 //2.71us(大于1us就行了)
     123 E005      LDI	R16,5
     124 E010      LDI	R17,0
     125 DF59      RCALL	_Delay_Us
(0075) 	return(retVal);
     126 2F04      MOV	R16,R20
     127 9169      LD	R22,Y+
     128 9149      LD	R20,Y+
     129 9508      RET
_writeByteDS18B20:
  temp                 --> R22
  i                    --> R20
  wb                   --> R10
     12A 940E 03D9 CALL	push_xgsetF00C
     12C 2EA0      MOV	R10,R16
(0076) 
(0077) }
(0078) 
(0079) /**********************************************************************
(0080) functionName: unsigned char readByteDS18B20(void)
(0081) description :写DS18B20一个字节
(0082) **********************************************************************/
(0083) void writeByteDS18B20(unsigned char wb)
(0084) {
(0085) 	unsigned char i;
(0086) 	unsigned char temp;
(0087) 	RLS_DS18B20;			 //释放总线
     12D 9812      CBI	0x02,2
(0088) 	for(i=0;i<8;i++)
     12E 2744      CLR	R20
     12F C017      RJMP	0x0147
(0089) 	{
(0090) 	   HLD_DS18B20; 	 //Maga16控制总线
     130 9A12      SBI	0x02,2
(0091) 	   CLR_DS18B20; 	 //强制拉低
     131 981A      CBI	0x03,2
(0092) 	   Delay_Us(4);	 //14.92us
     132 E004      LDI	R16,4
     133 E010      LDI	R17,0
     134 DF4A      RCALL	_Delay_Us
(0093) 	   //SET_DS18B20;		 //释放总线
(0094) 	   //delay_nus(16); 	 //14.92us
(0095) 	   temp=wb>>i;
     135 2D0A      MOV	R16,R10
     136 2F14      MOV	R17,R20
     137 940E 03F6 CALL	lsr8
     139 2F60      MOV	R22,R16
(0096) 	   temp&=0x01;
     13A 7061      ANDI	R22,1
(0097) 	   if(temp)
     13B F011      BEQ	0x013E
(0098) 		  SET_DS18B20;		 //释放总线
     13C 9A1A      SBI	0x03,2
     13D C001      RJMP	0x013F
(0099) 	   else
(0100) 		  CLR_DS18B20;		 //强制拉低
     13E 981A      CBI	0x03,2
(0101) 	   Delay_Us(50);		 //30.38us
     13F E302      LDI	R16,0x32
     140 E010      LDI	R17,0
     141 DF3D      RCALL	_Delay_Us
(0102) 	   //RLS_DS18B20;		 //释放总线
(0103) 	   SET_DS18B20; 	 //释放总线
     142 9A1A      SBI	0x03,2
(0104) 	   Delay_Us(4);	 //2.71us(大于1us就行了)
     143 E004      LDI	R16,4
     144 E010      LDI	R17,0
     145 DF39      RCALL	_Delay_Us
     146 9543      INC	R20
     147 3048      CPI	R20,0x8
     148 F338      BCS	0x0130
     149 940C 03E0 JMP	pop_xgsetF00C
_readTempDS18B20:
  x                    --> R10
  tempH                --> R12
  tempL                --> R10
     14B 940E 03CA CALL	push_xgset003C
(0105) 
(0106)    }
(0107) }
(0108) 
(0109) /**********************************************************************
(0110) functionName: unsigned int readTempDS18B20(void)
(0111) description :读DS18B20温度
(0112) **********************************************************************/
(0113) unsigned int readTempDS18B20(void)
(0114) {
(0115) 	unsigned char tempL,tempH;
(0116) 	unsigned int x;
(0117) 	//resetDS18B20();
(0118) 	//writeByteDS18B20(0xcc);	 //跳过ROM
(0119) 	//writeByteDS18B20(0x44);	 //启动温度转换
(0120) 	Delay_Ms(1);		   //等待1ms
     14D E001      LDI	R16,1
     14E E010      LDI	R17,0
     14F DF48      RCALL	_Delay_Ms
(0121) 	resetDS18B20();
     150 DF91      RCALL	_resetDS18B20
(0122) 	writeByteDS18B20(0xcc);  //跳过ROM
     151 EC0C      LDI	R16,0xCC
     152 DFD7      RCALL	_writeByteDS18B20
(0123) 	writeByteDS18B20(0xbe);  //读数据
     153 EB0E      LDI	R16,0xBE
     154 DFD5      RCALL	_writeByteDS18B20
(0124) 	tempL=readByteDS18B20();
     155 DFB3      RCALL	_readByteDS18B20
     156 2EA0      MOV	R10,R16
(0125) 	tempH=readByteDS18B20();
     157 DFB1      RCALL	_readByteDS18B20
     158 2EC0      MOV	R12,R16
(0126) 	x=(tempH<<8)|tempL;
     159 2CBC      MOV	R11,R12
(0127) 	resetDS18B20();
     15A DF87      RCALL	_resetDS18B20
(0128) 	writeByteDS18B20(0xcc);  //跳过ROM
     15B EC0C      LDI	R16,0xCC
     15C DFCD      RCALL	_writeByteDS18B20
(0129) 	writeByteDS18B20(0x44);  //启动温度转换
     15D E404      LDI	R16,0x44
     15E DFCB      RCALL	_writeByteDS18B20
(0130) 	return(x);
     15F 0185      MOVW	R16,R10
     160 940C 03BF JMP	pop_xgset003C
FILE: H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\MAIN.C
(0001) // Target : M128
(0002) // Crystal: 8.0000Mhz
(0003) 
(0004) #include <iom128v.h>
(0005) #include <macros.h> 
(0006) #include "define.h"
(0007) #include "delay.h"
(0008) #include "initrialm128.h"
(0009) #include "ds18b20.h"
(0010) 
(0011) //#include 
(0012) void Coding_led(void);//8位数码管译码程序
(0013) 
(0014) 
(0015) //TIMER0 initialize - prescale:1024
(0016) // WGM: Normal
(0017) // desired value: 3mSec
(0018) // actual value: 2.976mSec (0.2%)
(0019) void timer0_init(void)
(0020) {
(0021) 	TCCR0 = 0x00; //stop
_timer0_init:
     162 2422      CLR	R2
     163 BE23      OUT	0x33,R2
(0022) 	ASSR  = 0x00; //set async mode
     164 BE20      OUT	0x30,R2
(0023) 	TCNT0 = 0xA3; //set count
     165 EA83      LDI	R24,0xA3
     166 BF82      OUT	0x32,R24
(0024) 	OCR0  = 0x1F;
     167 E18F      LDI	R24,0x1F
     168 BF81      OUT	0x31,R24
(0025) 	TCCR0 = 0x06; //start timer
     169 E086      LDI	R24,6
     16A BF83      OUT	0x33,R24
(0026) 	TIMSK |= 0x01; //timer interrupt sources
     16B B787      IN	R24,0x37
     16C 6081      ORI	R24,1
     16D BF87      OUT	0x37,R24
     16E 9508      RET
_timer0_ovf_isr:
     16F 922A      ST	R2,-Y
     170 923A      ST	R3,-Y
     171 930A      ST	R16,-Y
     172 931A      ST	R17,-Y
     173 938A      ST	R24,-Y
     174 939A      ST	R25,-Y
     175 93EA      ST	R30,-Y
     176 93FA      ST	R31,-Y
     177 B62F      IN	R2,0x3F
     178 922A      ST	R2,-Y
(0027) }
(0028) 
(0029) #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
(0030) void timer0_ovf_isr(void)
(0031) {	
(0032) 	TCNT0 = 0xA3; //reload counter value
     179 EA83      LDI	R24,0xA3
     17A BF82      OUT	0x32,R24
(0033) 	if(sbit_led == 8)
     17B 9180 012F LDS	R24,sbit_led
     17D 3088      CPI	R24,0x8
     17E F419      BNE	0x0182
(0034) 	{
(0035) 		sbit_led = 0;
     17F 2422      CLR	R2
     180 9220 012F STS	sbit_led,R2
(0036) 	}
(0037) 	SMG_PORT = 0XFF;
     182 EF8F      LDI	R24,0xFF
     183 BB8B      OUT	0x1B,R24
(0038) 	SMG_BIT_PORT = 0xff;
     184 BB85      OUT	0x15,R24
(0039) 	SMG_BIT_PORT &=~ BIT(sbit_led);
     185 9110 012F LDS	R17,sbit_led
     187 E001      LDI	R16,1
     188 940E 03F0 CALL	lsl8
     18A 2E20      MOV	R2,R16
     18B 9420      COM	R2
     18C B235      IN	R3,0x15
     18D 2032      AND	R3,R2
     18E BA35      OUT	0x15,R3
(0040) 	SMG_PORT = led_disbuf[sbit_led];
     18F E287      LDI	R24,0x27
     190 E091      LDI	R25,1
     191 91E0 012F LDS	R30,sbit_led
     193 27FF      CLR	R31
     194 0FE8      ADD	R30,R24
     195 1FF9      ADC	R31,R25
     196 8020      LDD	R2,Z+0
     197 BA2B      OUT	0x1B,R2
(0041) 	sbit_led ++;
     198 9180 012F LDS	R24,sbit_led
     19A 5F8F      SUBI	R24,0xFF
     19B 9380 012F STS	sbit_led,R24
     19D 9029      LD	R2,Y+
     19E BE2F      OUT	0x3F,R2
     19F 91F9      LD	R31,Y+
     1A0 91E9      LD	R30,Y+
     1A1 9199      LD	R25,Y+
     1A2 9189      LD	R24,Y+
     1A3 9119      LD	R17,Y+
     1A4 9109      LD	R16,Y+
     1A5 9039      LD	R3,Y+
     1A6 9029      LD	R2,Y+
     1A7 9518      RETI
(0042) }
(0043) 
(0044) 
(0045) void main(void)
(0046) {
(0047) 	unsigned char n;
(0048) 	Init_Devices();
_main:
  n                    --> Y,+1
     1A8 DF21      RCALL	_Init_Devices
(0049) 	timer0_init();
     1A9 DFB8      RCALL	_timer0_init
(0050) 	BELL_OFF();
     1AA 9A1C      SBI	0x03,4
     1AB C13F      RJMP	0x02EB
(0051) 	
(0052) 	while(1)
(0053) 	{
(0054) 		temperture = readTempDS18B20();
     1AC DF9E      RCALL	_readTempDS18B20
     1AD 940E 0490 CALL	uint2fp
     1AF 9310 011B STS	temperture+1,R17
     1B1 9300 011A STS	temperture,R16
     1B3 9330 011D STS	temperture+3,R19
     1B5 9320 011C STS	temperture+2,R18
(0055) 		temperture = temperture * 0.0625*10;
     1B7 E904      LDI	R16,0x94
     1B8 E010      LDI	R17,0
     1B9 940E 03AB CALL	elpm32
     1BB 0118      MOVW	R2,R16
     1BC 0129      MOVW	R4,R18
     1BD E900      LDI	R16,0x90
     1BE E010      LDI	R17,0
     1BF 940E 03AB CALL	elpm32
     1C1 E18A      LDI	R24,0x1A
     1C2 E091      LDI	R25,1
     1C3 939A      ST	R25,-Y
     1C4 938A      ST	R24,-Y
     1C5 940E 0593 CALL	fpmule1x
     1C7 0181      MOVW	R16,R2
     1C8 0192      MOVW	R18,R4
     1C9 940E 0588 CALL	fpmule2
     1CB 9310 011B STS	temperture+1,R17
     1CD 9300 011A STS	temperture,R16
     1CF 9330 011D STS	temperture+3,R19
     1D1 9320 011C STS	temperture+2,R18
(0056) 		if(temperture < 1000)//ds18b20由于进中断后干扰时序,最好加上校验数据
     1D3 0118      MOVW	R2,R16
     1D4 0129      MOVW	R4,R18
     1D5 E80C      LDI	R16,0x8C
     1D6 E010      LDI	R17,0
     1D7 940E 03AB CALL	elpm32
     1D9 933A      ST	R19,-Y
     1DA 932A      ST	R18,-Y
     1DB 931A      ST	R17,-Y
     1DC 930A      ST	R16,-Y
     1DD 0181      MOVW	R16,R2
     1DE 0192      MOVW	R18,R4
     1DF 940E 05AD CALL	fpcmp2
     1E1 F00C      BLT	0x01E3
     1E2 C0D7      RJMP	0x02BA
(0057) 		{
(0058) 			led_buf[0] = (int)temperture/10000000%10;
     1E3 E840      LDI	R20,0x80
     1E4 E956      LDI	R21,0x96
     1E5 E968      LDI	R22,0x98
     1E6 E070      LDI	R23,0
     1E7 9120 011C LDS	R18,temperture+2
     1E9 9130 011D LDS	R19,temperture+3
     1EB 9100 011A LDS	R16,temperture
     1ED 9110 011B LDS	R17,temperture+1
     1EF 940E 0464 CALL	fpint
     1F1 2722      CLR	R18
     1F2 FD17      SBRC	R17,7
     1F3 9520      COM	R18
     1F4 2733      CLR	R19
     1F5 FD27      SBRC	R18,7
     1F6 9530      COM	R19
     1F7 937A      ST	R23,-Y
     1F8 936A      ST	R22,-Y
     1F9 935A      ST	R21,-Y
     1FA 934A      ST	R20,-Y
     1FB 940E 0347 CALL	div32s
     1FD E04A      LDI	R20,0xA
     1FE E050      LDI	R21,0
     1FF E060      LDI	R22,0
     200 E070      LDI	R23,0
     201 937A      ST	R23,-Y
     202 936A      ST	R22,-Y
     203 935A      ST	R21,-Y
     204 934A      ST	R20,-Y
     205 940E 0349 CALL	mod32s
     207 9300 011F STS	led_buf,R16
(0059) 			led_buf[1] = (int)temperture/1000000%10;
     209 E440      LDI	R20,0x40
     20A E452      LDI	R21,0x42
     20B E06F      LDI	R22,0xF
     20C E070      LDI	R23,0
     20D 9120 011C LDS	R18,temperture+2
     20F 9130 011D LDS	R19,temperture+3
     211 9100 011A LDS	R16,temperture
     213 9110 011B LDS	R17,temperture+1
     215 940E 0464 CALL	fpint
     217 2722      CLR	R18
     218 FD17      SBRC	R17,7
     219 9520      COM	R18
     21A 2733      CLR	R19
     21B FD27      SBRC	R18,7
     21C 9530      COM	R19
     21D 937A      ST	R23,-Y
     21E 936A      ST	R22,-Y
     21F 935A      ST	R21,-Y
     220 934A      ST	R20,-Y
     221 940E 0347 CALL	div32s
     223 E04A      LDI	R20,0xA
     224 E050      LDI	R21,0
     225 E060      LDI	R22,0
     226 E070      LDI	R23,0
     227 937A      ST	R23,-Y
     228 936A      ST	R22,-Y
     229 935A      ST	R21,-Y
     22A 934A      ST	R20,-Y
     22B 940E 0349 CALL	mod32s
     22D 9300 0120 STS	led_buf+1,R16
(0060) 			led_buf[2] = (int)temperture/100000%10;
     22F EA40      LDI	R20,0xA0
     230 E856      LDI	R21,0x86
     231 E061      LDI	R22,1
     232 E070      LDI	R23,0
     233 9120 011C LDS	R18,temperture+2
     235 9130 011D LDS	R19,temperture+3
     237 9100 011A LDS	R16,temperture
     239 9110 011B LDS	R17,temperture+1
     23B 940E 0464 CALL	fpint
     23D 2722      CLR	R18
     23E FD17      SBRC	R17,7
     23F 9520      COM	R18
     240 2733      CLR	R19
     241 FD27      SBRC	R18,7
     242 9530      COM	R19
     243 937A      ST	R23,-Y
     244 936A      ST	R22,-Y
     245 935A      ST	R21,-Y
     246 934A      ST	R20,-Y
     247 940E 0347 CALL	div32s
     249 E04A      LDI	R20,0xA
     24A E050      LDI	R21,0
     24B E060      LDI	R22,0
     24C E070      LDI	R23,0
     24D 937A      ST	R23,-Y
     24E 936A      ST	R22,-Y
     24F 935A      ST	R21,-Y
     250 934A      ST	R20,-Y
     251 940E 0349 CALL	mod32s
     253 9300 0121 STS	led_buf+2,R16
(0061) 			led_buf[3] = (int)temperture/10000%10;
     255 E180      LDI	R24,0x10
     256 E297      LDI	R25,0x27
     257 9120 011C LDS	R18,temperture+2
     259 9130 011D LDS	R19,temperture+3
     25B 9100 011A LDS	R16,temperture
     25D 9110 011B LDS	R17,temperture+1
     25F 940E 0464 CALL	fpint
     261 019C      MOVW	R18,R24
     262 940E 030B CALL	div16s
     264 E02A      LDI	R18,0xA
     265 E030      LDI	R19,0
     266 940E 0307 CALL	mod16s
     268 9300 0122 STS	led_buf+3,R16
(0062) 			led_buf[4] = (int)temperture/1000%10;
     26A EE88      LDI	R24,0xE8
     26B E093      LDI	R25,3
     26C 9120 011C LDS	R18,temperture+2
     26E 9130 011D LDS	R19,temperture+3
     270 9100 011A LDS	R16,temperture
     272 9110 011B LDS	R17,temperture+1
     274 940E 0464 CALL	fpint
     276 019C      MOVW	R18,R24
     277 940E 030B CALL	div16s
     279 E02A      LDI	R18,0xA
     27A E030      LDI	R19,0
     27B 940E 0307 CALL	mod16s
     27D 9300 0123 STS	0x0123,R16
(0063) 			led_buf[5] = (int)temperture/100%10;
     27F E684      LDI	R24,0x64
     280 E090      LDI	R25,0
     281 9120 011C LDS	R18,temperture+2
     283 9130 011D LDS	R19,temperture+3
     285 9100 011A LDS	R16,temperture
     287 9110 011B LDS	R17,temperture+1
     289 940E 0464 CALL	fpint
     28B 019C      MOVW	R18,R24

⌨️ 快捷键说明

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