📄 m16_t1_compare.lst
字号:
__start:
__text_start:
0031 E5CF LDI R28,0x5F
0032 E0D4 LDI R29,4
0033 BFCD OUT 0x3D,R28
0034 BFDE OUT 0x3E,R29
0035 51C0 SUBI R28,0x10
0036 40D0 SBCI R29,0
0037 EA0A LDI R16,0xAA
0038 8308 STD Y+0,R16
0039 2400 CLR R0
003A E6EE LDI R30,0x6E
003B E0F0 LDI R31,0
003C E010 LDI R17,0
003D 37E1 CPI R30,0x71
003E 07F1 CPC R31,R17
003F F011 BEQ 0x0042
0040 9201 ST R0,Z+
0041 CFFB RJMP 0x003D
0042 8300 STD Z+0,R16
0043 E5E4 LDI R30,0x54
0044 E0F0 LDI R31,0
0045 E6A0 LDI R26,0x60
0046 E0B0 LDI R27,0
0047 E010 LDI R17,0
0048 36E2 CPI R30,0x62
0049 07F1 CPC R31,R17
004A F021 BEQ 0x004F
004B 95C8 LPM
004C 9631 ADIW R30,1
004D 920D ST R0,X+
004E CFF9 RJMP 0x0048
004F 940E0120 CALL _main
_exit:
0051 CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
0052 940E0167 CALL push_gset1
FILE: F:\myavr\temp\M16_T1_Compare\M16_T1_Compare.c
(0001) #include<iom16v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004)
(0005) uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0006) uchar Data[4]={0,0,0,1};
(0007) uchar Key1,Key2,Key3;
(0008)
(0009) void DelayMs(uchar i)
(0010) {
(0011) uchar j;
(0012) for(;i!=0;i++)
0054 C006 RJMP 0x005B
(0013) {
(0014) for(j=10;j!=0;j--);
0055 E04A LDI R20,0xA
0056 C001 RJMP 0x0058
0057 954A DEC R20
0058 2344 TST R20
0059 F7E9 BNE 0x0057
005A 9503 INC R16
005B 2300 TST R16
005C F7C1 BNE 0x0055
(0015) }
(0016) }
005D 940E016A CALL pop_gset1
005F 9508 RET
_Display:
sel --> R20
i --> R22
p --> R10
0060 940E0182 CALL push_gset3
0062 0158 MOVW R10,R16
(0017)
(0018) void Display(uchar *p)
(0019) {
(0020) uchar i,sel=0x01;
0063 E041 LDI R20,1
(0021) for(i=0;i<4;i++)
0064 2766 CLR R22
0065 C016 RJMP 0x007C
(0022) {
(0023) PORTC=sel;
0066 BB45 OUT 0x15,R20
(0024) PORTA=0xff-Table[p[i]];
0067 2FE6 MOV R30,R22
0068 27FF CLR R31
0069 0DEA ADD R30,R10
006A 1DFB ADC R31,R11
006B 81E0 LDD R30,Z+0
006C 27FF CLR R31
006D E680 LDI R24,0x60
006E E090 LDI R25,0
006F 0FE8 ADD R30,R24
0070 1FF9 ADC R31,R25
0071 8020 LDD R2,Z+0
0072 2433 CLR R3
0073 EF8F LDI R24,0xFF
0074 E090 LDI R25,0
0075 1982 SUB R24,R2
0076 0993 SBC R25,R3
0077 BB8B OUT 0x1B,R24
(0025) DelayMs(2);
0078 E002 LDI R16,2
0079 DFD8 RCALL _DelayMs
(0026) sel=sel<<1;
007A 0F44 LSL R20
007B 9563 INC R22
007C 3064 CPI R22,4
007D F340 BCS 0x0066
(0027) }
(0028) }
007E 940E0164 CALL pop_gset3
0080 9508 RET
_Key_Process:
p --> R20
0081 940E0167 CALL push_gset1
0083 01A8 MOVW R20,R16
(0029)
(0030) void Key_Process(uchar *p)
(0031) {
0084 C006 RJMP 0x008B
(0032) while((PINB&0x01)==0){Display(Data);Key1=1;}
0085 E60A LDI R16,0x6A
0086 E010 LDI R17,0
0087 DFD8 RCALL _Display
0088 E081 LDI R24,1
0089 93800070 STS _Key1,R24
008B 9BB0 SBIS 0x16,0
008C CFF8 RJMP 0x0085
008D C006 RJMP 0x0094
(0033) while((PINB&0x02)==0){Display(Data);Key2=1;}
008E E60A LDI R16,0x6A
008F E010 LDI R17,0
0090 DFCF RCALL _Display
0091 E081 LDI R24,1
0092 9380006F STS _Key2,R24
0094 9BB1 SBIS 0x16,1
0095 CFF8 RJMP 0x008E
0096 C006 RJMP 0x009D
(0034) while((PINB&0x04)==0){Display(Data);Key3=1;}
0097 E60A LDI R16,0x6A
0098 E010 LDI R17,0
0099 DFC6 RCALL _Display
009A E081 LDI R24,1
009B 9380006E STS _Key3,R24
009D 9BB2 SBIS 0x16,2
009E CFF8 RJMP 0x0097
(0035) if(Key1==1)
009F 91800070 LDS R24,_Key1
00A1 3081 CPI R24,1
00A2 F481 BNE 0x00B3
(0036) {
(0037) p[3]++;
00A3 01CA MOVW R24,R20
00A4 9603 ADIW R24,3
00A5 01FC MOVW R30,R24
00A6 8180 LDD R24,Z+0
00A7 5F8F SUBI R24,0xFF
00A8 8380 STD Z+0,R24
(0038) if(p[3]==10) p[3]=0;
00A9 01FA MOVW R30,R20
00AA 8183 LDD R24,Z+3
00AB 308A CPI R24,0xA
00AC F419 BNE 0x00B0
00AD 2422 CLR R2
00AE 01FA MOVW R30,R20
00AF 8223 STD Z+3,R2
(0039) Key1=0;
00B0 2422 CLR R2
00B1 92200070 STS _Key1,R2
(0040) }
(0041) if(Key2==1)
00B3 9180006F LDS R24,_Key2
00B5 3081 CPI R24,1
00B6 F481 BNE 0x00C7
(0042) {
(0043) p[2]++;
00B7 01CA MOVW R24,R20
00B8 9602 ADIW R24,2
00B9 01FC MOVW R30,R24
00BA 8180 LDD R24,Z+0
00BB 5F8F SUBI R24,0xFF
00BC 8380 STD Z+0,R24
(0044) if(p[2]==10) p[2]=0;
00BD 01FA MOVW R30,R20
00BE 8182 LDD R24,Z+2
00BF 308A CPI R24,0xA
00C0 F419 BNE 0x00C4
00C1 2422 CLR R2
00C2 01FA MOVW R30,R20
00C3 8222 STD Z+2,R2
(0045) Key2=0;
00C4 2422 CLR R2
00C5 9220006F STS _Key2,R2
(0046) }
(0047) if(Key3==1)
00C7 9180006E LDS R24,_Key3
00C9 3081 CPI R24,1
00CA F481 BNE 0x00DB
(0048) {
(0049) p[1]++;
00CB 01CA MOVW R24,R20
00CC 9601 ADIW R24,1
00CD 01FC MOVW R30,R24
00CE 8180 LDD R24,Z+0
00CF 5F8F SUBI R24,0xFF
00D0 8380 STD Z+0,R24
(0050) if(p[1]==10) p[1]=0;
00D1 01FA MOVW R30,R20
00D2 8181 LDD R24,Z+1
00D3 308A CPI R24,0xA
00D4 F419 BNE 0x00D8
00D5 2422 CLR R2
00D6 01FA MOVW R30,R20
00D7 8221 STD Z+1,R2
(0051) Key3=0;
00D8 2422 CLR R2
00D9 9220006E STS _Key3,R2
(0052) }
(0053) }
00DB 940E016A CALL pop_gset1
00DD 9508 RET
_Set_Process:
i --> R20
j --> R20
00DE 940E0167 CALL push_gset1
(0054)
(0055) void Set_Process(void)
(0056) {
(0057) uint i,j;
(0058) i=Data[0]*1000+Data[1]*100+Data[2]*10+Data[3];
(0059) j=500/i;
(0060) OCR1AH=j>>8;
00E0 9020006B LDS R2,0x6B
00E2 E684 LDI R24,0x64
00E3 9D82 MUL R24,R2
00E4 0110 MOVW R2,R0
00E5 9120006A LDS R18,0x6A
00E7 2733 CLR R19
00E8 EE08 LDI R16,0xE8
00E9 E013 LDI R17,3
00EA 940E0154 CALL empy16s
00EC 01A8 MOVW R20,R16
00ED 0D42 ADD R20,R2
00EE 1D53 ADC R21,R3
00EF 9020006C LDS R2,0x6C
00F1 E08A LDI R24,0xA
00F2 9D82 MUL R24,R2
00F3 0D40 ADD R20,R0
00F4 1D51 ADC R21,R1
00F5 9020006D LDS R2,0x6D
00F7 2433 CLR R3
00F8 0D42 ADD R20,R2
00F9 1D53 ADC R21,R3
00FA EF04 LDI R16,0xF4
00FB E011 LDI R17,1
00FC 019A MOVW R18,R20
00FD 940E013A CALL div16u
00FF 01A8 MOVW R20,R16
0100 011A MOVW R2,R20
0101 2C23 MOV R2,R3
0102 2433 CLR R3
0103 BC2B OUT 0x2B,R2
(0061) OCR1AL=j&0x00ff;
0104 01CA MOVW R24,R20
0105 7090 ANDI R25,0
0106 BD8A OUT 0x2A,R24
(0062) }
0107 940E016A CALL pop_gset1
0109 9508 RET
(0063)
(0064) void Init_IO(void)
(0065) {
(0066) DDRA=0xff;
_Init_IO:
010A EF8F LDI R24,0xFF
010B BB8A OUT 0x1A,R24
(0067) PORTA=0xff;
010C BB8B OUT 0x1B,R24
(0068) DDRC=0xff;
010D BB84 OUT 0x14,R24
(0069) PORTC=0xff;
010E BB85 OUT 0x15,R24
(0070) DDRB=0x00;
010F 2422 CLR R2
0110 BA27 OUT 0x17,R2
(0071) PORTB=0x00;
0111 BA28 OUT 0x18,R2
(0072) DDRD=0xff;
0112 BB81 OUT 0x11,R24
(0073) PORTD=0xff;
0113 BB82 OUT 0x12,R24
(0074) }
0114 9508 RET
(0075)
(0076) void Init_Timer1(void)
(0077) {
(0078) TIMSK=TIMSK|0x10;
_Init_Timer1:
0115 B789 IN R24,0x39
0116 6180 ORI R24,0x10
0117 BF89 OUT 0x39,R24
(0079) TCCR1B=0x0a;
0118 E08A LDI R24,0xA
0119 BD8E OUT 0x2E,R24
(0080) TCNT1H=0x00;
011A 2422 CLR R2
011B BC2D OUT 0x2D,R2
(0081) TCNT1L=0x00;
011C BC2C OUT 0x2C,R2
(0082) Set_Process();
011D DFC0 RCALL _Set_Process
(0083) SREG=SREG|0x80;
011E 9478 BSET 7
(0084) }
011F 9508 RET
(0085)
(0086) void main(void)
(0087) {
(0088) Init_IO();
_main:
0120 DFE9 RCALL _Init_IO
(0089) Init_Timer1();
0121 DFF3 RCALL _Init_Timer1
(0090) DelayMs(50);
0122 E302 LDI R16,0x32
0123 DF2E RCALL _DelayMs
0124 C007 RJMP 0x012C
(0091) while(1)
(0092) {
(0093) Key_Process(Data);
0125 E60A LDI R16,0x6A
0126 E010 LDI R17,0
0127 DF59 RCALL _Key_Process
(0094) Set_Process();
0128 DFB5 RCALL _Set_Process
(0095) Display(Data);
0129 E60A LDI R16,0x6A
012A E010 LDI R17,0
012B DF34 RCALL _Display
012C CFF8 RJMP 0x0125
(0096) }
(0097) }
012D 9508 RET
_Compare:
012E 922A ST R2,-Y
012F B62F IN R2,0x3F
0130 922A ST R2,-Y
(0098)
(0099) #pragma interrupt_handler Compare:7
(0100) void Compare(void)
(0101) {PORTD=~PORTD;}
FILE: <library>
0131 B222 IN R2,0x12
0132 9420 COM R2
0133 BA22 OUT 0x12,R2
0134 9029 LD R2,Y+
0135 BE2F OUT 0x3F,R2
0136 9029 LD R2,Y+
0137 9518 RETI
mod16u:
0138 9468 BSET 6
0139 C001 RJMP xdiv16u
div16u:
013A 94E8 BCLR 6
xdiv16u:
013B 92EA ST R14,-Y
013C 92FA ST R15,-Y
013D 938A ST R24,-Y
013E 24EE CLR R14
013F 24FF CLR R15
0140 E180 LDI R24,0x10
0141 0F00 LSL R16
0142 1F11 ROL R17
0143 1CEE ROL R14
0144 1CFF ROL R15
0145 16E2 CP R14,R18
0146 06F3 CPC R15,R19
0147 F018 BCS 0x014B
0148 1AE2 SUB R14,R18
0149 0AF3 SBC R15,R19
014A 9503 INC R16
014B 958A DEC R24
014C F7A1 BNE 0x0141
014D F416 BRTC 0x0150
014E 2D0E MOV R16,R14
014F 2D1F MOV R17,R15
0150 9189 LD R24,Y+
0151 90F9 LD R15,Y+
0152 90E9 LD R14,Y+
0153 9508 RET
empy16s:
0154 920A ST R0,-Y
0155 921A ST R1,-Y
0156 938A ST R24,-Y
0157 939A ST R25,-Y
0158 9F02 MUL R16,R18
0159 01C0 MOVW R24,R0
015A 9F12 MUL R17,R18
015B 0D90 ADD R25,R0
015C 9F03 MUL R16,R19
015D 0D90 ADD R25,R0
015E 018C MOVW R16,R24
015F 9199 LD R25,Y+
0160 9189 LD R24,Y+
0161 9019 LD R1,Y+
0162 9009 LD R0,Y+
0163 9508 RET
pop_gset3:
0164 E0E4 LDI R30,4
0165 940C016B JMP pop
push_gset1:
0167 935A ST R21,-Y
0168 934A ST R20,-Y
0169 9508 RET
pop_gset1:
016A E0E1 LDI R30,1
pop:
016B 9149 LD R20,Y+
016C 9159 LD R21,Y+
016D FDE0 SBRC R30,0
016E 9508 RET
016F 9169 LD R22,Y+
0170 9179 LD R23,Y+
0171 FDE1 SBRC R30,1
0172 9508 RET
0173 90A9 LD R10,Y+
0174 90B9 LD R11,Y+
0175 FDE2 SBRC R30,2
0176 9508 RET
0177 90C9 LD R12,Y+
0178 90D9 LD R13,Y+
0179 FDE3 SBRC R30,3
017A 9508 RET
017B 90E9 LD R14,Y+
017C 90F9 LD R15,Y+
017D 9508 RET
push_gset2:
017E 937A ST R23,-Y
017F 936A ST R22,-Y
0180 940C0167 JMP push_gset1
push_gset3:
0182 92BA ST R11,-Y
0183 92AA ST R10,-Y
0184 940C017E JMP push_gset2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -