📄 1.lst
字号:
__start:
__text_start:
0002 E5CF LDI R28,0x5F
0003 E0D2 LDI R29,2
0004 BFCD OUT 0x3D,R28
0005 BFDE OUT 0x3E,R29
0006 51C0 SUBI R28,0x10
0007 40D0 SBCI R29,0
0008 EA0A LDI R16,0xAA
0009 8308 STD Y+0,R16
000A 2400 CLR R0
000B E6E0 LDI R30,0x60
000C E0F0 LDI R31,0
000D E010 LDI R17,0
000E 36E0 CPI R30,0x60
000F 07F1 CPC R31,R17
0010 F011 BEQ 0x0013
0011 9201 ST R0,Z+
0012 CFFB RJMP 0x000E
0013 8300 STD Z+0,R16
0014 E0E4 LDI R30,4
0015 E0F0 LDI R31,0
0016 E6A0 LDI R26,0x60
0017 E0B0 LDI R27,0
0018 E010 LDI R17,0
0019 30E4 CPI R30,4
001A 07F1 CPC R31,R17
001B F021 BEQ 0x0020
001C 95C8 LPM
001D 9631 ADIW R30,1
001E 920D ST R0,X+
001F CFF9 RJMP 0x0019
0020 D0CC RCALL _main
_exit:
0021 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\新建文件夹\1.c
(0001) #include <iom16v.h>
(0002) #define clk 4 //pd4
(0003) #define dat 3 //pd5
(0004) #define load 5 //pd6
(0005) #define load1 6 //pd7
(0006) #define XTAL 4 //晶振频率,单位MHz
(0007) #define uchar unsigned char
(0008) /*******************************延时函数***********************************/
(0009) void delay_1us(void) //1us延时函数
(0010) {
(0011) asm("nop");
_delay_1us:
0022 0000 NOP
0023 9508 RET
_delay_nus:
i --> R20
n --> R22
0024 D11E RCALL push_gset2
0025 2F60 MOV R22,R16
0026 2F71 MOV R23,R17
(0012) }
(0013)
(0014) void delay_nus(unsigned int n) //N us延时函数
(0015) {
(0016) unsigned int i=0;
0027 2744 CLR R20
0028 2755 CLR R21
(0017) for (i=0;i<n;i++)
0029 C003 RJMP 0x002D
(0018) delay_1us();
002A DFF7 RCALL _delay_1us
002B 5F4F SUBI R20,0xFF
002C 4F5F SBCI R21,0xFF
002D 1746 CP R20,R22
002E 0757 CPC R21,R23
002F F3D0 BCS 0x002A
0030 D108 RCALL pop_gset2
0031 9508 RET
(0019) }
(0020)
(0021) void delay_1ms(void) //1ms延时函数
(0022) {
(0023) unsigned int i;
(0024) for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
i --> R16
0032 2700 CLR R16
0033 2711 CLR R17
0034 C002 RJMP 0x0037
0035 5F0F SUBI R16,0xFF
0036 4F1F SBCI R17,0xFF
0037 E38A LDI R24,0x3A
0038 E092 LDI R25,2
0039 1708 CP R16,R24
003A 0719 CPC R17,R25
003B F3C8 BCS 0x0035
003C 9508 RET
_delay_nms:
i --> R20
n --> R22
003D D105 RCALL push_gset2
003E 2F60 MOV R22,R16
003F 2F71 MOV R23,R17
(0025) }
(0026)
(0027) void delay_nms(unsigned int n) //N ms延时函数
(0028) {
(0029) unsigned int i=0;
0040 2744 CLR R20
0041 2755 CLR R21
(0030) for (i=0;i<n;i++)
0042 C003 RJMP 0x0046
(0031) {
(0032) delay_1ms();
0043 DFEE RCALL _delay_1ms
0044 5F4F SUBI R20,0xFF
0045 4F5F SBCI R21,0xFF
0046 1746 CP R20,R22
0047 0757 CPC R21,R23
0048 F3D0 BCS 0x0043
0049 D0EF RCALL pop_gset2
004A 9508 RET
_write:
i --> R10
ch --> Y+0
x --> Y+10
004B D0E8 RCALL push_arg4
004C D0F4 RCALL push_gset3
004D 9724 SBIW R28,4
(0033) }
(0034) }
(0035) /*******************************451写指令***********************************/
(0036)
(0037) void write(long int x)
(0038) {
(0039) long int ch;
(0040) int i;
(0041) ch = x;
004E 842A LDD R2,Y+10
004F 843B LDD R3,Y+11
0050 844C LDD R4,Y+12
0051 845D LDD R5,Y+13
0052 8228 STD Y+0,R2
0053 8239 STD Y+1,R3
0054 824A STD Y+2,R4
0055 825B STD Y+3,R5
(0042) PORTD&= ~(1<<clk); // CLK
0056 9894 CBI 0x12,4
(0043) PORTD&= ~(1<<load);
0057 9895 CBI 0x12,5
(0044) for(i=0; i<12; i++)
0058 24AA CLR R10
0059 24BB CLR R11
(0045) {
(0046) if(ch&0x001)
005A E041 LDI R20,1
005B E050 LDI R21,0
005C E060 LDI R22,0
005D E070 LDI R23,0
005E 8028 LDD R2,Y+0
005F 8039 LDD R3,Y+1
0060 804A LDD R4,Y+2
0061 805B LDD R5,Y+3
0062 2224 AND R2,R20
0063 2235 AND R3,R21
0064 2246 AND R4,R22
0065 2257 AND R5,R23
0066 E040 LDI R20,0
0067 E050 LDI R21,0
0068 E060 LDI R22,0
0069 E070 LDI R23,0
006A 1624 CP R2,R20
006B 0635 CPC R3,R21
006C 0646 CPC R4,R22
006D 0657 CPC R5,R23
006E F081 BEQ 0x007F
(0047) {
(0048) PORTD|= 0x08; //数据为1 00100000
006F 9A93 SBI 0x12,3
(0049) ch >>= 1;
0070 8028 LDD R2,Y+0
0071 8039 LDD R3,Y+1
0072 804A LDD R4,Y+2
0073 805B LDD R5,Y+3
0074 9455 ASR R5
0075 9447 ROR R4
0076 9437 ROR R3
0077 9427 ROR R2
0078 8228 STD Y+0,R2
0079 8239 STD Y+1,R3
007A 824A STD Y+2,R4
007B 825B STD Y+3,R5
(0050) PORTD&= ~(1<<clk);
007C 9894 CBI 0x12,4
(0051) PORTD|= (1<<clk);
007D 9A94 SBI 0x12,4
(0052)
(0053) }
007E C00F RJMP 0x008E
(0054) else
(0055) {
(0056) PORTD&= ~(0x08); //数据为0
007F 9893 CBI 0x12,3
(0057) ch >>= 1;
0080 8028 LDD R2,Y+0
0081 8039 LDD R3,Y+1
0082 804A LDD R4,Y+2
0083 805B LDD R5,Y+3
0084 9455 ASR R5
0085 9447 ROR R4
0086 9437 ROR R3
0087 9427 ROR R2
0088 8228 STD Y+0,R2
0089 8239 STD Y+1,R3
008A 824A STD Y+2,R4
008B 825B STD Y+3,R5
(0058) PORTD&= ~(1<<clk);
008C 9894 CBI 0x12,4
(0059) PORTD|= (1<<clk);
008D 9A94 SBI 0x12,4
008E 2D8A MOV R24,R10
008F 2D9B MOV R25,R11
0090 9601 ADIW R24,1
0091 2EA8 MOV R10,R24
0092 2EB9 MOV R11,R25
0093 308C CPI R24,0xC
0094 E0E0 LDI R30,0
0095 079E CPC R25,R30
0096 F21C BLT 0x005A
(0060)
(0061) }
(0062)
(0063) }
(0064) PORTD|= 1<<load;
0097 9A95 SBI 0x12,5
0098 9624 ADIW R28,4
0099 D0A1 RCALL pop_gset3
009A 9624 ADIW R28,4
009B 9508 RET
_write1:
i --> R10
ch --> Y+0
x --> Y+10
009C D097 RCALL push_arg4
009D D0A3 RCALL push_gset3
009E 9724 SBIW R28,4
(0065)
(0066) }
(0067)
(0068) void write1(long int x)
(0069) {
(0070) long int ch;
(0071) int i;
(0072) ch = x;
009F 842A LDD R2,Y+10
00A0 843B LDD R3,Y+11
00A1 844C LDD R4,Y+12
00A2 845D LDD R5,Y+13
00A3 8228 STD Y+0,R2
00A4 8239 STD Y+1,R3
00A5 824A STD Y+2,R4
00A6 825B STD Y+3,R5
(0073) PORTD&= ~(1<<clk); // CLK
00A7 9894 CBI 0x12,4
(0074) PORTD&= ~(1<<load1);
00A8 9896 CBI 0x12,6
(0075) for(i=0; i<12; i++)
00A9 24AA CLR R10
00AA 24BB CLR R11
(0076) {
(0077) if(ch&0x001)
00AB E041 LDI R20,1
00AC E050 LDI R21,0
00AD E060 LDI R22,0
00AE E070 LDI R23,0
00AF 8028 LDD R2,Y+0
00B0 8039 LDD R3,Y+1
00B1 804A LDD R4,Y+2
00B2 805B LDD R5,Y+3
00B3 2224 AND R2,R20
00B4 2235 AND R3,R21
00B5 2246 AND R4,R22
00B6 2257 AND R5,R23
00B7 E040 LDI R20,0
00B8 E050 LDI R21,0
00B9 E060 LDI R22,0
00BA E070 LDI R23,0
00BB 1624 CP R2,R20
00BC 0635 CPC R3,R21
00BD 0646 CPC R4,R22
00BE 0657 CPC R5,R23
00BF F081 BEQ 0x00D0
(0078) {
(0079) PORTD|= 0x08; //数据为1 00100000
00C0 9A93 SBI 0x12,3
(0080) ch >>= 1;
00C1 8028 LDD R2,Y+0
00C2 8039 LDD R3,Y+1
00C3 804A LDD R4,Y+2
00C4 805B LDD R5,Y+3
00C5 9455 ASR R5
00C6 9447 ROR R4
00C7 9437 ROR R3
00C8 9427 ROR R2
00C9 8228 STD Y+0,R2
00CA 8239 STD Y+1,R3
00CB 824A STD Y+2,R4
00CC 825B STD Y+3,R5
(0081) PORTD&= ~(1<<clk);
00CD 9894 CBI 0x12,4
(0082) PORTD|= (1<<clk);
00CE 9A94 SBI 0x12,4
(0083)
(0084) }
00CF C00F RJMP 0x00DF
(0085) else
(0086) {
(0087) PORTD&= ~(0x08); //数据为0
00D0 9893 CBI 0x12,3
(0088) ch >>= 1;
00D1 8028 LDD R2,Y+0
00D2 8039 LDD R3,Y+1
00D3 804A LDD R4,Y+2
00D4 805B LDD R5,Y+3
00D5 9455 ASR R5
00D6 9447 ROR R4
00D7 9437 ROR R3
00D8 9427 ROR R2
00D9 8228 STD Y+0,R2
00DA 8239 STD Y+1,R3
00DB 824A STD Y+2,R4
00DC 825B STD Y+3,R5
(0089) PORTD&= ~(1<<clk);
00DD 9894 CBI 0x12,4
(0090) PORTD|= (1<<clk);
00DE 9A94 SBI 0x12,4
00DF 2D8A MOV R24,R10
00E0 2D9B MOV R25,R11
00E1 9601 ADIW R24,1
00E2 2EA8 MOV R10,R24
00E3 2EB9 MOV R11,R25
00E4 308C CPI R24,0xC
00E5 E0E0 LDI R30,0
00E6 079E CPC R25,R30
00E7 F21C BLT 0x00AB
(0091)
(0092) }
(0093)
(0094) }
(0095) PORTD|= 1<<load1;
00E8 9A96 SBI 0x12,6
00E9 9624 ADIW R28,4
00EA D050 RCALL pop_gset3
00EB 9624 ADIW R28,4
00EC 9508 RET
(0096)
(0097) }
(0098)
(0099) /*******************************主函数***********************************/
(0100) int main( void )
(0101) {
(0102) int i=0,n=0,m=0;
_main:
m --> R10
n --> R10
i --> R10
00ED 24AA CLR R10
00EE 24BB CLR R11
(0103) DDRD=0xff; //设置为输出
00EF EF8F LDI R24,0xFF
00F0 BB81 OUT 0x11,R24
(0104) PORTD |=1<<dat;
00F1 9A93 SBI 0x12,3
(0105) PORTD &=~(1<<dat);
00F2 9893 CBI 0x12,3
(0106) delay_nms(20);
00F3 E104 LDI R16,0x14
00F4 E010 LDI R17,0
00F5 DF47 RCALL _delay_nms
(0107) PORTD |=1<<dat;
00F6 9A93 SBI 0x12,3
(0108) write(0x201);
00F7 E001 LDI R16,1
00F8 E012 LDI R17,2
00F9 E020 LDI R18,0
00FA E030 LDI R19,0
00FB DF4F RCALL _write
(0109) write(0x401);
00FC E001 LDI R16,1
00FD E014 LDI R17,4
00FE E020 LDI R18,0
00FF E030 LDI R19,0
0100 DF4A RCALL _write
(0110) write(0x500);
0101 E000 LDI R16,0
0102 E015 LDI R17,5
0103 E020 LDI R18,0
0104 E030 LDI R19,0
0105 DF45 RCALL _write
(0111) write1(0x201);
0106 E001 LDI R16,1
0107 E012 LDI R17,2
0108 E020 LDI R18,0
0109 E030 LDI R19,0
010A DF91 RCALL _write1
(0112) write1(0x401);
010B E001 LDI R16,1
010C E014 LDI R17,4
010D E020 LDI R18,0
010E E030 LDI R19,0
010F DF8C RCALL _write1
(0113) write1(0x500);
0110 E000 LDI R16,0
0111 E015 LDI R17,5
0112 E020 LDI R18,0
0113 E030 LDI R19,0
0114 DF87 RCALL _write1
0115 C01C RJMP 0x0132
(0114) while(1)
(0115) {
(0116) write(0x8ff);
0116 EF0F LDI R16,0xFF
0117 E018 LDI R17,0x8
0118 E020 LDI R18,0
0119 E030 LDI R19,0
011A DF30 RCALL _write
(0117) write1(0x8ff);
011B EF0F LDI R16,0xFF
011C E018 LDI R17,0x8
011D E020 LDI R18,0
011E E030 LDI R19,0
011F DF7C RCALL _write1
(0118) write1(0x9ff);
0120 EF0F LDI R16,0xFF
0121 E019 LDI R17,0x9
0122 E020 LDI R18,0
0123 E030 LDI R19,0
0124 DF77 RCALL _write1
(0119) write1(0xaff);
0125 EF0F LDI R16,0xFF
0126 E01A LDI R17,0xA
0127 E020 LDI R18,0
0128 E030 LDI R19,0
0129 DF72 RCALL _write1
(0120) write1(0xbff);
012A EF0F LDI R16,0xFF
012B E01B LDI R17,0xB
012C E020 LDI R18,0
012D E030 LDI R19,0
012E DF6D RCALL _write1
(0121) delay_nms(1000);
FILE: <library>
012F EE08 LDI R16,0xE8
0130 E013 LDI R17,3
0131 DF0B RCALL _delay_nms
0132 CFE3 RJMP 0x0116
0133 9508 RET
push_arg4:
0134 933A ST R19,-Y
0135 932A ST R18,-Y
push_arg2:
0136 931A ST R17,-Y
0137 930A ST R16,-Y
0138 9508 RET
pop_gset2:
0139 E0E2 LDI R30,2
013A C00E RJMP pop
pop_gset3:
013B E0E4 LDI R30,4
013C C00C RJMP pop
push_gset5:
013D 92FA ST R15,-Y
013E 92EA ST R14,-Y
push_gset4:
013F 92DA ST R13,-Y
0140 92CA ST R12,-Y
push_gset3:
0141 92BA ST R11,-Y
0142 92AA ST R10,-Y
push_gset2:
0143 937A ST R23,-Y
0144 936A ST R22,-Y
push_gset1:
0145 935A ST R21,-Y
0146 934A ST R20,-Y
0147 9508 RET
pop_gset1:
0148 E0E1 LDI R30,1
pop:
0149 9149 LD R20,Y+
014A 9159 LD R21,Y+
014B FDE0 SBRC R30,0
014C 9508 RET
014D 9169 LD R22,Y+
014E 9179 LD R23,Y+
014F FDE1 SBRC R30,1
0150 9508 RET
0151 90A9 LD R10,Y+
0152 90B9 LD R11,Y+
0153 FDE2 SBRC R30,2
0154 9508 RET
0155 90C9 LD R12,Y+
0156 90D9 LD R13,Y+
0157 FDE3 SBRC R30,3
0158 9508 RET
0159 90E9 LD R14,Y+
015A 90F9 LD R15,Y+
015B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -