📄 adconv.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51CE SUBI R28,0x1E
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E6 CPI R30,0x66
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0117 CALL _main
_exit:
004A CFFF RJMP _exit
_SETB:
k --> R20
004B 940E01A4 CALL push_gset1
004D 2F40 MOV R20,R16
FILE: D:\单片机编程\iccavr\AD转换\ADCONV.c
(0001) #include <iom16v.h>
(0002) #define CS 0
(0003) #define CLK 1
(0004) #define DIO 2
(0005) #define KEY 3
(0006)
(0007) void SETB(unsigned char k)
(0008) {//这里的PORTB根据自己的程序修改
(0009) PORTB=PORTB|(1<<k);
004E E001 LDI R16,1
004F 2F14 MOV R17,R20
0050 940E01BB CALL lsl8
0052 B228 IN R2,0x18
0053 2A20 OR R2,R16
0054 BA28 OUT 0x18,R2
0055 940E01A7 CALL pop_gset1
0057 9508 RET
_CLRS:
l --> R20
0058 940E01A4 CALL push_gset1
005A 2F40 MOV R20,R16
(0010) }
(0011)
(0012) void CLRS(unsigned char l)
(0013) {//这里的PORTB根据自己的程序修改
(0014) PORTB=PORTB&~(1<<l);
005B E001 LDI R16,1
005C 2F14 MOV R17,R20
005D 940E01BB CALL lsl8
005F 2E20 MOV R2,R16
0060 9420 COM R2
0061 B238 IN R3,0x18
0062 2032 AND R3,R2
0063 BA38 OUT 0x18,R3
0064 940E01A7 CALL pop_gset1
0066 9508 RET
_Display:
DataPos --> Y+1
datanum --> R14
cToDIO --> R20
iToDIO --> R10
num --> Y+0
transdata --> R22
wait --> R12
position --> Y+14
Data --> Y+12
0067 940E0178 CALL push_arg4
0069 940E019C CALL push_gset5
006B 9722 SBIW R28,2
(0015) }
(0016)
(0017) //初始化显示时Data=0xA4,position=0xFF
(0018) //Data为显示数据,position为数据显示位置
(0019) //Data为10进制或16进制数,只能一位一位发送
(0020) //position为1-8的数字
(0021) void Display(unsigned char Data,unsigned char position)
(0022) {
(0023) unsigned char DataPos=~0;
006C EF8F LDI R24,0xFF
006D 8389 STD Y+1,R24
(0024) unsigned char num=~0;
006E 8388 STD Y+0,R24
(0025) unsigned char wait=~0;
006F 2EC8 MOV R12,R24
(0026) unsigned char datanum=~0;
(0027) unsigned int transdata=~0;
0070 EF6F LDI R22,0xFF
0071 EF7F LDI R23,0xFF
(0028) unsigned int iToDIO=~0;
0072 EF8F LDI R24,0xFF
0073 EF9F LDI R25,0xFF
0074 015C MOVW R10,R24
(0029) unsigned char cToDIO=~0;
0075 EF4F LDI R20,0xFF
(0030) DDRB=0xFF;
0076 BAA7 OUT 0x17,R10
(0031) SETB(KEY);
0077 E003 LDI R16,3
0078 DFD2 RCALL _SETB
(0032) SETB(CS);
0079 2700 CLR R16
007A DFD0 RCALL _SETB
(0033) SETB(DIO);
007B E002 LDI R16,2
007C DFCE RCALL _SETB
(0034) datanum=2;
007D E082 LDI R24,2
007E 2EE8 MOV R14,R24
(0035) CLRS(CS);
007F 2700 CLR R16
0080 DFD7 RCALL _CLRS
(0036) if(Data!=0xA4)
0081 858C LDD R24,Y+12
0082 3A84 CPI R24,0xA4
0083 F409 BNE 0x0085
0084 C04C RJMP 0x00D1
(0037) {
(0038) DataPos=0xC8+position-1;
0085 858E LDD R24,Y+14
0086 5388 SUBI R24,0x38
0087 5081 SUBI R24,1
0088 8389 STD Y+1,R24
(0039) transdata=DataPos;
0089 2F68 MOV R22,R24
008A 2777 CLR R23
(0040) transdata=transdata<<8;
008B 2F76 MOV R23,R22
008C 2766 CLR R22
(0041) transdata=transdata+Data;
008D 842C LDD R2,Y+12
008E 2433 CLR R3
008F 0D62 ADD R22,R2
0090 1D73 ADC R23,R3
0091 C036 RJMP 0x00C8
(0042) while(datanum--)
(0043) {
(0044) wait=25;
0092 E189 LDI R24,0x19
0093 2EC8 MOV R12,R24
(0045) while(wait--)
0094 2C2C MOV R2,R12
0095 2433 CLR R3
0096 2D82 MOV R24,R2
0097 5081 SUBI R24,1
0098 2EC8 MOV R12,R24
0099 2022 TST R2
009A F7C9 BNE 0x0094
(0046) {;}
(0047) for(num=0;num<8;num++)
009B 2400 CLR R0
009C 8208 STD Y+0,R0
009D C027 RJMP 0x00C5
(0048) {
(0049) iToDIO=transdata&0x8000;
009E 01CB MOVW R24,R22
009F 7080 ANDI R24,0
00A0 7890 ANDI R25,0x80
00A1 015C MOVW R10,R24
(0050) transdata=transdata<<1;
00A2 0F66 LSL R22
00A3 1F77 ROL R23
(0051) if(iToDIO==0x0000)
00A4 3080 CPI R24,0
00A5 0789 CPC R24,R25
00A6 F419 BNE 0x00AA
(0052) {
(0053) CLRS(DIO);
00A7 E002 LDI R16,2
00A8 DFAF RCALL _CLRS
(0054) }
00A9 C002 RJMP 0x00AC
(0055) else
(0056) {
(0057) SETB(DIO);
00AA E002 LDI R16,2
00AB DF9F RCALL _SETB
(0058) }
(0059) SETB(CLK);
00AC E001 LDI R16,1
00AD DF9D RCALL _SETB
(0060) wait=4;
00AE E084 LDI R24,4
00AF 2EC8 MOV R12,R24
(0061) while(wait--)
00B0 2C2C MOV R2,R12
00B1 2433 CLR R3
00B2 2D82 MOV R24,R2
00B3 5081 SUBI R24,1
00B4 2EC8 MOV R12,R24
00B5 2022 TST R2
00B6 F7C9 BNE 0x00B0
(0062) {;}
(0063) CLRS(CLK);
00B7 E001 LDI R16,1
00B8 DF9F RCALL _CLRS
(0064) wait=4;
00B9 E084 LDI R24,4
00BA 2EC8 MOV R12,R24
(0065) while(wait--)
00BB 2C2C MOV R2,R12
00BC 2433 CLR R3
00BD 2D82 MOV R24,R2
00BE 5081 SUBI R24,1
00BF 2EC8 MOV R12,R24
00C0 2022 TST R2
00C1 F7C9 BNE 0x00BB
00C2 8008 LDD R0,Y+0
00C3 9403 INC R0
00C4 8208 STD Y+0,R0
00C5 8188 LDD R24,Y+0
00C6 3088 CPI R24,0x8
00C7 F2B0 BCS 0x009E
00C8 2C2E MOV R2,R14
00C9 2433 CLR R3
00CA 2D82 MOV R24,R2
00CB 5081 SUBI R24,1
00CC 2EE8 MOV R14,R24
00CD 2022 TST R2
00CE F009 BEQ 0x00D0
00CF CFC2 RJMP 0x0092
(0066) {;}
(0067) }
(0068) }
(0069) }
00D0 C034 RJMP 0x0105
(0070) else
(0071) {
(0072) wait=25;
00D1 E189 LDI R24,0x19
00D2 2EC8 MOV R12,R24
(0073) while(wait--);
00D3 2C2C MOV R2,R12
00D4 2433 CLR R3
00D5 2D82 MOV R24,R2
00D6 5081 SUBI R24,1
00D7 2EC8 MOV R12,R24
00D8 2022 TST R2
00D9 F7C9 BNE 0x00D3
(0074) for(num=0;num<8;num++)
00DA 2400 CLR R0
00DB 8208 STD Y+0,R0
00DC C025 RJMP 0x0102
(0075) {
(0076) cToDIO=Data&0x80;
00DD 854C LDD R20,Y+12
00DE 7840 ANDI R20,0x80
(0077) Data=Data<<1;
00DF 842C LDD R2,Y+12
00E0 0C22 LSL R2
00E1 862C STD Y+12,R2
(0078) if(cToDIO==0x00)
00E2 2344 TST R20
00E3 F419 BNE 0x00E7
(0079) {
(0080) CLRS(DIO);
00E4 E002 LDI R16,2
00E5 DF72 RCALL _CLRS
(0081) }
00E6 C002 RJMP 0x00E9
(0082) else
(0083) {
(0084) SETB(DIO);
00E7 E002 LDI R16,2
00E8 DF62 RCALL _SETB
(0085) }
(0086) SETB(CLK);
00E9 E001 LDI R16,1
00EA DF60 RCALL _SETB
(0087) wait=4;
00EB E084 LDI R24,4
00EC 2EC8 MOV R12,R24
(0088) while(wait--);
00ED 2C2C MOV R2,R12
00EE 2433 CLR R3
00EF 2D82 MOV R24,R2
00F0 5081 SUBI R24,1
00F1 2EC8 MOV R12,R24
00F2 2022 TST R2
00F3 F7C9 BNE 0x00ED
(0089) CLRS(CLK);
00F4 E001 LDI R16,1
00F5 DF62 RCALL _CLRS
(0090) wait=4;
00F6 E084 LDI R24,4
00F7 2EC8 MOV R12,R24
(0091) while(wait--);
00F8 2C2C MOV R2,R12
00F9 2433 CLR R3
00FA 2D82 MOV R24,R2
00FB 5081 SUBI R24,1
00FC 2EC8 MOV R12,R24
00FD 2022 TST R2
00FE F7C9 BNE 0x00F8
00FF 8008 LDD R0,Y+0
0100 9403 INC R0
0101 8208 STD Y+0,R0
0102 8188 LDD R24,Y+0
0103 3088 CPI R24,0x8
0104 F2C0 BCS 0x00DD
(0092) }
(0093) }
(0094) SETB(CS);
0105 2700 CLR R16
0106 DF44 RCALL _SETB
0107 9622 ADIW R28,2
0108 940E0199 CALL pop_gset5
010A 9624 ADIW R28,4
010B 9508 RET
(0095) }
(0096)
(0097) unsigned int ADC_Conv(void)
(0098) {
(0099) unsigned int temp1,temp2;
(0100) temp1=(unsigned int)ADCL;
_ADC_Conv:
temp1 --> R18
temp2 --> R16
010C B124 IN R18,0x04
010D 2733 CLR R19
(0101) temp2=(unsigned int)ADCH;
010E B105 IN R16,0x05
010F 2711 CLR R17
(0102) temp2=(temp2<<8)+temp1;
0110 0118 MOVW R2,R16
0111 2C32 MOV R3,R2
0112 2422 CLR R2
0113 0E22 ADD R2,R18
0114 1E33 ADC R3,R19
0115 0181 MOVW R16,R2
(0103) return temp2;
0116 9508 RET
(0104) }
(0105)
(0106) unsigned int count,i;
(0107) unsigned int j;
(0108) void main()
(0109) {
(0110) ADMUX=0x00;
_main:
0117 2422 CLR R2
0118 B827 OUT 0x07,R2
(0111) ADCSRA=0xE6;
0119 EE86 LDI R24,0xE6
011A B986 OUT 0x06,R24
(0112)
(0113) Display(0xA4,0xff);
011B EF2F LDI R18,0xFF
011C EA04 LDI R16,0xA4
011D DF49 RCALL _Display
011E C057 RJMP 0x0176
(0114) while(1)
(0115) {
(0116) count=20000;
011F E280 LDI R24,0x20
0120 E49E LDI R25,0x4E
0121 93900065 STS count+1,R25
0123 93800064 STS count,R24
(0117) while(count--);
0125 90200064 LDS R2,count
0127 90300065 LDS R3,count+1
0129 01C1 MOVW R24,R2
012A 9701 SBIW R24,1
012B 93900065 STS count+1,R25
012D 93800064 STS count,R24
012F 2022 TST R2
0130 F7A1 BNE 0x0125
0131 2033 TST R3
0132 F791 BNE 0x0125
(0118) i=ADC_Conv();
0133 DFD8 RCALL _ADC_Conv
0134 93100063 STS i+1,R17
0136 93000062 STS i,R16
(0119) for(j=0;j<4;j++)
0138 2422 CLR R2
0139 2433 CLR R3
013A 92300061 STS j+1,R3
013C 92200060 STS j,R2
013E C02F RJMP 0x016E
(0120) {
(0121) Display(i%10,j+1);
013F 91200060 LDS R18,j
0141 5F2F SUBI R18,0xFF
0142 4F3F SBCI R19,0xFF
0143 E08A LDI R24,0xA
0144 E090 LDI R25,0
0145 91000062 LDS R16,i
0147 91100063 LDS R17,i+1
0149 932F PUSH R18
014A 933F PUSH R19
014B 019C MOVW R18,R24
014C 940E017D CALL mod16u
014E 913F POP R19
014F 912F POP R18
0150 DF16 RCALL _Display
(0122) if(i!=0)
0151 90200062 LDS R2,i
0153 90300063 LDS R3,i+1
0155 2022 TST R2
0156 F411 BNE 0x0159
0157 2033 TST R3
0158 F061 BEQ 0x0165
(0123) {
(0124) i=i/10;
FILE: <library>
0159 E02A LDI R18,0xA
015A E030 LDI R19,0
015B 91000062 LDS R16,i
015D 91100063 LDS R17,i+1
015F 940E017F CALL div16u
0161 93100063 STS i+1,R17
0163 93000062 STS i,R16
0165 91800060 LDS R24,j
0167 91900061 LDS R25,j+1
0169 9601 ADIW R24,1
016A 93900061 STS j+1,R25
016C 93800060 STS j,R24
016E 91800060 LDS R24,j
0170 91900061 LDS R25,j+1
0172 3084 CPI R24,4
0173 E0E0 LDI R30,0
0174 079E CPC R25,R30
0175 F248 BCS 0x013F
0176 CFA8 RJMP 0x011F
0177 9508 RET
push_arg4:
0178 933A ST R19,-Y
0179 932A ST R18,-Y
push_arg2:
017A 931A ST R17,-Y
017B 930A ST R16,-Y
017C 9508 RET
mod16u:
017D 9468 BSET 6
017E C001 RJMP xdiv16u
div16u:
017F 94E8 BCLR 6
xdiv16u:
0180 92EA ST R14,-Y
0181 92FA ST R15,-Y
0182 938A ST R24,-Y
0183 24EE CLR R14
0184 24FF CLR R15
0185 E180 LDI R24,0x10
0186 0F00 LSL R16
0187 1F11 ROL R17
0188 1CEE ROL R14
0189 1CFF ROL R15
018A 16E2 CP R14,R18
018B 06F3 CPC R15,R19
018C F018 BCS 0x0190
018D 1AE2 SUB R14,R18
018E 0AF3 SBC R15,R19
018F 9503 INC R16
0190 958A DEC R24
0191 F7A1 BNE 0x0186
0192 F416 BRTC 0x0195
0193 2D0E MOV R16,R14
0194 2D1F MOV R17,R15
0195 9189 LD R24,Y+
0196 90F9 LD R15,Y+
0197 90E9 LD R14,Y+
0198 9508 RET
pop_gset5:
0199 27EE CLR R30
019A 940C01A8 JMP pop
push_gset5:
019C 92FA ST R15,-Y
019D 92EA ST R14,-Y
push_gset4:
019E 92DA ST R13,-Y
019F 92CA ST R12,-Y
push_gset3:
01A0 92BA ST R11,-Y
01A1 92AA ST R10,-Y
push_gset2:
01A2 937A ST R23,-Y
01A3 936A ST R22,-Y
push_gset1:
01A4 935A ST R21,-Y
01A5 934A ST R20,-Y
01A6 9508 RET
pop_gset1:
01A7 E0E1 LDI R30,1
pop:
01A8 9149 LD R20,Y+
01A9 9159 LD R21,Y+
01AA FDE0 SBRC R30,0
01AB 9508 RET
01AC 9169 LD R22,Y+
01AD 9179 LD R23,Y+
01AE FDE1 SBRC R30,1
01AF 9508 RET
01B0 90A9 LD R10,Y+
01B1 90B9 LD R11,Y+
01B2 FDE2 SBRC R30,2
01B3 9508 RET
01B4 90C9 LD R12,Y+
01B5 90D9 LD R13,Y+
01B6 FDE3 SBRC R30,3
01B7 9508 RET
01B8 90E9 LD R14,Y+
01B9 90F9 LD R15,Y+
01BA 9508 RET
lsl8:
01BB 2311 TST R17
01BC F019 BEQ 0x01C0
01BD 0F00 LSL R16
01BE 951A DEC R17
01BF CFFB RJMP lsl8
01C0 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -