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

📄 18b20_1602.lst

📁 非常经典的基于AVR m16的DS18B20 C 程序 !1
💻 LST
📖 第 1 页 / 共 3 页
字号:
    01B2 940E0053  CALL	_delay_ms
    01B4 9508      RET
_locate:
  x                    --> R20
  b                    --> R22
  a                    --> R10
    01B5 940E02A5  CALL	push_gset3
    01B7 2F62      MOV	R22,R18
    01B8 2EA0      MOV	R10,R16
(0138)    }
(0139) 
(0140) //定位指令函数
(0141) void locate(uchar a,uchar b)
(0142)    {
(0143)    uchar x;
(0144)    if(a==1)
    01B9 2D8A      MOV	R24,R10
    01BA 3081      CPI	R24,1
    01BB F419      BNE	0x01BF
(0145) 	 x=0x80+b-1;
    01BC 2F46      MOV	R20,R22
    01BD 5840      SUBI	R20,0x80
    01BE 5041      SUBI	R20,1
(0146)    if(a==2)
    01BF 2D8A      MOV	R24,R10
    01C0 3082      CPI	R24,2
    01C1 F419      BNE	0x01C5
(0147)      x=0xC0+b-1;
    01C2 2F46      MOV	R20,R22
    01C3 5440      SUBI	R20,0x40
    01C4 5041      SUBI	R20,1
(0148)    lcd_comm(x);
    01C5 2F04      MOV	R16,R20
    01C6 DF80      RCALL	_lcd_comm
(0149)    delay_us(80);
    01C7 E500      LDI	R16,0x50
    01C8 E010      LDI	R17,0
    01C9 940E004B  CALL	_delay_us
    01CB 940E029E  CALL	pop_gset3
    01CD 9508      RET
_lcd:
  i                    --> R20
    01CE 940E02A9  CALL	push_gset1
    01D0 2F40      MOV	R20,R16
(0150)    }
(0151) //显示函数
(0152) void lcd(uchar i)
(0153)    {
(0154)    lcd_da(i);
    01D1 2F04      MOV	R16,R20
    01D2 DF47      RCALL	_lcd_da
    01D3 940E02AC  CALL	pop_gset1
    01D5 9508      RET
_xs_zh:
  i                    --> R20
  da                   --> R20
    01D6 940E02A9  CALL	push_gset1
    01D8 01A8      MOVW	R20,R16
FILE: E:\DS18B20\main.c
(0001) /****************************************
(0002) ** 文 件 名: main.c				       **
(0003) ** 日    期: 2007年04月08日			   **
(0004) ** 描    述: 主函数			   		   **
(0005) ** 作    者:tonghe					   **
(0006) ** 版	 本: V1.0					   **
(0007) ** 主控芯片:M16 					   **
(0008) ** 晶振频率:7.3728MHZ, 波特率9600	   **
(0009) ****************************************/
(0010) #include <iom16v.h>
(0011) #include <macros.h>
(0012) #include <E:\DS18B20\define.h>
(0013) #include <E:\DS18B20\function.h>
(0014) #include <E:\DS18B20\ds18b20.h>
(0015) #include <E:\DS18B20\lcd1602_4h.h>
(0016) 
(0017) uint i;
(0018) uchar xs[5];
(0019) 
(0020) void xs_zh(uint da)
(0021)     {
(0022) 	uint i=da*10/16;
    01D9 E00A      LDI	R16,0xA
    01DA E010      LDI	R17,0
    01DB 019A      MOVW	R18,R20
    01DC 940E028B  CALL	empy16s
    01DE 01A8      MOVW	R20,R16
    01DF 9556      LSR	R21
    01E0 9547      ROR	R20
    01E1 9556      LSR	R21
    01E2 9547      ROR	R20
    01E3 9556      LSR	R21
    01E4 9547      ROR	R20
    01E5 9556      LSR	R21
    01E6 9547      ROR	R20
(0023) 	lcd_da('+');
    01E7 E20B      LDI	R16,0x2B
    01E8 DF31      RCALL	_lcd_da
(0024) 	xs[0]=(i/10000+0x30);
    01E9 E120      LDI	R18,0x10
    01EA E237      LDI	R19,0x27
    01EB 018A      MOVW	R16,R20
    01EC 940E0271  CALL	div16u
    01EE 01C8      MOVW	R24,R16
    01EF 96C0      ADIW	R24,0x30
    01F0 93800060  STS	xs,R24
(0025) 	if(xs[0]!=0x30)
    01F2 3380      CPI	R24,0x30
    01F3 F011      BEQ	0x01F6
(0026) 	   lcd_da(xs[0]);
    01F4 2F08      MOV	R16,R24
    01F5 DF24      RCALL	_lcd_da
(0027) 	i=i%10000;
    01F6 E120      LDI	R18,0x10
    01F7 E237      LDI	R19,0x27
    01F8 018A      MOVW	R16,R20
    01F9 940E026F  CALL	mod16u
    01FB 01A8      MOVW	R20,R16
(0028) 	xs[1]=(i/1000+0x30);
    01FC EE28      LDI	R18,0xE8
    01FD E033      LDI	R19,3
    01FE 940E0271  CALL	div16u
    0200 01C8      MOVW	R24,R16
    0201 96C0      ADIW	R24,0x30
    0202 93800061  STS	xs+1,R24
(0029) 	if(xs[1]!=0x30)
    0204 3380      CPI	R24,0x30
    0205 F011      BEQ	0x0208
(0030) 	   lcd_da(xs[1]);
    0206 2F08      MOV	R16,R24
    0207 DF12      RCALL	_lcd_da
(0031) 	i=i%1000;
    0208 EE28      LDI	R18,0xE8
    0209 E033      LDI	R19,3
    020A 018A      MOVW	R16,R20
    020B 940E026F  CALL	mod16u
    020D 01A8      MOVW	R20,R16
(0032) 	xs[2]=(i/100+0x30);
    020E E624      LDI	R18,0x64
    020F E030      LDI	R19,0
    0210 940E0271  CALL	div16u
    0212 01C8      MOVW	R24,R16
    0213 96C0      ADIW	R24,0x30
    0214 93800062  STS	xs+2,R24
(0033) 	if(xs[2]!=0x30)
    0216 3380      CPI	R24,0x30
    0217 F011      BEQ	0x021A
(0034) 	  lcd_da(xs[2]);
    0218 2F08      MOV	R16,R24
    0219 DF00      RCALL	_lcd_da
(0035) 	i=i%100;
    021A E624      LDI	R18,0x64
    021B E030      LDI	R19,0
    021C 018A      MOVW	R16,R20
    021D 940E026F  CALL	mod16u
    021F 01A8      MOVW	R20,R16
(0036) 	xs[3]=(i/10+0x30);
    0220 E02A      LDI	R18,0xA
    0221 E030      LDI	R19,0
    0222 940E0271  CALL	div16u
    0224 01C8      MOVW	R24,R16
    0225 96C0      ADIW	R24,0x30
    0226 93800063  STS	xs+3,R24
(0037) 	lcd_da(xs[3]);
    0228 2F08      MOV	R16,R24
    0229 DEF0      RCALL	_lcd_da
(0038) 	lcd_da('.');
    022A E20E      LDI	R16,0x2E
    022B DEEE      RCALL	_lcd_da
(0039) 	i=i%10;
    022C E02A      LDI	R18,0xA
    022D E030      LDI	R19,0
    022E 018A      MOVW	R16,R20
    022F 940E026F  CALL	mod16u
    0231 01A8      MOVW	R20,R16
(0040) 	xs[4]=(i+0x30);
    0232 01CA      MOVW	R24,R20
    0233 96C0      ADIW	R24,0x30
    0234 93800064  STS	0x64,R24
(0041) 	lcd_da(xs[4]);
    0236 2F08      MOV	R16,R24
    0237 DEE2      RCALL	_lcd_da
(0042) 	lcd_da('C');
    0238 E403      LDI	R16,0x43
    0239 DEE0      RCALL	_lcd_da
    023A 940E02AC  CALL	pop_gset1
    023C 9508      RET
(0043) 	}
(0044) 
(0045) void main()
(0046) 	{
(0047) 	port_init();
_main:
    023D 940E0066  CALL	_port_init
(0048) 	PORTB|=1<<3;
    023F 9AC3      SBI	0x18,3
(0049) 	delay_ms(500);
    0240 EF04      LDI	R16,0xF4
    0241 E011      LDI	R17,1
    0242 940E0053  CALL	_delay_ms
(0050) 	lcd_init();
    0244 DF4A      RCALL	_lcd_init
(0051) 	delay_ms(100);
    0245 E604      LDI	R16,0x64
    0246 E010      LDI	R17,0
    0247 940E0053  CALL	_delay_ms
(0052) 	lcd_comm(0x84);			 	 //写指令:第1行地址
    0249 E804      LDI	R16,0x84
    024A DEFC      RCALL	_lcd_comm
(0053) 	delay_ms(10);
    024B E00A      LDI	R16,0xA
    024C E010      LDI	R17,0
    024D 940E0053  CALL	_delay_ms
(0054) //	lcd_da(20);	
(0055) //	lcd_da(20);
(0056) //	lcd_da(20);	
(0057) //	lcd_da(20);
(0058) 	lcd_da('T'); 				 //温度的前导字
    024F E504      LDI	R16,0x54
    0250 DEC9      RCALL	_lcd_da
(0059) 	lcd_da('e');
    0251 E605      LDI	R16,0x65
    0252 DEC7      RCALL	_lcd_da
(0060) 	lcd_da('m');
    0253 E60D      LDI	R16,0x6D
    0254 DEC5      RCALL	_lcd_da
(0061) 	lcd_da('p');
    0255 E700      LDI	R16,0x70
    0256 DEC3      RCALL	_lcd_da
(0062) 	lcd_da(':');
    0257 E30A      LDI	R16,0x3A
    0258 DEC1      RCALL	_lcd_da
    0259 C013      RJMP	0x026D
(0063) 	while(1)
(0064) 	    {
(0065) 		lcd_comm(0xC4);			 	 //写指令:第2行地址
    025A EC04      LDI	R16,0xC4
    025B DEEB      RCALL	_lcd_comm
(0066) 		i=rst_DS18B20();
    025C DE18      RCALL	_rst_DS18B20
    025D 2E20      MOV	R2,R16
    025E 2433      CLR	R3
    025F 92300066  STS	i+1,R3
    0261 92200065  STS	i,R2
(0067) 		i=read_Temp();
    0263 DE9C      RCALL	_read_Temp
    0264 93100066  STS	i+1,R17
    0266 93000065  STS	i,R16
(0068) 		xs_zh(i);
    0268 DF6D      RCALL	_xs_zh
(0069) 		delay_ms(200);
FILE: <library>
    0269 EC08      LDI	R16,0xC8
    026A E010      LDI	R17,0
    026B 940E0053  CALL	_delay_ms
    026D CFEC      RJMP	0x025A
    026E 9508      RET
mod16u:
    026F 9468      BSET	6
    0270 C001      RJMP	xdiv16u
div16u:
    0271 94E8      BCLR	6
xdiv16u:
    0272 92EA      ST	R14,-Y
    0273 92FA      ST	R15,-Y
    0274 938A      ST	R24,-Y
    0275 24EE      CLR	R14
    0276 24FF      CLR	R15
    0277 E180      LDI	R24,0x10
    0278 0F00      LSL	R16
    0279 1F11      ROL	R17
    027A 1CEE      ROL	R14
    027B 1CFF      ROL	R15
    027C 16E2      CP	R14,R18
    027D 06F3      CPC	R15,R19
    027E F018      BCS	0x0282
    027F 1AE2      SUB	R14,R18
    0280 0AF3      SBC	R15,R19
    0281 9503      INC	R16
    0282 958A      DEC	R24
    0283 F7A1      BNE	0x0278
    0284 F416      BRTC	0x0287
    0285 2D0E      MOV	R16,R14
    0286 2D1F      MOV	R17,R15
    0287 9189      LD	R24,Y+
    0288 90F9      LD	R15,Y+
    0289 90E9      LD	R14,Y+
    028A 9508      RET
empy16s:
    028B 920A      ST	R0,-Y
    028C 921A      ST	R1,-Y
    028D 938A      ST	R24,-Y
    028E 939A      ST	R25,-Y
    028F 9F02      MUL	R16,R18
    0290 01C0      MOVW	R24,R0
    0291 9F12      MUL	R17,R18
    0292 0D90      ADD	R25,R0
    0293 9F03      MUL	R16,R19
    0294 0D90      ADD	R25,R0
    0295 018C      MOVW	R16,R24
    0296 9199      LD	R25,Y+
    0297 9189      LD	R24,Y+
    0298 9019      LD	R1,Y+
    0299 9009      LD	R0,Y+
    029A 9508      RET
pop_gset2:
    029B E0E2      LDI	R30,2
    029C 940C02AD  JMP	pop
pop_gset3:
    029E E0E4      LDI	R30,4
    029F 940C02AD  JMP	pop
push_gset5:
    02A1 92FA      ST	R15,-Y
    02A2 92EA      ST	R14,-Y
push_gset4:
    02A3 92DA      ST	R13,-Y
    02A4 92CA      ST	R12,-Y
push_gset3:
    02A5 92BA      ST	R11,-Y
    02A6 92AA      ST	R10,-Y
push_gset2:
    02A7 937A      ST	R23,-Y
    02A8 936A      ST	R22,-Y
push_gset1:
    02A9 935A      ST	R21,-Y
    02AA 934A      ST	R20,-Y
    02AB 9508      RET
pop_gset1:
    02AC E0E1      LDI	R30,1
pop:
    02AD 9149      LD	R20,Y+
    02AE 9159      LD	R21,Y+
    02AF FDE0      SBRC	R30,0
    02B0 9508      RET
    02B1 9169      LD	R22,Y+
    02B2 9179      LD	R23,Y+
    02B3 FDE1      SBRC	R30,1
    02B4 9508      RET
    02B5 90A9      LD	R10,Y+
    02B6 90B9      LD	R11,Y+
    02B7 FDE2      SBRC	R30,2
    02B8 9508      RET
    02B9 90C9      LD	R12,Y+
    02BA 90D9      LD	R13,Y+
    02BB FDE3      SBRC	R30,3
    02BC 9508      RET
    02BD 90E9      LD	R14,Y+
    02BE 90F9      LD	R15,Y+
    02BF 9508      RET
lsr8:
    02C0 2311      TST	R17
    02C1 F019      BEQ	0x02C5
    02C2 9506      LSR	R16
    02C3 951A      DEC	R17
    02C4 CFFB      RJMP	lsr8
    02C5 9508      RET

⌨️ 快捷键说明

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