📄 8888.lst
字号:
__start:
__text_start:
0018 E5CF LDI R28,0x5F
0019 E0D2 LDI R29,2
001A BFCD OUT 0x3D,R28
001B BFDE OUT 0x3E,R29
001C 51C0 SUBI R28,0x10
001D 40D0 SBCI R29,0
001E EA0A LDI R16,0xAA
001F 8308 STD Y+0,R16
0020 2400 CLR R0
0021 E6EE LDI R30,0x6E
0022 E0F0 LDI R31,0
0023 E010 LDI R17,0
0024 36EE CPI R30,0x6E
0025 07F1 CPC R31,R17
0026 F011 BEQ 0x0029
0027 9201 ST R0,Z+
0028 CFFB RJMP 0x0024
0029 8300 STD Z+0,R16
002A E2E2 LDI R30,0x22
002B E0F0 LDI R31,0
002C E6A0 LDI R26,0x60
002D E0B0 LDI R27,0
002E E010 LDI R17,0
002F 33E0 CPI R30,0x30
0030 07F1 CPC R31,R17
0031 F021 BEQ 0x0036
0032 95C8 LPM
0033 9631 ADIW R30,1
0034 920D ST R0,X+
0035 CFF9 RJMP 0x002F
0036 D070 RCALL _main
_exit:
0037 CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
0038 D0AB RCALL push_gset1
FILE: J:\AVRpractice\BOOK\ADC\ADC.c
(0001) #include<io8535v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004)
(0005)
(0006) uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0007) uchar Data[4]={0,0,0,0};
(0008)
(0009) void DelayMs(uint i) //0.25ms
(0010) {uchar j;
(0011) for(;i!=0;i--)
0039 C007 RJMP 0x0041
(0012) {for(j=250;j!=0;j--) {;}}
003A EF4A LDI R20,0xFA
003B C001 RJMP 0x003D
003C 954A DEC R20
003D 2344 TST R20
003E F7E9 BNE 0x003C
003F 5001 SUBI R16,1
0040 4010 SBCI R17,0
0041 3000 CPI R16,0
0042 0701 CPC R16,R17
0043 F7B1 BNE 0x003A
(0013) }
0044 D0A2 RCALL pop_gset1
0045 9508 RET
_Display:
sel --> R20
i --> R22
p --> R10
0046 D0B7 RCALL push_gset3
0047 2EA0 MOV R10,R16
0048 2EB1 MOV R11,R17
(0014)
(0015) void Display(uchar *p) //间隔5ms显示
(0016) {uchar i,sel=0x01;
0049 E041 LDI R20,1
(0017) for(i=0;i<4;i++)
004A 2766 CLR R22
004B C017 RJMP 0x0063
(0018) {PORTD=sel;
004C BB42 OUT 0x12,R20
(0019) PORTB=0xff-Table[p[i]];
004D 2FE6 MOV R30,R22
004E 27FF CLR R31
004F 0DEA ADD R30,R10
0050 1DFB ADC R31,R11
0051 81E0 LDD R30,Z+0
0052 27FF CLR R31
0053 E680 LDI R24,0x60
0054 E090 LDI R25,0
0055 0FE8 ADD R30,R24
0056 1FF9 ADC R31,R25
0057 8020 LDD R2,Z+0
0058 2433 CLR R3
0059 EF8F LDI R24,0xFF
005A E090 LDI R25,0
005B 1982 SUB R24,R2
005C 0993 SBC R25,R3
005D BB88 OUT 0x18,R24
(0020) DelayMs(20);
005E E104 LDI R16,0x14
005F E010 LDI R17,0
0060 DFD7 RCALL _DelayMs
(0021) sel=sel<<1;
0061 0F44 LSL R20
0062 9563 INC R22
0063 3064 CPI R22,4
0064 F338 BCS 0x004C
(0022) }
(0023) }
0065 D07C RCALL pop_gset3
0066 9508 RET
(0024)
(0025) uint ADC_Convert(void)
(0026) {uint temp1,temp2;
(0027) temp1=(uint)ADCL;
_ADC_Convert:
temp1 --> R18
temp2 --> R16
0067 B124 IN R18,0x04
0068 2733 CLR R19
(0028) temp2=(uint)ADCH;
0069 B105 IN R16,0x05
006A 2711 CLR R17
(0029) temp2=(temp2<<8)+temp1;
006B 2E20 MOV R2,R16
006C 2E31 MOV R3,R17
006D 2C32 MOV R3,R2
006E 2422 CLR R2
006F 0E22 ADD R2,R18
0070 1E33 ADC R3,R19
0071 2D02 MOV R16,R2
0072 2D13 MOV R17,R3
(0030) return(temp2);
0073 9508 RET
_Process:
p --> R20
i --> R22
0074 D086 RCALL push_gset2
0075 2F42 MOV R20,R18
0076 2F53 MOV R21,R19
0077 2F60 MOV R22,R16
0078 2F71 MOV R23,R17
(0031) }
(0032)
(0033) void Process(uint i,uchar *p)
(0034) {p[0]=i/1000;
0079 EE28 LDI R18,0xE8
007A E033 LDI R19,3
007B 2F06 MOV R16,R22
007C 2F17 MOV R17,R23
007D D048 RCALL div16u
007E 2FE4 MOV R30,R20
007F 2FF5 MOV R31,R21
0080 8300 STD Z+0,R16
(0035) i=i%1000;
0081 EE28 LDI R18,0xE8
0082 E033 LDI R19,3
0083 2F06 MOV R16,R22
0084 2F17 MOV R17,R23
0085 D03E RCALL mod16u
0086 2F60 MOV R22,R16
0087 2F71 MOV R23,R17
(0036) p[1]=i/100;
0088 E624 LDI R18,0x64
0089 E030 LDI R19,0
008A D03B RCALL div16u
008B 2FE4 MOV R30,R20
008C 2FF5 MOV R31,R21
008D 8301 STD Z+1,R16
(0037) i=i%100;
008E E624 LDI R18,0x64
008F E030 LDI R19,0
0090 2F06 MOV R16,R22
0091 2F17 MOV R17,R23
0092 D031 RCALL mod16u
0093 2F60 MOV R22,R16
0094 2F71 MOV R23,R17
(0038) p[2]=i/10;
0095 E02A LDI R18,0xA
0096 E030 LDI R19,0
0097 D02E RCALL div16u
0098 2FE4 MOV R30,R20
0099 2FF5 MOV R31,R21
009A 8302 STD Z+2,R16
(0039) i=i%10;
009B E02A LDI R18,0xA
009C E030 LDI R19,0
009D 2F06 MOV R16,R22
009E 2F17 MOV R17,R23
009F D024 RCALL mod16u
00A0 2F60 MOV R22,R16
00A1 2F71 MOV R23,R17
(0040) p[3]=i;
00A2 2FE4 MOV R30,R20
00A3 2FF5 MOV R31,R21
00A4 8363 STD Z+3,R22
(0041) }
00A5 D03A RCALL pop_gset2
00A6 9508 RET
(0042)
(0043) void main(void)
(0044) {uint i;
(0045) DDRA=0x00; //设置A口为不带上拉输入;
_main:
i --> R20
00A7 2422 CLR R2
00A8 BA2A OUT 0x1A,R2
(0046) PORTA=0x00;
00A9 BA2B OUT 0x1B,R2
(0047) DDRB=0xff; //设置B口为推挽1输出;
00AA EF8F LDI R24,0xFF
00AB BB87 OUT 0x17,R24
(0048) PORTB=0xff;
00AC BB88 OUT 0x18,R24
(0049) DDRD=0xff; //设置C口为推挽1输出;
00AD BB81 OUT 0x11,R24
(0050) PORTD=0xff;
00AE BB82 OUT 0x12,R24
(0051) PORTB=0x00; //B口初始化输出1;C口初始化输出0;点亮全部数码管;
00AF BA28 OUT 0x18,R2
(0052) PORTD=0xff;
00B0 BB82 OUT 0x12,R24
(0053) ADMUX=0x01; //选择第二通道ADC1;
00B1 E081 LDI R24,1
00B2 B987 OUT 0x07,R24
(0054) ADCSR=0xe6; //125K转换速率,自由转换模式;启动AD转换器;
00B3 EE86 LDI R24,0xE6
00B4 B986 OUT 0x06,R24
(0055) DelayMs(3000); //延时待系统稳定;
00B5 EB08 LDI R16,0xB8
00B6 E01B LDI R17,0xB
00B7 DF80 RCALL _DelayMs
00B8 C009 RJMP 0x00C2
(0056) while(1)
(0057) {i=ADC_Convert();
00B9 DFAD RCALL _ADC_Convert
00BA 2F40 MOV R20,R16
00BB 2F51 MOV R21,R17
(0058) Process(i,Data);
00BC E62A LDI R18,0x6A
00BD E030 LDI R19,0
00BE DFB5 RCALL _Process
(0059) Display(Data);
00BF E60A LDI R16,0x6A
00C0 E010 LDI R17,0
00C1 DF84 RCALL _Display
00C2 CFF6 RJMP 0x00B9
(0060) }
(0061) }
FILE: <library>
00C3 9508 RET
mod16u:
00C4 9468 BSET 6
00C5 C001 RJMP xdiv16u
div16u:
00C6 94E8 BCLR 6
xdiv16u:
00C7 92EA ST R14,-Y
00C8 92FA ST R15,-Y
00C9 938A ST R24,-Y
00CA 24EE CLR R14
00CB 24FF CLR R15
00CC E180 LDI R24,0x10
00CD 0F00 LSL R16
00CE 1F11 ROL R17
00CF 1CEE ROL R14
00D0 1CFF ROL R15
00D1 16E2 CP R14,R18
00D2 06F3 CPC R15,R19
00D3 F018 BCS 0x00D7
00D4 1AE2 SUB R14,R18
00D5 0AF3 SBC R15,R19
00D6 9503 INC R16
00D7 958A DEC R24
00D8 F7A1 BNE 0x00CD
00D9 F416 BRTC 0x00DC
00DA 2D0E MOV R16,R14
00DB 2D1F MOV R17,R15
00DC 9189 LD R24,Y+
00DD 90F9 LD R15,Y+
00DE 90E9 LD R14,Y+
00DF 9508 RET
pop_gset2:
00E0 E0E2 LDI R30,2
00E1 C006 RJMP pop
pop_gset3:
00E2 E0E4 LDI R30,4
00E3 C004 RJMP pop
push_gset1:
00E4 935A ST R21,-Y
00E5 934A ST R20,-Y
00E6 9508 RET
pop_gset1:
00E7 E0E1 LDI R30,1
pop:
00E8 9149 LD R20,Y+
00E9 9159 LD R21,Y+
00EA FDE0 SBRC R30,0
00EB 9508 RET
00EC 9169 LD R22,Y+
00ED 9179 LD R23,Y+
00EE FDE1 SBRC R30,1
00EF 9508 RET
00F0 90A9 LD R10,Y+
00F1 90B9 LD R11,Y+
00F2 FDE2 SBRC R30,2
00F3 9508 RET
00F4 90C9 LD R12,Y+
00F5 90D9 LD R13,Y+
00F6 FDE3 SBRC R30,3
00F7 9508 RET
00F8 90E9 LD R14,Y+
00F9 90F9 LD R15,Y+
00FA 9508 RET
push_gset2:
00FB 937A ST R23,-Y
00FC 936A ST R22,-Y
00FD CFE6 RJMP push_gset1
push_gset3:
00FE 92BA ST R11,-Y
00FF 92AA ST R10,-Y
0100 CFFA RJMP push_gset2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -