📄 09ad.lst
字号:
(0037) PORTB = 0xFF; /*输出高电平*/
0102 BB88 OUT 0x18,R24
(0038) DDRC = 0x00; /*不用的IO口建议设置为输入带上拉*/
0103 BA24 OUT 0x14,R2
(0039) PORTC = 0xFF;
0104 BB85 OUT 0x15,R24
(0040) DDRD = 0x00;
0105 BA21 OUT 0x11,R2
(0041) PORTD = 0xFF;
0106 BB82 OUT 0x12,R24
(0042) DDRE = 0x00;
0107 B822 OUT 0x02,R2
(0043) PORTE = 0xFF;
0108 B983 OUT 0x03,R24
(0044) DDRF = 0x00;
0109 92200061 STS 0x61,R2
(0045) PORTF = 0xFE; /*PF0无上拉电阻*/
010B EF8E LDI R24,0xFE
010C 93800062 STS 0x62,R24
(0046) DDRG = 0x00;
010E 92200064 STS 0x64,R2
(0047) PORTG = 0xFF;
0110 EF8F LDI R24,0xFF
0111 93800065 STS 0x65,R24
0113 9508 RET
_int_to_bcd:
i --> R20
temp --> R22
0114 940E01C8 CALL push_gset2
0116 01B8 MOVW R22,R16
(0048) }
(0049)
(0050) /*十六进制转十进制函数*/
(0051) void int_to_bcd(unsigned int temp) {
(0052) unsigned char i;
(0053)
(0054) if (temp > 9999) { /*防止数值过大*/
0117 E08F LDI R24,0xF
0118 E297 LDI R25,0x27
0119 1786 CP R24,R22
011A 0797 CPC R25,R23
011B F410 BCC 0x011E
(0055) temp = 9999;
011C E06F LDI R22,0xF
011D E277 LDI R23,0x27
(0056) }
(0057) for (i = 0; i < 4; i++) {
011E 2744 CLR R20
011F C013 RJMP 0x0133
(0058) led_buf[i] = temp % 10; /*提取当前变量最低位*/
0120 E02A LDI R18,0xA
0121 E030 LDI R19,0
0122 018B MOVW R16,R22
0123 940E015B CALL mod16u
0125 E180 LDI R24,0x10
0126 E091 LDI R25,1
0127 2FE4 MOV R30,R20
0128 27FF CLR R31
0129 0FE8 ADD R30,R24
012A 1FF9 ADC R31,R25
012B 8300 STD Z+0,R16
(0059) temp = temp / 10; /*去掉当前最低位值*/
012C E02A LDI R18,0xA
012D E030 LDI R19,0
012E 018B MOVW R16,R22
012F 940E015D CALL div16u
0131 01B8 MOVW R22,R16
0132 9543 INC R20
0133 3044 CPI R20,4
0134 F358 BCS 0x0120
0135 940E01BF CALL pop_gset2
0137 9508 RET
(0060) }
(0061) }
(0062)
(0063) void main(void) {
(0064)
(0065) unsigned int i;
(0066)
(0067) delay_ms(200); /*加入延时*/
_main:
i --> R10
0138 EC08 LDI R16,0xC8
0139 DFB4 RCALL _delay_ms
(0068) io_init(); /*IO口初始化*/
013A DFC2 RCALL _io_init
(0069) disp_init(); /*显示初始化*/
013B 940E007D CALL _disp_init
013D C01B RJMP 0x0159
(0070) while (1) {
(0071) delay_ms(100); /*周期控制*/
013E E604 LDI R16,0x64
013F DFAE RCALL _delay_ms
(0072) i = get_ad(); /*获取电压*/
0140 940E0072 CALL _get_ad
0142 0158 MOVW R10,R16
(0073) i = (unsigned int)(((unsigned long)i*5000)/1024);/*将AD结果转成电压值*/
0143 0115 MOVW R2,R10
0144 2444 CLR R4
0145 2455 CLR R5
0146 E848 LDI R20,0x88
0147 E153 LDI R21,0x13
0148 E060 LDI R22,0
0149 E070 LDI R23,0
014A 925A ST R5,-Y
014B 924A ST R4,-Y
014C 923A ST R3,-Y
014D 922A ST R2,-Y
014E 018A MOVW R16,R20
014F 019B MOVW R18,R22
0150 940E018F CALL empy32s
0152 E08A LDI R24,0xA
0153 E090 LDI R25,0
0154 938A ST R24,-Y
0155 940E0206 CALL lsr32
0157 0158 MOVW R10,R16
(0074) int_to_bcd(i); /*将电压值提取出来*/
FILE: <library>
0158 DFBB RCALL _int_to_bcd
0159 CFE4 RJMP 0x013E
015A 9508 RET
mod16u:
015B 9468 BSET 6
015C C001 RJMP xdiv16u
div16u:
015D 94E8 BCLR 6
xdiv16u:
015E 92EA ST R14,-Y
015F 92FA ST R15,-Y
0160 938A ST R24,-Y
0161 24EE CLR R14
0162 24FF CLR R15
0163 E180 LDI R24,0x10
0164 0F00 LSL R16
0165 1F11 ROL R17
0166 1CEE ROL R14
0167 1CFF ROL R15
0168 16E2 CP R14,R18
0169 06F3 CPC R15,R19
016A F018 BCS 0x016E
016B 1AE2 SUB R14,R18
016C 0AF3 SBC R15,R19
016D 9503 INC R16
016E 958A DEC R24
016F F7A1 BNE 0x0164
0170 F416 BRTC 0x0173
0171 2D0E MOV R16,R14
0172 2D1F MOV R17,R15
0173 9189 LD R24,Y+
0174 90F9 LD R15,Y+
0175 90E9 LD R14,Y+
0176 9508 RET
mod8u:
0177 9468 BSET 6
0178 C001 RJMP xdiv8u
div8u:
0179 94E8 BCLR 6
xdiv8u:
017A 932A ST R18,-Y
017B 92FA ST R15,-Y
017C 92EA ST R14,-Y
017D 24FF CLR R15
017E 24EE CLR R14
017F E120 LDI R18,0x10
0180 0F00 LSL R16
0181 1CFF ROL R15
0182 1CEE ROL R14
0183 16E1 CP R14,R17
0184 F010 BCS 0x0187
0185 1AE1 SUB R14,R17
0186 9503 INC R16
0187 952A DEC R18
0188 F7B9 BNE 0x0180
0189 F40E BRTC 0x018B
018A 2D0E MOV R16,R14
018B 90E9 LD R14,Y+
018C 90F9 LD R15,Y+
018D 9129 LD R18,Y+
018E 9508 RET
empy32s:
empy32u:
018F 940E01E1 CALL long_prolog
0191 927F PUSH R7
0192 940E01FA CALL tstzero1
0194 F139 BEQ 0x01BC
0195 2477 CLR R7
0196 940E0200 CALL tstzero2
0198 F419 BNE 0x019C
0199 018C MOVW R16,R24
019A 019D MOVW R18,R26
019B C020 RJMP 0x01BC
019C 9F08 MUL R16,R24
019D 2CB0 MOV R11,R0
019E 2CA1 MOV R10,R1
019F 9F28 MUL R18,R24
01A0 2C90 MOV R9,R0
01A1 2C81 MOV R8,R1
01A2 9F18 MUL R17,R24
01A3 0CA0 ADD R10,R0
01A4 1C91 ADC R9,R1
01A5 1C87 ADC R8,R7
01A6 9F09 MUL R16,R25
01A7 0CA0 ADD R10,R0
01A8 1C91 ADC R9,R1
01A9 1C87 ADC R8,R7
01AA 9F19 MUL R17,R25
01AB 0C90 ADD R9,R0
01AC 1C81 ADC R8,R1
01AD 9F0A MUL R16,R26
01AE 0C90 ADD R9,R0
01AF 1C81 ADC R8,R1
01B0 9F38 MUL R19,R24
01B1 0C80 ADD R8,R0
01B2 9F29 MUL R18,R25
01B3 0C80 ADD R8,R0
01B4 9F1A MUL R17,R26
01B5 0C80 ADD R8,R0
01B6 9F0B MUL R16,R27
01B7 0C80 ADD R8,R0
01B8 2D0B MOV R16,R11
01B9 2D1A MOV R17,R10
01BA 2D29 MOV R18,R9
01BB 2D38 MOV R19,R8
01BC 907F POP R7
01BD 940C01EF JMP long_epilog
pop_gset2:
01BF E0E2 LDI R30,2
01C0 940C01CE JMP pop
push_gset5:
01C2 92FA ST R15,-Y
01C3 92EA ST R14,-Y
push_gset4:
01C4 92DA ST R13,-Y
01C5 92CA ST R12,-Y
push_gset3:
01C6 92BA ST R11,-Y
01C7 92AA ST R10,-Y
push_gset2:
01C8 937A ST R23,-Y
01C9 936A ST R22,-Y
push_gset1:
01CA 935A ST R21,-Y
01CB 934A ST R20,-Y
01CC 9508 RET
pop_gset1:
01CD E0E1 LDI R30,1
pop:
01CE 9149 LD R20,Y+
01CF 9159 LD R21,Y+
01D0 FDE0 SBRC R30,0
01D1 9508 RET
01D2 9169 LD R22,Y+
01D3 9179 LD R23,Y+
01D4 FDE1 SBRC R30,1
01D5 9508 RET
01D6 90A9 LD R10,Y+
01D7 90B9 LD R11,Y+
01D8 FDE2 SBRC R30,2
01D9 9508 RET
01DA 90C9 LD R12,Y+
01DB 90D9 LD R13,Y+
01DC FDE3 SBRC R30,3
01DD 9508 RET
01DE 90E9 LD R14,Y+
01DF 90F9 LD R15,Y+
01E0 9508 RET
long_prolog:
01E1 928A ST R8,-Y
01E2 929A ST R9,-Y
01E3 92AA ST R10,-Y
01E4 92BA ST R11,-Y
01E5 93EA ST R30,-Y
01E6 938A ST R24,-Y
01E7 939A ST R25,-Y
01E8 93AA ST R26,-Y
01E9 93BA ST R27,-Y
01EA 8589 LDD R24,Y+9
01EB 859A LDD R25,Y+10
01EC 85AB LDD R26,Y+11
01ED 85BC LDD R27,Y+12
01EE 9508 RET
long_epilog:
01EF 91B9 LD R27,Y+
01F0 91A9 LD R26,Y+
01F1 9199 LD R25,Y+
01F2 9189 LD R24,Y+
01F3 91E9 LD R30,Y+
01F4 90B9 LD R11,Y+
01F5 90A9 LD R10,Y+
01F6 9099 LD R9,Y+
01F7 9089 LD R8,Y+
01F8 9624 ADIW R28,4
01F9 9508 RET
tstzero1:
01FA 27EE CLR R30
01FB 2BE0 OR R30,R16
01FC 2BE1 OR R30,R17
01FD 2BE2 OR R30,R18
01FE 2BE3 OR R30,R19
01FF 9508 RET
tstzero2:
0200 27EE CLR R30
0201 2BE8 OR R30,R24
0202 2BE9 OR R30,R25
0203 2BEA OR R30,R26
0204 2BEB OR R30,R27
0205 9508 RET
lsr32:
0206 920F PUSH R0
0207 9009 LD R0,Y+
0208 2000 TST R0
0209 F031 BEQ 0x0210
020A 9536 LSR R19
020B 9527 ROR R18
020C 9517 ROR R17
020D 9507 ROR R16
020E 940A DEC R0
020F CFF8 RJMP 0x0208
0210 900F POP R0
0211 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -