📄 18b20_1602.lst
字号:
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 + -