📄 adc.lst
字号:
(0160) 输出数据: 数据处理函数,将转换的值转换为4位BCD码。
(0161) ********************************************************/
(0162) void process (uint i ,uchar j)
(0163) {
(0164) if (0 == j)
00C6 2366 TST R22
00C7 F009 BEQ 0x00C9
00C8 C02A RJMP 0x00F3
(0165) {
(0166) buf[10] = i/1000 + '0'; i=i%1000;
00C9 EE28 LDI R18,0xE8
00CA E033 LDI R19,3
00CB 018A MOVW R16,R20
00CC D0A2 RCALL div16u
00CD 01C8 MOVW R24,R16
00CE 96C0 ADIW R24,0x30
00CF 9380006A STS 0x6A,R24
00D1 EE28 LDI R18,0xE8
00D2 E033 LDI R19,3
00D3 018A MOVW R16,R20
00D4 D098 RCALL mod16u
00D5 01A8 MOVW R20,R16
(0167) buf[12] = i/100 + '0'; i=i%100;
00D6 E624 LDI R18,0x64
00D7 E030 LDI R19,0
00D8 D096 RCALL div16u
00D9 01C8 MOVW R24,R16
00DA 96C0 ADIW R24,0x30
00DB 9380006C STS 0x6C,R24
00DD E624 LDI R18,0x64
00DE E030 LDI R19,0
00DF 018A MOVW R16,R20
00E0 D08C RCALL mod16u
00E1 01A8 MOVW R20,R16
(0168) buf[13] = i/10 + '0'; i=i%10;
00E2 E02A LDI R18,0xA
00E3 E030 LDI R19,0
00E4 D08A RCALL div16u
00E5 01C8 MOVW R24,R16
00E6 96C0 ADIW R24,0x30
00E7 9380006D STS 0x6D,R24
00E9 E02A LDI R18,0xA
00EA E030 LDI R19,0
00EB 018A MOVW R16,R20
00EC D080 RCALL mod16u
00ED 01A8 MOVW R20,R16
(0169) buf[14] = i + '0';
00EE 01CA MOVW R24,R20
00EF 96C0 ADIW R24,0x30
00F0 9380006E STS 0x6E,R24
(0170) }
00F2 C029 RJMP 0x011C
(0171) else
(0172) {
(0173) buf[26] = i/1000 + '0'; i=i%1000;
00F3 EE28 LDI R18,0xE8
00F4 E033 LDI R19,3
00F5 018A MOVW R16,R20
00F6 D078 RCALL div16u
00F7 01C8 MOVW R24,R16
00F8 96C0 ADIW R24,0x30
00F9 9380007A STS 0x7A,R24
00FB EE28 LDI R18,0xE8
00FC E033 LDI R19,3
00FD 018A MOVW R16,R20
00FE D06E RCALL mod16u
00FF 01A8 MOVW R20,R16
(0174) buf[28] = i/100 + '0'; i=i%100;
0100 E624 LDI R18,0x64
0101 E030 LDI R19,0
0102 D06C RCALL div16u
0103 01C8 MOVW R24,R16
0104 96C0 ADIW R24,0x30
0105 9380007C STS 0x7C,R24
0107 E624 LDI R18,0x64
0108 E030 LDI R19,0
0109 018A MOVW R16,R20
010A D062 RCALL mod16u
010B 01A8 MOVW R20,R16
(0175) buf[29] = i/10 + '0'; i=i%10;
010C E02A LDI R18,0xA
010D E030 LDI R19,0
010E D060 RCALL div16u
010F 01C8 MOVW R24,R16
0110 96C0 ADIW R24,0x30
0111 9380007D STS 0x7D,R24
0113 E02A LDI R18,0xA
0114 E030 LDI R19,0
0115 018A MOVW R16,R20
0116 D056 RCALL mod16u
0117 01A8 MOVW R20,R16
(0176) buf[30] = i + '0';
0118 01CA MOVW R24,R20
0119 96C0 ADIW R24,0x30
011A 9380007E STS 0x7E,R24
(0177) }
011C D07C RCALL pop_gset2
011D 9508 RET
_main:
buflogo --> Y+0
011E 97A1 SBIW R28,0x21
(0178) }
(0179) //*****************主程序**********************************
(0180) void main (void)
(0181) {
(0182) uchar buflogo[]=" welcome! www.itsn.cn! ";
011F E28A LDI R24,0x2A
0120 E090 LDI R25,0
0121 01FE MOVW R30,R28
0122 E201 LDI R16,0x21
0123 E010 LDI R17,0
0124 93FA ST R31,-Y
0125 93EA ST R30,-Y
0126 939A ST R25,-Y
0127 938A ST R24,-Y
0128 D091 RCALL asgncblk
(0183)
(0184) Init_mcu(); //单片机初始化
0129 DF82 RCALL _Init_mcu
(0185) Init_lcd(); //lcd初始化
012A DF58 RCALL _Init_lcd
(0186) Init_adc(); //adc初始化
012B DF87 RCALL _Init_adc
(0187)
(0188) display_lcd(buflogo); //显示LOGO
012C 018E MOVW R16,R28
012D DF60 RCALL _display_lcd
(0189) DelaymS(300); //长延迟
012E E20C LDI R16,0x2C
012F E011 LDI R17,1
0130 DF25 RCALL _DelaymS
(0190) display_lcd(buf); //刷新显示一屏
0131 E600 LDI R16,0x60
0132 E010 LDI R17,0
0133 DF5A RCALL _display_lcd
0134 C035 RJMP 0x016A
(0191)
(0192) while(1) //无限循环执行
(0193) {
(0194) //DelaymS(5); //延迟
(0195)
(0196) ADMUX = 0b11000000; //选择通道1
0135 EC80 LDI R24,0xC0
0136 B987 OUT 0x07,R24
(0197) ADCSRA = 0b11101011;
0137 EE8B LDI R24,0xEB
0138 B986 OUT 0x06,R24
(0198) DelaymS(5);
0139 E005 LDI R16,5
013A E010 LDI R17,0
013B DF1A RCALL _DelaymS
(0199) process (adc_convert()*5 / 2 , 0); //启动一次ADC转换,并进行数据修正及数据转换
013C DF7B RCALL _adc_convert
013D 0118 MOVW R2,R16
013E 2722 CLR R18
013F E005 LDI R16,5
0140 E010 LDI R17,0
0141 932F PUSH R18
0142 933F PUSH R19
0143 0191 MOVW R18,R2
0144 D044 RCALL empy16s
0145 0118 MOVW R2,R16
0146 913F POP R19
0147 912F POP R18
0148 9436 LSR R3
0149 9427 ROR R2
014A 0181 MOVW R16,R2
014B DF77 RCALL _process
(0200) ADCSRA = 0b01101011; //关闭ADC
014C E68B LDI R24,0x6B
014D B986 OUT 0x06,R24
(0201)
(0202) ADMUX = 0b11000001; //选择通道2
014E EC81 LDI R24,0xC1
014F B987 OUT 0x07,R24
(0203) ADCSRA = 0b11101011;
0150 EE8B LDI R24,0xEB
0151 B986 OUT 0x06,R24
(0204) DelaymS(5);
0152 E005 LDI R16,5
0153 E010 LDI R17,0
0154 DF01 RCALL _DelaymS
(0205) process (adc_convert()*5 / 2 , 1);
0155 DF62 RCALL _adc_convert
0156 0118 MOVW R2,R16
0157 E021 LDI R18,1
0158 E005 LDI R16,5
0159 E010 LDI R17,0
015A 932F PUSH R18
015B 933F PUSH R19
015C 0191 MOVW R18,R2
015D D02B RCALL empy16s
015E 0118 MOVW R2,R16
015F 913F POP R19
0160 912F POP R18
0161 9436 LSR R3
0162 9427 ROR R2
0163 0181 MOVW R16,R2
0164 DF5E RCALL _process
(0206) ADCSRA = 0b01101011; //关闭ADC
0165 E68B LDI R24,0x6B
0166 B986 OUT 0x06,R24
(0207)
(0208) display_lcd(buf); //刷新显示一屏
FILE: <library>
0167 E600 LDI R16,0x60
0168 E010 LDI R17,0
0169 DF24 RCALL _display_lcd
016A CFCA RJMP 0x0135
016B 96A1 ADIW R28,0x21
016C 9508 RET
mod16u:
016D 9468 BSET 6
016E C001 RJMP xdiv16u
div16u:
016F 94E8 BCLR 6
xdiv16u:
0170 92EA ST R14,-Y
0171 92FA ST R15,-Y
0172 938A ST R24,-Y
0173 24EE CLR R14
0174 24FF CLR R15
0175 E180 LDI R24,0x10
0176 0F00 LSL R16
0177 1F11 ROL R17
0178 1CEE ROL R14
0179 1CFF ROL R15
017A 16E2 CP R14,R18
017B 06F3 CPC R15,R19
017C F018 BCS 0x0180
017D 1AE2 SUB R14,R18
017E 0AF3 SBC R15,R19
017F 9503 INC R16
0180 958A DEC R24
0181 F7A1 BNE 0x0176
0182 F416 BRTC 0x0185
0183 2D0E MOV R16,R14
0184 2D1F MOV R17,R15
0185 9189 LD R24,Y+
0186 90F9 LD R15,Y+
0187 90E9 LD R14,Y+
0188 9508 RET
empy16s:
0189 920A ST R0,-Y
018A 921A ST R1,-Y
018B 938A ST R24,-Y
018C 939A ST R25,-Y
018D 9F02 MUL R16,R18
018E 01C0 MOVW R24,R0
018F 9F12 MUL R17,R18
0190 0D90 ADD R25,R0
0191 9F03 MUL R16,R19
0192 0D90 ADD R25,R0
0193 018C MOVW R16,R24
0194 9199 LD R25,Y+
0195 9189 LD R24,Y+
0196 9019 LD R1,Y+
0197 9009 LD R0,Y+
0198 9508 RET
pop_gset2:
0199 E0E2 LDI R30,2
019A C00C RJMP pop
push_gset5:
019B 92FA ST R15,-Y
019C 92EA ST R14,-Y
push_gset4:
019D 92DA ST R13,-Y
019E 92CA ST R12,-Y
push_gset3:
019F 92BA ST R11,-Y
01A0 92AA ST R10,-Y
push_gset2:
01A1 937A ST R23,-Y
01A2 936A ST R22,-Y
push_gset1:
01A3 935A ST R21,-Y
01A4 934A ST R20,-Y
01A5 9508 RET
pop_gset1:
01A6 E0E1 LDI R30,1
pop:
01A7 9149 LD R20,Y+
01A8 9159 LD R21,Y+
01A9 FDE0 SBRC R30,0
01AA 9508 RET
01AB 9169 LD R22,Y+
01AC 9179 LD R23,Y+
01AD FDE1 SBRC R30,1
01AE 9508 RET
01AF 90A9 LD R10,Y+
01B0 90B9 LD R11,Y+
01B1 FDE2 SBRC R30,2
01B2 9508 RET
01B3 90C9 LD R12,Y+
01B4 90D9 LD R13,Y+
01B5 FDE3 SBRC R30,3
01B6 9508 RET
01B7 90E9 LD R14,Y+
01B8 90F9 LD R15,Y+
01B9 9508 RET
asgncblk:
01BA 93AA ST R26,-Y
01BB 93BA ST R27,-Y
01BC 93EA ST R30,-Y
01BD 93FA ST R31,-Y
01BE 920A ST R0,-Y
01BF 81AF LDD R26,Y+7
01C0 85B8 LDD R27,Y+8
01C1 81ED LDD R30,Y+5
01C2 81FE LDD R31,Y+6
01C3 3000 CPI R16,0
01C4 0701 CPC R16,R17
01C5 F031 BEQ 0x01CC
01C6 95C8 LPM
01C7 920D ST R0,X+
01C8 9631 ADIW R30,1
01C9 5001 SUBI R16,1
01CA 4010 SBCI R17,0
01CB CFF7 RJMP 0x01C3
01CC 9009 LD R0,Y+
01CD 91F9 LD R31,Y+
01CE 91E9 LD R30,Y+
01CF 91B9 LD R27,Y+
01D0 91A9 LD R26,Y+
01D1 9624 ADIW R28,4
01D2 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -