📄 try3_162.lst
字号:
__start:
__text_start:
003E EFCF LDI R28,0xFF
003F E0D4 LDI R29,4
0040 BFCD OUT 0x3D,R28
0041 BFDE OUT 0x3E,R29
0042 51C0 SUBI R28,0x10
0043 40D0 SBCI R29,0
0044 EA0A LDI R16,0xAA
0045 8308 STD Y+0,R16
0046 2400 CLR R0
0047 E0E0 LDI R30,0
0048 E0F1 LDI R31,1
0049 E011 LDI R17,1
004A 30E0 CPI R30,0
004B 07F1 CPC R31,R17
004C F011 BEQ 0x004F
004D 9201 ST R0,Z+
004E CFFB RJMP 0x004A
004F 8300 STD Z+0,R16
0050 E7EC LDI R30,0x7C
0051 E0F0 LDI R31,0
0052 E0A0 LDI R26,0
0053 E0B1 LDI R27,1
0054 E010 LDI R17,0
0055 37EC CPI R30,0x7C
0056 07F1 CPC R31,R17
0057 F021 BEQ 0x005C
0058 95C8 LPM
0059 9631 ADIW R30,1
005A 920D ST R0,X+
005B CFF9 RJMP 0x0055
005C 940E00E6 CALL _main
_exit:
005E CFFF RJMP _exit
_delay_us:
x --> R20
z --> R16
005F 940E010F CALL push_gset1
FILE: E:\avr\try\try3_162\main.c
(0001) #include "iom162v.h"
(0002)
(0003) #define uint8 unsigned char
(0004) #define uint16 unsigned int
(0005)
(0006) #define uint8 unsigned char
(0007) #define uint16 unsigned int
(0008)
(0009) #define RS 0x01
(0010) #define RW 0x02
(0011) #define E 0x04
(0012)
(0013) void delay_us(uint16 z)
(0014) {
(0015) uint16 x;
(0016) for(;z>0;z--)
0061 C00A RJMP 0x006C
(0017) {
(0018) for(x=10;x>0;x--);
0062 E04A LDI R20,0xA
0063 E050 LDI R21,0
0064 C002 RJMP 0x0067
0065 5041 SUBI R20,1
0066 4050 SBCI R21,0
0067 3040 CPI R20,0
0068 0745 CPC R20,R21
0069 F7D9 BNE 0x0065
006A 5001 SUBI R16,1
006B 4010 SBCI R17,0
006C 3000 CPI R16,0
006D 0701 CPC R16,R17
006E F799 BNE 0x0062
006F 940E0112 CALL pop_gset1
0071 9508 RET
(0019) }
(0020)
(0021) }
(0022)
(0023)
(0024) void lcd_busy(void)
(0025) {
(0026) DDRA=0x00;
_lcd_busy:
0072 2422 CLR R2
0073 BA2A OUT 0x1A,R2
(0027) PORTA=0xff;
0074 EF8F LDI R24,0xFF
0075 BB8B OUT 0x1B,R24
0076 C007 RJMP 0x007E
(0028) while(1)
(0029) {
(0030) PORTC&=~E;
0077 98AA CBI 0x15,2
(0031) PORTC&=~RS;
0078 98A8 CBI 0x15,0
(0032) PORTC|=RW;
0079 9AA9 SBI 0x15,1
(0033) // delay_us(10);
(0034) PORTC|=E;
007A 9AAA SBI 0x15,2
(0035) if(!(PINA&0x80))break;
007B 99CF SBIC 0x19,7
007C C001 RJMP 0x007E
007D C001 RJMP 0x007F
007E CFF8 RJMP 0x0077
(0036) }
(0037) DDRA=0xff;
007F EF8F LDI R24,0xFF
0080 BB8A OUT 0x1A,R24
0081 9508 RET
_lcd_wr_cmd:
cmd --> R20
0082 940E010F CALL push_gset1
0084 2F40 MOV R20,R16
(0038) }
(0039)
(0040) void lcd_wr_cmd(uint8 cmd)
(0041) {
(0042) lcd_busy();
0085 DFEC RCALL _lcd_busy
(0043) PORTC&=~RS;
0086 98A8 CBI 0x15,0
(0044) PORTC&=~RW;
0087 98A9 CBI 0x15,1
(0045) PORTA=cmd;
0088 BB4B OUT 0x1B,R20
(0046) delay_us(50);
0089 E302 LDI R16,0x32
008A E010 LDI R17,0
008B DFD3 RCALL _delay_us
(0047) PORTC|=E;
008C 9AAA SBI 0x15,2
(0048) delay_us(50);
008D E302 LDI R16,0x32
008E E010 LDI R17,0
008F DFCF RCALL _delay_us
(0049) PORTC&=~E;
0090 98AA CBI 0x15,2
0091 940E0112 CALL pop_gset1
0093 9508 RET
_lcd_wr_date:
date --> R20
0094 940E010F CALL push_gset1
0096 2F40 MOV R20,R16
(0050) }
(0051)
(0052) void lcd_wr_date(uint8 date)
(0053) {
(0054) lcd_busy();
0097 DFDA RCALL _lcd_busy
(0055) PORTC|=RS;
0098 9AA8 SBI 0x15,0
(0056) PORTC&=~RW;
0099 98A9 CBI 0x15,1
(0057) PORTA=date;
009A BB4B OUT 0x1B,R20
(0058) delay_us(50);
009B E302 LDI R16,0x32
009C E010 LDI R17,0
009D DFC1 RCALL _delay_us
(0059) PORTC|=E;
009E 9AAA SBI 0x15,2
(0060) delay_us(50);
009F E302 LDI R16,0x32
00A0 E010 LDI R17,0
00A1 DFBD RCALL _delay_us
(0061) PORTC&=~E;
00A2 98AA CBI 0x15,2
00A3 940E0112 CALL pop_gset1
00A5 9508 RET
(0062) }
(0063)
(0064) void lcd_init(void)
(0065) {
(0066) DDRA=0xff;
_lcd_init:
00A6 EF8F LDI R24,0xFF
00A7 BB8A OUT 0x1A,R24
(0067) DDRC|=0x07;
00A8 B384 IN R24,0x14
00A9 6087 ORI R24,7
00AA BB84 OUT 0x14,R24
(0068) lcd_wr_cmd(0x38);
00AB E308 LDI R16,0x38
00AC DFD5 RCALL _lcd_wr_cmd
(0069) delay_us(300);
00AD E20C LDI R16,0x2C
00AE E011 LDI R17,1
00AF DFAF RCALL _delay_us
(0070) lcd_wr_cmd(0x38);
00B0 E308 LDI R16,0x38
00B1 DFD0 RCALL _lcd_wr_cmd
(0071) lcd_wr_cmd(0x06);
00B2 E006 LDI R16,6
00B3 DFCE RCALL _lcd_wr_cmd
(0072) lcd_wr_cmd(0x0c);
00B4 E00C LDI R16,0xC
00B5 DFCC RCALL _lcd_wr_cmd
(0073) lcd_wr_cmd(0x01);
00B6 E001 LDI R16,1
00B7 DFCA RCALL _lcd_wr_cmd
(0074) delay_us(500);
00B8 EF04 LDI R16,0xF4
00B9 E011 LDI R17,1
00BA DFA4 RCALL _delay_us
(0075) DDRA=0xff;
00BB EF8F LDI R24,0xFF
00BC BB8A OUT 0x1A,R24
(0076) DDRC|=0x07;
00BD B384 IN R24,0x14
00BE 6087 ORI R24,7
00BF BB84 OUT 0x14,R24
00C0 9508 RET
_lcd_wr_byte:
date --> R20
addr --> R22
00C1 940E010D CALL push_gset2
00C3 2F42 MOV R20,R18
00C4 2F60 MOV R22,R16
(0077) }
(0078)
(0079) void lcd_wr_byte(uint8 addr,uint8 date)
(0080) {
(0081) lcd_wr_cmd(0x80+addr);
00C5 2F06 MOV R16,R22
00C6 5800 SUBI R16,0x80
00C7 DFBA RCALL _lcd_wr_cmd
(0082) lcd_wr_date(date);
00C8 2F04 MOV R16,R20
00C9 DFCA RCALL _lcd_wr_date
(0083) delay_us(100);
00CA E604 LDI R16,0x64
00CB E010 LDI R17,0
00CC DF92 RCALL _delay_us
00CD 940E0101 CALL pop_gset2
00CF 9508 RET
_lcd_wr_str:
i --> R20
len --> R22
str --> R10
addr --> R12
00D0 940E0109 CALL push_gset4
00D2 0159 MOVW R10,R18
00D3 2EC0 MOV R12,R16
00D4 8568 LDD R22,Y+8
(0084) }
(0085)
(0086) void lcd_wr_str(uint8 addr,uint8 str[],uint8 len)
(0087) {
(0088) uint8 i=0;
00D5 2744 CLR R20
(0089) lcd_wr_cmd(0x80+addr);
00D6 2D0C MOV R16,R12
00D7 5800 SUBI R16,0x80
00D8 DFA9 RCALL _lcd_wr_cmd
(0090) for(i=0;i<len;i=i+1)
00D9 C007 RJMP 0x00E1
(0091) {
(0092) lcd_wr_date(str[i]);
00DA 2FE4 MOV R30,R20
00DB 27FF CLR R31
00DC 0DEA ADD R30,R10
00DD 1DFB ADC R31,R11
00DE 8100 LDD R16,Z+0
00DF DFB4 RCALL _lcd_wr_date
00E0 9543 INC R20
00E1 1746 CP R20,R22
00E2 F3B8 BCS 0x00DA
00E3 940E0104 CALL pop_gset4
00E5 9508 RET
_main:
ss --> Y+1
00E6 972D SBIW R28,0xD
(0093) //i=i+1;
(0094) // str=str+1;
(0095) }
(0096)
(0097) }
(0098)
(0099) void main(void)
(0100) {
(0101) uint8 ss[]="hello word!";
00E7 E780 LDI R24,0x70
00E8 E090 LDI R25,0
00E9 01FE MOVW R30,R28
00EA 9631 ADIW R30,1
00EB E00C LDI R16,0xC
00EC E010 LDI R17,0
00ED 93FA ST R31,-Y
00EE 93EA ST R30,-Y
00EF 939A ST R25,-Y
00F0 938A ST R24,-Y
00F1 940E0126 CALL asgncblk
(0102) lcd_init();
00F3 DFB2 RCALL _lcd_init
(0103) lcd_wr_str(0x01,ss,12);
00F4 E08C LDI R24,0xC
00F5 8388 STD Y+0,R24
00F6 019E MOVW R18,R28
00F7 5F2F SUBI R18,0xFF
00F8 4F3F SBCI R19,0xFF
00F9 E001 LDI R16,1
00FA DFD5 RCALL _lcd_wr_str
(0104) lcd_wr_byte(0x03,'a');
00FB E621 LDI R18,0x61
00FC E003 LDI R16,3
00FD DFC3 RCALL _lcd_wr_byte
(0105) while(1);
FILE: <library>
00FE CFFF RJMP 0x00FE
00FF 962D ADIW R28,0xD
0100 9508 RET
pop_gset2:
0101 E0E2 LDI R30,2
0102 940C0113 JMP pop
pop_gset4:
0104 E0E8 LDI R30,0x8
0105 940C0113 JMP pop
push_gset5:
0107 92FA ST R15,-Y
0108 92EA ST R14,-Y
push_gset4:
0109 92DA ST R13,-Y
010A 92CA ST R12,-Y
push_gset3:
010B 92BA ST R11,-Y
010C 92AA ST R10,-Y
push_gset2:
010D 937A ST R23,-Y
010E 936A ST R22,-Y
push_gset1:
010F 935A ST R21,-Y
0110 934A ST R20,-Y
0111 9508 RET
pop_gset1:
0112 E0E1 LDI R30,1
pop:
0113 9149 LD R20,Y+
0114 9159 LD R21,Y+
0115 FDE0 SBRC R30,0
0116 9508 RET
0117 9169 LD R22,Y+
0118 9179 LD R23,Y+
0119 FDE1 SBRC R30,1
011A 9508 RET
011B 90A9 LD R10,Y+
011C 90B9 LD R11,Y+
011D FDE2 SBRC R30,2
011E 9508 RET
011F 90C9 LD R12,Y+
0120 90D9 LD R13,Y+
0121 FDE3 SBRC R30,3
0122 9508 RET
0123 90E9 LD R14,Y+
0124 90F9 LD R15,Y+
0125 9508 RET
asgncblk:
0126 93AA ST R26,-Y
0127 93BA ST R27,-Y
0128 93EA ST R30,-Y
0129 93FA ST R31,-Y
012A 920A ST R0,-Y
012B 81AF LDD R26,Y+7
012C 85B8 LDD R27,Y+8
012D 81ED LDD R30,Y+5
012E 81FE LDD R31,Y+6
012F 3000 CPI R16,0
0130 0701 CPC R16,R17
0131 F031 BEQ 0x0138
0132 95C8 LPM
0133 920D ST R0,X+
0134 9631 ADIW R30,1
0135 5001 SUBI R16,1
0136 4010 SBCI R17,0
0137 CFF7 RJMP 0x012F
0138 9009 LD R0,Y+
0139 91F9 LD R31,Y+
013A 91E9 LD R30,Y+
013B 91B9 LD R27,Y+
013C 91A9 LD R26,Y+
013D 9624 ADIW R28,4
013E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -