📄 ad.lst
字号:
__start:
__text_start:
0040 E5CF LDI R28,0x5F
0041 E0D4 LDI R29,4
0042 BFCD OUT P3D,R28
0043 BFDE OUT P3E,R29
0044 51C0 SUBI R28,0x10
0045 40D0 SBCI R29,0
0046 EA0A LDI R16,0xAA
0047 8308 STD R16,0+Y
0048 2400 CLR R0
0049 E6E0 LDI R30,0x60
004A E0F0 LDI R31,0
004B E010 LDI R17,0
004C 36E0 CPI R30,0x60
004D 07F1 CPC R31,R17
004E F011 BEQ 0x0051
004F 9201 ST R0,Z+
0050 CFFB RJMP 0x004C
0051 8300 STD R16,0+Z
0052 E8E0 LDI R30,0x80
0053 E0F0 LDI R31,0
0054 E6A0 LDI R26,0x60
0055 E0B0 LDI R27,0
0056 E010 LDI R17,0
0057 38E0 CPI R30,0x80
0058 07F1 CPC R31,R17
0059 F021 BEQ 0x005E
005A 95C8 LPM
005B 9631 ADIW R30,1
005C 920D ST R0,X+
005D CFF9 RJMP 0x0057
005E 940E00AB CALL _main
_exit:
0060 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0061 D0C0 RCALL push_gset2
FILE: I:\AVR视频教程\视频教程\lesson8\ad\xianshi.c
(0001)
(0002) #pragma data:code
(0003) const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0004) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0005) void delay(uint ms)
(0006) {
(0007) uint i,j;
(0008) for(i=0;i<ms;i++)
0062 2744 CLR R20
0063 2755 CLR R21
0064 C00B RJMP 0x0070
(0009) {
(0010) for(j=0;j<1141;j++);
0065 2766 CLR R22
0066 2777 CLR R23
0067 C002 RJMP 0x006A
0068 5F6F SUBI R22,0xFF
0069 4F7F SBCI R23,0xFF
006A 3765 CPI R22,0x75
006B E0E4 LDI R30,4
006C 077E CPC R23,R30
006D F3D0 BCS 0x0068
006E 5F4F SUBI R20,0xFF
006F 4F5F SBCI R21,0xFF
0070 1740 CP R20,R16
0071 0751 CPC R21,R17
0072 F390 BCS 0x0065
(0011) }
(0012) }
0073 D0B2 RCALL pop_gset2
0074 9508 RET
_show:
k --> R20
j --> R22
0075 D0AC RCALL push_gset2
0076 2F42 MOV R20,R18
0077 2F60 MOV R22,R16
(0013) void show(uchar j,uchar k)
(0014) {
(0015) DDRA|=BIT(3);
0078 9AD3 SBI P1A,3
(0016) DDRA|=BIT(4);
0079 9AD4 SBI P1A,4
(0017) DDRB=0XFF;
007A EF8F LDI R24,0xFF
007B BB87 OUT P17,R24
(0018) PORTA|=BIT(3);
007C 9ADB SBI P1B,3
(0019) PORTB=table[j];
007D E680 LDI R24,0x60
007E E090 LDI R25,0
007F 2F06 MOV R16,R22
0080 2711 CLR R17
0081 0F00 LSL R16
0082 1F11 ROL R17
0083 0F08 ADD R16,R24
0084 1F19 ADC R17,R25
0085 D0A3 RCALL lpm16
0086 BB08 OUT P18,R16
(0020) PORTA&=~BIT(3);
0087 98DB CBI P1B,3
(0021)
(0022) PORTB=0XFF;
0088 EF8F LDI R24,0xFF
0089 BB88 OUT P18,R24
(0023) PORTB&=~BIT(k);
008A E001 LDI R16,1
008B 2F14 MOV R17,R20
008C D0AA RCALL lsl8
008D 2E20 MOV R2,R16
008E 9420 COM R2
008F B238 IN R3,P18
0090 2032 AND R3,R2
0091 BA38 OUT P18,R3
(0024) PORTA|=BIT(4);
0092 9ADC SBI P1B,4
(0025) PORTA&=~BIT(4);
0093 98DC CBI P1B,4
(0026) delay(1);
0094 E001 LDI R16,1
0095 E010 LDI R17,0
0096 DFCA RCALL _delay
(0027) }
0097 D08E RCALL pop_gset2
0098 9508 RET
FILE: I:\AVR视频教程\视频教程\lesson8\ad\ad.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #include "xianshi.c"
(0006) uint mega16_ad()
(0007) {
(0008) uint addata;
(0009) DDRA&=~BIT(PA0);
_mega16_ad:
addata --> R16
0099 98D0 CBI P1A,0
(0010) PORTA&=~BIT(PA0);
009A 98D8 CBI P1B,0
(0011) ADMUX=0;
009B 2422 CLR R2
009C B827 OUT P07,R2
(0012) ADCSR=0X80;
009D E880 LDI R24,0x80
009E B986 OUT P06,R24
(0013) ADCSR|=BIT(ADSC);
009F 9A36 SBI P06,6
(0014) while(!(ADCSR&(BIT(ADIF))));
00A0 9B34 SBIS P06,4
00A1 CFFE RJMP 0x00A0
(0015) addata=ADCL;
00A2 B104 IN R16,P04
00A3 2711 CLR R17
(0016) addata=addata+ADCH*256;
00A4 B025 IN R2,P05
00A5 2433 CLR R3
00A6 2C32 MOV R3,R2
00A7 2422 CLR R2
00A8 0D02 ADD R16,R2
00A9 1D13 ADC R17,R3
(0017) return addata;
00AA 9508 RET
_main:
ad --> Y+0
ada --> R20
i --> R22
00AB 9728 SBIW R28,0x8
(0018) }
(0019)
(0020) void main()
(0021) {
00AC C03F RJMP 0x00EC
(0022) uint ada,i,ad[4];
(0023) while(1)
(0024) {
(0025) ada=mega16_ad();//999 0999
00AD DFEB RCALL _mega16_ad
00AE 2F40 MOV R20,R16
00AF 2F51 MOV R21,R17
(0026) for(i=0;i<4;i++)
00B0 2766 CLR R22
00B1 2777 CLR R23
00B2 C01A RJMP 0x00CD
(0027) {
(0028) ad[3-i]=ada%10;
00B3 E0E3 LDI R30,3
00B4 E0F0 LDI R31,0
00B5 1BE6 SUB R30,R22
00B6 0BF7 SBC R31,R23
00B7 0FEE LSL R30
00B8 1FFF ROL R31
00B9 2F8C MOV R24,R28
00BA 2F9D MOV R25,R29
00BB 0FE8 ADD R30,R24
00BC 1FF9 ADC R31,R25
00BD E02A LDI R18,0xA
00BE E030 LDI R19,0
00BF 2F04 MOV R16,R20
00C0 2F15 MOV R17,R21
00C1 D02D RCALL mod16u
00C2 8300 STD R16,0+Z
00C3 8311 STD R17,1+Z
(0029) ada=ada/10;
00C4 E02A LDI R18,0xA
00C5 E030 LDI R19,0
00C6 2F04 MOV R16,R20
00C7 2F15 MOV R17,R21
00C8 D028 RCALL div16u
00C9 2F40 MOV R20,R16
00CA 2F51 MOV R21,R17
00CB 5F6F SUBI R22,0xFF
00CC 4F7F SBCI R23,0xFF
00CD 3064 CPI R22,4
00CE E0E0 LDI R30,0
00CF 077E CPC R23,R30
00D0 F310 BCS 0x00B3
(0030) }
(0031)
(0032) for(i=0;i<4;i++)
00D1 2766 CLR R22
00D2 2777 CLR R23
00D3 C014 RJMP 0x00E8
(0033) {
(0034) show(ad[i],i);
00D4 2F26 MOV R18,R22
00D5 2F8C MOV R24,R28
00D6 2F9D MOV R25,R29
00D7 2FE6 MOV R30,R22
00D8 2FF7 MOV R31,R23
00D9 0FEE LSL R30
00DA 1FFF ROL R31
00DB 0FE8 ADD R30,R24
00DC 1FF9 ADC R31,R25
00DD 8100 LDD R16,0+Z
00DE DF96 RCALL _show
(0035) delay(2); DDRA|=BIT(3);
00DF E002 LDI R16,2
00E0 E010 LDI R17,0
00E1 DF7F RCALL _delay
00E2 9AD3 SBI P1A,3
(0036) DDRA|=BIT(4);
00E3 9AD4 SBI P1A,4
(0037) DDRB=0XFF;
00E4 EF8F LDI R24,0xFF
00E5 BB87 OUT P17,R24
00E6 5F6F SUBI R22,0xFF
00E7 4F7F SBCI R23,0xFF
00E8 3064 CPI R22,4
00E9 E0E0 LDI R30,0
00EA 077E CPC R23,R30
00EB F340 BCS 0x00D4
00EC CFC0 RJMP 0x00AD
(0038) }
(0039) }
(0040) }FILE: <library>
00ED 9628 ADIW R28,0x8
00EE 9508 RET
mod16u:
00EF 9468 BSET 6
00F0 C001 RJMP xdiv16u
div16u:
00F1 94E8 BCLR 6
xdiv16u:
00F2 92EA ST R14,-Y
00F3 92FA ST R15,-Y
00F4 938A ST R24,-Y
00F5 24EE CLR R14
00F6 24FF CLR R15
00F7 E180 LDI R24,0x10
00F8 0F00 LSL R16
00F9 1F11 ROL R17
00FA 1CEE ROL R14
00FB 1CFF ROL R15
00FC 16E2 CP R14,R18
00FD 06F3 CPC R15,R19
00FE F018 BCS 0x0102
00FF 1AE2 SUB R14,R18
0100 0AF3 SBC R15,R19
0101 9503 INC R16
0102 958A DEC R24
0103 F7A1 BNE 0x00F8
0104 F416 BRTC 0x0107
0105 2D0E MOV R16,R14
0106 2D1F MOV R17,R15
0107 9189 LD R24,Y+
0108 90F9 LD R15,Y+
0109 90E9 LD R14,Y+
010A 9508 RET
push_gset1:
010B 935A ST R21,-Y
010C 934A ST R20,-Y
010D 9508 RET
pop_gset1:
010E E0E1 LDI R30,1
pop:
010F 9149 LD R20,Y+
0110 9159 LD R21,Y+
0111 FDE0 SBRC R30,0
0112 9508 RET
0113 9169 LD R22,Y+
0114 9179 LD R23,Y+
0115 FDE1 SBRC R30,1
0116 9508 RET
0117 90A9 LD R10,Y+
0118 90B9 LD R11,Y+
0119 FDE2 SBRC R30,2
011A 9508 RET
011B 90C9 LD R12,Y+
011C 90D9 LD R13,Y+
011D FDE3 SBRC R30,3
011E 9508 RET
011F 90E9 LD R14,Y+
0120 90F9 LD R15,Y+
0121 9508 RET
push_gset2:
0122 937A ST R23,-Y
0123 936A ST R22,-Y
0124 940C010B JMP push_gset1
pop_gset2:
0126 E0E2 LDI R30,2
0127 940C010F JMP pop
lpm16:
0129 93EA ST R30,-Y
012A 93FA ST R31,-Y
012B 920A ST R0,-Y
012C 2FE0 MOV R30,R16
012D 2FF1 MOV R31,R17
012E 95C8 LPM
012F 2D00 MOV R16,R0
0130 9631 ADIW R30,1
0131 95C8 LPM
0132 2D10 MOV R17,R0
0133 9009 LD R0,Y+
0134 91F9 LD R31,Y+
0135 91E9 LD R30,Y+
0136 9508 RET
lsl8:
0137 2311 TST R17
0138 F019 BEQ 0x013C
0139 0F00 LSL R16
013A 951A DEC R17
013B CFFB RJMP lsl8
013C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -