📄 intad.lst
字号:
0119 940E0248 CALL pop_gset1
011B 9508 RET
_converseHToD:
dec --> R20
t --> Y+0
hex --> R20
011C 940E0245 CALL push_gset1
011E 2F40 MOV R20,R16
011F 9722 SBIW R28,2
(0208) }
(0209) /*--------------------------------------------------------------------
(0210) 函数全称:十六进制化为十进制
(0211) 函数功能:
(0212) 注意事项:无
(0213) 提示说明:调用converseHToD(21),return 33
(0214) 输 入:
(0215) 返 回:uint8 dec
(0216) --------------------------------------------------------------------*/
(0217) uint8 converseHToD(uint8 hex)
(0218) {
(0219) uint8 dec;
(0220) uint8 t[2];
(0221) t[1]=hex/10;
0120 E01A LDI R17,0xA
0121 2F04 MOV R16,R20
0122 940E01FC CALL div8u
0124 8309 STD Y+1,R16
(0222) t[0]=hex%10;
0125 E01A LDI R17,0xA
0126 2F04 MOV R16,R20
0127 940E01FA CALL mod8u
0129 8308 STD Y+0,R16
(0223) dec=t[1]*16+t[0];
012A 8029 LDD R2,Y+1
012B E180 LDI R24,0x10
012C 9D82 MUL R24,R2
012D 2D40 MOV R20,R0
012E 0F40 ADD R20,R16
(0224) return dec;
012F 2F04 MOV R16,R20
0130 9622 ADIW R28,2
0131 940E0248 CALL pop_gset1
0133 9508 RET
FILE: E:\ProductPro\M16SD\ICCAVR\AD\IntAD\IntAD.C
(0001)
(0002) #include <iom16v.h>
(0003) #include "E:\ICCAVR_H\CmmICC.H"
(0004)
(0005) #define H_VAL_DISP_DDR DDRD
(0006) #define L_VAL_DISP_DDR DDRB
(0007) #define H_VAL_DISP_PORT PORTD
(0008) #define L_VAL_DISP_PORT PORTB
(0009)
(0010) const uint8 ADEnStatus[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
(0011)
(0012) uint8 AdcMux; //ADC通道
(0013) uint16 AdcVal; //ADC转换值
(0014)
(0015) void adc_init()
(0016) {
(0017) /* 设置对应的IO口为输入高阻态 */
(0018) DDRA &= ADEnStatus[AdcMux];
_adc_init:
0134 E584 LDI R24,0x54
0135 E090 LDI R25,0
0136 91E00062 LDS R30,_AdcMux
0138 27FF CLR R31
0139 0FE8 ADD R30,R24
013A 1FF9 ADC R31,R25
013B 91E4 LPM R30,0(Z)
013C B22A IN R2,0x1A
013D 222E AND R2,R30
013E BA2A OUT 0x1A,R2
(0019) PORTA &= ADEnStatus[AdcMux];
013F 91E00062 LDS R30,_AdcMux
0141 27FF CLR R31
0142 0FE8 ADD R30,R24
0143 1FF9 ADC R31,R25
0144 91E4 LPM R30,0(Z)
0145 B22B IN R2,0x1B
0146 222E AND R2,R30
0147 BA2B OUT 0x1B,R2
(0020)
(0021) ADCSRA = 0x00; //disable adc
0148 2422 CLR R2
0149 B826 OUT 0x06,R2
(0022) ADMUX = (1<<REFS1)|(1<<REFS0)|(AdcMux&0x0F); //select adc input channel
014A 91800062 LDS R24,_AdcMux
014C 708F ANDI R24,0xF
014D 6C80 ORI R24,0xC0
014E B987 OUT 0x07,R24
(0023) ACSR = (1<<ACD); //close analog comparator
014F E880 LDI R24,0x80
0150 B988 OUT 0x08,R24
(0024) ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
0151 EC8E LDI R24,0xCE
0152 B986 OUT 0x06,R24
(0025) }
0153 9508 RET
_adc_isr:
0154 938A ST R24,-Y
0155 939A ST R25,-Y
0156 B78F IN R24,0x3F
0157 938A ST R24,-Y
(0026)
(0027) #pragma interrupt_handler adc_isr:15
(0028) void adc_isr(void)
(0029) {
(0030) AdcVal = ADC&0x3FF;
0158 B184 IN R24,0x04
0159 B195 IN R25,0x05
015A 7093 ANDI R25,3
015B 93900061 STS _AdcVal+1,R25
015D 93800060 STS _AdcVal,R24
(0031) ADMUX = (1<<REFS0)|(AdcMux&0x0F); //使用 AVcc 作为ADC参考电源
015F 91800062 LDS R24,_AdcMux
0161 708F ANDI R24,0xF
0162 6480 ORI R24,0x40
0163 B987 OUT 0x07,R24
(0032) ADCSRA |= (1<<ADSC); //ADSC: AD start conversion
0164 9A36 SBI 0x06,6
(0033) }
0165 9189 LD R24,Y+
0166 BF8F OUT 0x3F,R24
0167 9199 LD R25,Y+
0168 9189 LD R24,Y+
0169 9518 RETI
(0034)
(0035) void main(void)
(0036) {
(0037) H_VAL_DISP_DDR = 0xFF;
_main:
016A EF8F LDI R24,0xFF
016B BB81 OUT 0x11,R24
(0038) L_VAL_DISP_DDR = 0xFF;
016C BB87 OUT 0x17,R24
(0039) AdcMux = 0; //使用ADC通道0
016D 2422 CLR R2
016E 92200062 STS _AdcMux,R2
(0040) adc_init();
0170 DFC3 RCALL _adc_init
(0041) SEI();
0171 9478 BSET 7
0172 C00F RJMP 0x0182
(0042) while(1)
(0043) {
(0044) H_VAL_DISP_PORT = (AdcVal&0x300)>>8; //ADC的高2位Val
0173 91800060 LDS R24,_AdcVal
0175 91900061 LDS R25,_AdcVal+1
0177 7080 ANDI R24,0
0178 7093 ANDI R25,3
0179 2F89 MOV R24,R25
017A 2799 CLR R25
017B BB82 OUT 0x12,R24
(0045) L_VAL_DISP_PORT = AdcVal&0xFF; //ADC的低8位Val
017C 91800060 LDS R24,_AdcVal
017E 91900061 LDS R25,_AdcVal+1
0180 7090 ANDI R25,0
0181 BB88 OUT 0x18,R24
0182 CFF0 RJMP 0x0173
(0046) }
(0047) }
FILE: <library>
0183 9508 RET
push_arg4:
0184 933A ST R19,-Y
0185 932A ST R18,-Y
push_arg2:
0186 931A ST R17,-Y
0187 930A ST R16,-Y
0188 9508 RET
div32u:
0189 94E8 BCLR 6
018A C001 RJMP 0x018C
mod32u:
018B 9468 BSET 6
018C D02F RCALL long_div_prolog
018D 24CC CLR R12
018E C008 RJMP 0x0197
div32s:
018F 94E8 BCLR 6
0190 C001 RJMP 0x0192
mod32s:
0191 9468 BSET 6
0192 D029 RCALL long_div_prolog
0193 FD37 SBRC R19,7
0194 D053 RCALL neg_R16_R19
0195 FDB7 SBRC R27,7
0196 D05A RCALL neg_R24_R27
0197 2477 CLR R7
0198 2488 CLR R8
0199 2499 CLR R9
019A 24AA CLR R10
019B 24BB CLR R11
019C D041 RCALL tst_R16_R19
019D F0C1 BEQ 0x01B6
019E D044 RCALL tst_R24_R27
019F F0B1 BEQ 0x01B6
01A0 E2E8 LDI R30,0x28
01A1 0F00 LSL R16
01A2 1F11 ROL R17
01A3 1F22 ROL R18
01A4 1F33 ROL R19
01A5 1C77 ROL R7
01A6 1C88 ROL R8
01A7 1C99 ROL R9
01A8 1CAA ROL R10
01A9 1CBB ROL R11
01AA 1688 CP R8,R24
01AB 0699 CPC R9,R25
01AC 06AA CPC R10,R26
01AD 06BB CPC R11,R27
01AE F028 BCS 0x01B4
01AF 1A88 SUB R8,R24
01B0 0A99 SBC R9,R25
01B1 0AAA SBC R10,R26
01B2 0ABB SBC R11,R27
01B3 9503 INC R16
01B4 95EA DEC R30
01B5 F759 BNE 0x01A1
01B6 F426 BRTC 0x01BB
01B7 2D08 MOV R16,R8
01B8 2D19 MOV R17,R9
01B9 2D2A MOV R18,R10
01BA 2D3B MOV R19,R11
01BB C013 RJMP long_div_epilog
long_div_prolog:
01BC 927A ST R7,-Y
01BD 928A ST R8,-Y
01BE 929A ST R9,-Y
01BF 92AA ST R10,-Y
01C0 92BA ST R11,-Y
01C1 92CA ST R12,-Y
01C2 93EA ST R30,-Y
01C3 938A ST R24,-Y
01C4 939A ST R25,-Y
01C5 93AA ST R26,-Y
01C6 93BA ST R27,-Y
01C7 858B LDD R24,Y+11
01C8 859C LDD R25,Y+12
01C9 85AD LDD R26,Y+13
01CA 85BE LDD R27,Y+14
01CB 2EC3 MOV R12,R19
01CC F00E BRTS 0x01CE
01CD 26CB EOR R12,R27
01CE 9508 RET
long_div_epilog:
01CF FCC7 SBRC R12,7
01D0 D017 RCALL neg_R16_R19
01D1 91B9 LD R27,Y+
01D2 91A9 LD R26,Y+
01D3 9199 LD R25,Y+
01D4 9189 LD R24,Y+
01D5 91E9 LD R30,Y+
01D6 90C9 LD R12,Y+
01D7 90B9 LD R11,Y+
01D8 90A9 LD R10,Y+
01D9 9099 LD R9,Y+
01DA 9089 LD R8,Y+
01DB 9079 LD R7,Y+
01DC 9624 ADIW R28,4
01DD 9508 RET
tst_R16_R19:
01DE 2FE0 MOV R30,R16
01DF 2BE1 OR R30,R17
01E0 2BE2 OR R30,R18
01E1 2BE3 OR R30,R19
01E2 9508 RET
tst_R24_R27:
01E3 2FE8 MOV R30,R24
01E4 2BE9 OR R30,R25
01E5 2BEA OR R30,R26
01E6 2BEB OR R30,R27
01E7 9508 RET
neg_R16_R19:
01E8 9500 COM R16
01E9 9510 COM R17
01EA 9520 COM R18
01EB 9530 COM R19
01EC 5F0F SUBI R16,0xFF
01ED 4F1F SBCI R17,0xFF
01EE 4F2F SBCI R18,0xFF
01EF 4F3F SBCI R19,0xFF
01F0 9508 RET
neg_R24_R27:
01F1 9580 COM R24
01F2 9590 COM R25
01F3 95A0 COM R26
01F4 95B0 COM R27
01F5 5F8F SUBI R24,0xFF
01F6 4F9F SBCI R25,0xFF
01F7 4FAF SBCI R26,0xFF
01F8 4FBF SBCI R27,0xFF
01F9 9508 RET
mod8u:
01FA 9468 BSET 6
01FB C001 RJMP xdiv8u
div8u:
01FC 94E8 BCLR 6
xdiv8u:
01FD 932A ST R18,-Y
01FE 92FA ST R15,-Y
01FF 92EA ST R14,-Y
0200 24FF CLR R15
0201 24EE CLR R14
0202 E120 LDI R18,0x10
0203 0F00 LSL R16
0204 1CFF ROL R15
0205 1CEE ROL R14
0206 16E1 CP R14,R17
0207 F010 BCS 0x020A
0208 1AE1 SUB R14,R17
0209 9503 INC R16
020A 952A DEC R18
020B F7B9 BNE 0x0203
020C F40E BRTC 0x020E
020D 2D0E MOV R16,R14
020E 90E9 LD R14,Y+
020F 90F9 LD R15,Y+
0210 9129 LD R18,Y+
0211 9508 RET
empy32u:
empy32s:
0212 940E0268 CALL long_prolog
0214 927F PUSH R7
0215 940E0281 CALL tstzero1
0217 F139 BEQ 0x023F
0218 2477 CLR R7
0219 940E0287 CALL tstzero2
021B F419 BNE 0x021F
021C 018C MOVW R16,R24
021D 019D MOVW R18,R26
021E C020 RJMP 0x023F
021F 9F08 MUL R16,R24
0220 2CB0 MOV R11,R0
0221 2CA1 MOV R10,R1
0222 9F28 MUL R18,R24
0223 2C90 MOV R9,R0
0224 2C81 MOV R8,R1
0225 9F18 MUL R17,R24
0226 0CA0 ADD R10,R0
0227 1C91 ADC R9,R1
0228 1C87 ADC R8,R7
0229 9F09 MUL R16,R25
022A 0CA0 ADD R10,R0
022B 1C91 ADC R9,R1
022C 1C87 ADC R8,R7
022D 9F19 MUL R17,R25
022E 0C90 ADD R9,R0
022F 1C81 ADC R8,R1
0230 9F0A MUL R16,R26
0231 0C90 ADD R9,R0
0232 1C81 ADC R8,R1
0233 9F38 MUL R19,R24
0234 0C80 ADD R8,R0
0235 9F29 MUL R18,R25
0236 0C80 ADD R8,R0
0237 9F1A MUL R17,R26
0238 0C80 ADD R8,R0
0239 9F0B MUL R16,R27
023A 0C80 ADD R8,R0
023B 2D0B MOV R16,R11
023C 2D1A MOV R17,R10
023D 2D29 MOV R18,R9
023E 2D38 MOV R19,R8
023F 907F POP R7
0240 940C0276 JMP long_epilog
pop_gset4:
0242 E0E8 LDI R30,0x8
0243 940C0249 JMP pop
push_gset1:
0245 935A ST R21,-Y
0246 934A ST R20,-Y
0247 9508 RET
pop_gset1:
0248 E0E1 LDI R30,1
pop:
0249 9149 LD R20,Y+
024A 9159 LD R21,Y+
024B FDE0 SBRC R30,0
024C 9508 RET
024D 9169 LD R22,Y+
024E 9179 LD R23,Y+
024F FDE1 SBRC R30,1
0250 9508 RET
0251 90A9 LD R10,Y+
0252 90B9 LD R11,Y+
0253 FDE2 SBRC R30,2
0254 9508 RET
0255 90C9 LD R12,Y+
0256 90D9 LD R13,Y+
0257 FDE3 SBRC R30,3
0258 9508 RET
0259 90E9 LD R14,Y+
025A 90F9 LD R15,Y+
025B 9508 RET
push_gset2:
025C 937A ST R23,-Y
025D 936A ST R22,-Y
025E 940C0245 JMP push_gset1
push_gset3:
0260 92BA ST R11,-Y
0261 92AA ST R10,-Y
0262 940C025C JMP push_gset2
push_gset4:
0264 92DA ST R13,-Y
0265 92CA ST R12,-Y
0266 940C0260 JMP push_gset3
long_prolog:
0268 928A ST R8,-Y
0269 929A ST R9,-Y
026A 92AA ST R10,-Y
026B 92BA ST R11,-Y
026C 93EA ST R30,-Y
026D 938A ST R24,-Y
026E 939A ST R25,-Y
026F 93AA ST R26,-Y
0270 93BA ST R27,-Y
0271 8589 LDD R24,Y+9
0272 859A LDD R25,Y+10
0273 85AB LDD R26,Y+11
0274 85BC LDD R27,Y+12
0275 9508 RET
long_epilog:
0276 91B9 LD R27,Y+
0277 91A9 LD R26,Y+
0278 9199 LD R25,Y+
0279 9189 LD R24,Y+
027A 91E9 LD R30,Y+
027B 90B9 LD R11,Y+
027C 90A9 LD R10,Y+
027D 9099 LD R9,Y+
027E 9089 LD R8,Y+
027F 9624 ADIW R28,4
0280 9508 RET
tstzero1:
0281 27EE CLR R30
0282 2BE0 OR R30,R16
0283 2BE1 OR R30,R17
0284 2BE2 OR R30,R18
0285 2BE3 OR R30,R19
0286 9508 RET
tstzero2:
0287 27EE CLR R30
0288 2BE8 OR R30,R24
0289 2BE9 OR R30,R25
028A 2BEA OR R30,R26
028B 2BEB OR R30,R27
028C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -