📄 m16.lst
字号:
0115 9508 RET
_DisText:
p --> R20
addr --> R22
0116 940E01D4 CALL push_gset2
0118 01A9 MOVW R20,R18
0119 2F60 MOV R22,R16
(0078) }
(0079)
(0080) void DisText(uchar addr,uchar *p)
(0081) {
(0082) WrOp(addr) ;
011A 2F06 MOV R16,R22
011B D03B RCALL _WrOp
011C C004 RJMP 0x0121
(0083) while(*p !='\0')WrDat(*(p++)) ;
011D 01FA MOVW R30,R20
011E 9101 LD R16,Z+
011F 01AF MOVW R20,R30
0120 D048 RCALL _WrDat
0121 01FA MOVW R30,R20
0122 8020 LDD R2,Z+0
0123 2022 TST R2
0124 F7C1 BNE 0x011D
0125 940E01C5 CALL pop_gset2
0127 9508 RET
_DisTextConst:
p --> R20
addr --> R22
0128 940E01D4 CALL push_gset2
012A 01A9 MOVW R20,R18
012B 2F60 MOV R22,R16
(0084) }
(0085)
(0086) void DisTextConst(uchar addr,uchar const *p)
(0087) {
(0088) WrOp(addr) ;
012C 2F06 MOV R16,R22
012D D029 RCALL _WrOp
012E C006 RJMP 0x0135
(0089) while(*p !='\0')WrDat(*(p++)) ;
012F 011A MOVW R2,R20
0130 5F4F SUBI R20,0xFF
0131 4F5F SBCI R21,0xFF
0132 01F1 MOVW R30,R2
0133 9104 LPM R16,0(Z)
0134 D034 RCALL _WrDat
0135 01FA MOVW R30,R20
0136 91E4 LPM R30,0(Z)
0137 23EE TST R30
0138 F7B1 BNE 0x012F
0139 940E01C5 CALL pop_gset2
013B 9508 RET
_LcdIni:
i --> R20
013C 940E01D6 CALL push_gset1
(0090) }
(0091)
(0092) void LcdIni()
(0093) {
(0094) uint i ;
(0095) DDRD=0XFF ; //设置PA输出
013E EF8F LDI R24,0xFF
013F BB81 OUT 0x11,R24
(0096) PORTD=0XFF ; //全部加上上拉电阻
0140 BB82 OUT 0x12,R24
(0097) DDRC=0XFF ; //设置PC为输出
0141 BB84 OUT 0x14,R24
(0098) PORTC=0XFF ; //全部加上上拉电阻
0142 BB85 OUT 0x15,R24
(0099) WrOp(0x38) ;
0143 E308 LDI R16,0x38
0144 D012 RCALL _WrOp
(0100) WrOp(0x06) ; //光标加1
0145 E006 LDI R16,6
0146 D010 RCALL _WrOp
(0101) WrOp(0x0c) ; //开显示
0147 E00C LDI R16,0xC
0148 D00E RCALL _WrOp
(0102) WrOp(0x01) ;
0149 E001 LDI R16,1
014A D00C RCALL _WrOp
(0103) for(i=0 ;i<5000 ;i++) ;
014B 2744 CLR R20
014C 2755 CLR R21
014D C002 RJMP 0x0150
014E 5F4F SUBI R20,0xFF
014F 4F5F SBCI R21,0xFF
0150 3848 CPI R20,0x88
0151 E1E3 LDI R30,0x13
0152 075E CPC R21,R30
0153 F3D0 BCS 0x014E
0154 940E01D9 CALL pop_gset1
0156 9508 RET
_WrOp:
i --> R20
dat --> R20
0157 940E01D6 CALL push_gset1
0159 2F40 MOV R20,R16
(0104) }
(0105)
(0106) void WrOp(uchar dat)
(0107) {
(0108) uchar i ;
(0109) ChkBusy() ;
015A D020 RCALL _ChkBusy
(0110) PORTD &=~BIT(rs) ; //RS=0
015B 9892 CBI 0x12,2
(0111) PORTD &=~BIT(rw) ; //RW=0
015C 9893 CBI 0x12,3
(0112) PORTD &=~BIT(en) ; //EN=0
015D 9894 CBI 0x12,4
(0113) PORTC =dat ; //送数据
015E BB45 OUT 0x15,R20
(0114) PORTD |=BIT(en) ; //EN=1
015F 9A94 SBI 0x12,4
(0115) for(i=1 ;i ;i++) ; //延时
0160 E041 LDI R20,1
0161 C001 RJMP 0x0163
0162 9543 INC R20
0163 2344 TST R20
0164 F7E9 BNE 0x0162
(0116) PORTD &=~BIT(en) ; //EN=0
0165 9894 CBI 0x12,4
0166 940E01D9 CALL pop_gset1
0168 9508 RET
_WrDat:
i --> R20
dat --> R20
0169 940E01D6 CALL push_gset1
016B 2F40 MOV R20,R16
(0117) }
(0118)
(0119) void WrDat(uchar dat)
(0120) {
(0121) uchar i ;
(0122) ChkBusy() ;
016C D00E RCALL _ChkBusy
(0123) PORTD |=BIT(rs) ; //rs=1
016D 9A92 SBI 0x12,2
(0124) PORTD &=~BIT(rw) ; //rw=0
016E 9893 CBI 0x12,3
(0125) PORTD &=~BIT(en) ; //en=0
016F 9894 CBI 0x12,4
(0126) PORTC=dat ; //送数据
0170 BB45 OUT 0x15,R20
(0127) PORTD |=BIT(en) ; //en=1
0171 9A94 SBI 0x12,4
(0128) for(i=1 ;i ;i++) ; //延时
0172 E041 LDI R20,1
0173 C001 RJMP 0x0175
0174 9543 INC R20
0175 2344 TST R20
0176 F7E9 BNE 0x0174
(0129) PORTD &=~BIT(en) ; //en=0
0177 9894 CBI 0x12,4
0178 940E01D9 CALL pop_gset1
017A 9508 RET
(0130) }
(0131)
(0132) void ChkBusy()
(0133) {
(0134) DDRC=0X00 ; //设置为输入
_ChkBusy:
017B 2422 CLR R2
017C BA24 OUT 0x14,R2
(0135) PORTC=0X00 ; //不设置上拉电阻
017D BA25 OUT 0x15,R2
(0136) PORTD &=~BIT(rs) ; //RS=0
017E 9892 CBI 0x12,2
(0137) PORTD |=BIT(rw) ; //RW=1
017F 9A93 SBI 0x12,3
(0138) PORTD |=BIT(en) ; //EN=1
0180 9A94 SBI 0x12,4
(0139) while(PINC & 0x80) ; //送数据
0181 999F SBIC 0x13,7
0182 CFFE RJMP 0x0181
(0140) PORTD &=~BIT(en) ; //en=0
0183 9894 CBI 0x12,4
(0141) DDRC=0xff ; //设置为输出
0184 EF8F LDI R24,0xFF
0185 BB84 OUT 0x14,R24
0186 9508 RET
_delayms:
i --> R20
j --> R22
n --> R16
0187 940E01D4 CALL push_gset2
(0142) }
(0143)
(0144) void delayms(uint n)
(0145) {
(0146) uchar j ;
(0147) uint i ;
(0148) for(i=0 ;i<n ;i++)
0189 2744 CLR R20
018A 2755 CLR R21
018B C007 RJMP 0x0193
(0149) for(j=0 ;j<250 ;j++) ;
FILE: <library>
018C 2766 CLR R22
018D C001 RJMP 0x018F
018E 9563 INC R22
018F 3F6A CPI R22,0xFA
0190 F3E8 BCS 0x018E
0191 5F4F SUBI R20,0xFF
0192 4F5F SBCI R21,0xFF
0193 1740 CP R20,R16
0194 0751 CPC R21,R17
0195 F3B0 BCS 0x018C
0196 940E01C5 CALL pop_gset2
0198 9508 RET
mod16u:
0199 9468 BSET 6
019A C001 RJMP xdiv16u
div16u:
019B 94E8 BCLR 6
xdiv16u:
019C 92EA ST R14,-Y
019D 92FA ST R15,-Y
019E 938A ST R24,-Y
019F 24EE CLR R14
01A0 24FF CLR R15
01A1 E180 LDI R24,0x10
01A2 0F00 LSL R16
01A3 1F11 ROL R17
01A4 1CEE ROL R14
01A5 1CFF ROL R15
01A6 16E2 CP R14,R18
01A7 06F3 CPC R15,R19
01A8 F018 BCS 0x01AC
01A9 1AE2 SUB R14,R18
01AA 0AF3 SBC R15,R19
01AB 9503 INC R16
01AC 958A DEC R24
01AD F7A1 BNE 0x01A2
01AE F416 BRTC 0x01B1
01AF 2D0E MOV R16,R14
01B0 2D1F MOV R17,R15
01B1 9189 LD R24,Y+
01B2 90F9 LD R15,Y+
01B3 90E9 LD R14,Y+
01B4 9508 RET
empy16s:
01B5 920A ST R0,-Y
01B6 921A ST R1,-Y
01B7 938A ST R24,-Y
01B8 939A ST R25,-Y
01B9 9F02 MUL R16,R18
01BA 01C0 MOVW R24,R0
01BB 9F12 MUL R17,R18
01BC 0D90 ADD R25,R0
01BD 9F03 MUL R16,R19
01BE 0D90 ADD R25,R0
01BF 018C MOVW R16,R24
01C0 9199 LD R25,Y+
01C1 9189 LD R24,Y+
01C2 9019 LD R1,Y+
01C3 9009 LD R0,Y+
01C4 9508 RET
pop_gset2:
01C5 E0E2 LDI R30,2
01C6 940C01DA JMP pop
pop_gset3:
01C8 E0E4 LDI R30,4
01C9 940C01DA JMP pop
pop_gset4:
01CB E0E8 LDI R30,0x8
01CC 940C01DA JMP pop
push_gset5:
01CE 92FA ST R15,-Y
01CF 92EA ST R14,-Y
push_gset4:
01D0 92DA ST R13,-Y
01D1 92CA ST R12,-Y
push_gset3:
01D2 92BA ST R11,-Y
01D3 92AA ST R10,-Y
push_gset2:
01D4 937A ST R23,-Y
01D5 936A ST R22,-Y
push_gset1:
01D6 935A ST R21,-Y
01D7 934A ST R20,-Y
01D8 9508 RET
pop_gset1:
01D9 E0E1 LDI R30,1
pop:
01DA 9149 LD R20,Y+
01DB 9159 LD R21,Y+
01DC FDE0 SBRC R30,0
01DD 9508 RET
01DE 9169 LD R22,Y+
01DF 9179 LD R23,Y+
01E0 FDE1 SBRC R30,1
01E1 9508 RET
01E2 90A9 LD R10,Y+
01E3 90B9 LD R11,Y+
01E4 FDE2 SBRC R30,2
01E5 9508 RET
01E6 90C9 LD R12,Y+
01E7 90D9 LD R13,Y+
01E8 FDE3 SBRC R30,3
01E9 9508 RET
01EA 90E9 LD R14,Y+
01EB 90F9 LD R15,Y+
01EC 9508 RET
lsl8:
01ED 2311 TST R17
01EE F019 BEQ 0x01F2
01EF 0F00 LSL R16
01F0 951A DEC R17
01F1 CFFB RJMP lsl8
01F2 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -