📄 test-adc.lst
字号:
01F7 924A ST R4,-Y
01F8 923A ST R3,-Y
01F9 922A ST R2,-Y
01FA 018A MOVW R16,R20
01FB 019B MOVW R18,R22
01FC 940E02BF CALL empy32u
01FE E08A LDI R24,0xA
01FF E090 LDI R25,0
0200 938A ST R24,-Y
0201 940E0339 CALL lsr32
0203 0168 MOVW R12,R16
(0047) for(i=0;i<3;i++)
0204 24AA CLR R10
0205 C019 RJMP 0x021F
(0048) {
(0049) adc_show[3-i]=temp%10+0x30; //转换电压值用来在LCD上显示
0206 2C2A MOV R2,R10
0207 2433 CLR R3
0208 E0E3 LDI R30,3
0209 E0F0 LDI R31,0
020A 19E2 SUB R30,R2
020B 09F3 SBC R31,R3
020C E785 LDI R24,0x75
020D E090 LDI R25,0
020E 0FE8 ADD R30,R24
020F 1FF9 ADC R31,R25
0210 E02A LDI R18,0xA
0211 E030 LDI R19,0
0212 0186 MOVW R16,R12
0213 940E02A3 CALL mod16u
0215 01C8 MOVW R24,R16
0216 96C0 ADIW R24,0x30
0217 8380 STD Z+0,R24
(0050) temp=temp/10;
0218 E02A LDI R18,0xA
0219 E030 LDI R19,0
021A 0186 MOVW R16,R12
021B 940E02A5 CALL div16u
021D 0168 MOVW R12,R16
021E 94A3 INC R10
021F 2D8A MOV R24,R10
0220 3083 CPI R24,3
0221 F320 BCS 0x0206
(0051) }
(0052) adc_show[0]=adc_show[1];
0222 90200076 LDS R2,adc_show+1
0224 92200075 STS adc_show,R2
(0053) adc_show[1]='.';
0226 E28E LDI R24,0x2E
0227 93800076 STS adc_show+1,R24
(0054) adc_show[4]='V';
0229 E586 LDI R24,0x56
022A 93800079 STS 0x79,R24
(0055) adc_show[5]=0; //数组结束标记
022C 2422 CLR R2
022D 9220007A STS 0x7A,R2
022F 940E02F2 CALL pop_gset4
0231 9508 RET
_int0_isr:
0232 938A ST R24,-Y
0233 939A ST R25,-Y
0234 B78F IN R24,0x3F
0235 938A ST R24,-Y
(0056) }
(0057)
(0058) #pragma interrupt_handler int0_isr:2
(0059) void int0_isr(void)
(0060) {
(0061) extint_count++;
0236 91800060 LDS R24,extint_count
0238 91900061 LDS R25,extint_count+1
023A 9601 ADIW R24,1
023B 93900061 STS extint_count+1,R25
023D 93800060 STS extint_count,R24
(0062) if (act_flag!=1)
023F 91800062 LDS R24,act_flag
0241 3081 CPI R24,1
0242 F019 BEQ 0x0246
(0063) {
(0064) act_flag = 1;
0243 E081 LDI R24,1
0244 93800062 STS act_flag,R24
(0065) }
0246 9189 LD R24,Y+
0247 BF8F OUT 0x3F,R24
0248 9199 LD R25,Y+
0249 9189 LD R24,Y+
024A 9518 RETI
(0066) }
(0067) void adc_init(void)
(0068) {
(0069) ADMUX = (1<<REFS1)|
_adc_init:
024B EC80 LDI R24,0xC0
024C B987 OUT 0x07,R24
(0070) (1<<REFS0)| //选择内部2.56v作为参考电压
(0071) 0x00; //使用ad转换0通道
(0072) //ADLAR = 0,转换结果选择右对齐
(0073) ADCSRA = (1<<ADEN)| //ADC使能
024D ED8E LDI R24,0xDE
024E B986 OUT 0x06,R24
024F 9508 RET
(0074) (1<<ADSC)| //开始一次ad转换
(0075) (1<<ADIF)| //写1,将ADIF位清0
(0076) (1<<ADIE)| //允许ADC中断
(0077) 0x06; //时钟分频系数为64
(0078) }
(0079) //call this routine to initialize all peripherals
(0080) void init_devices(void)
(0081) {
(0082) CLI(); //关闭全局中断
_init_devices:
0250 94F8 BCLR 7
(0083) port_init(); //CPU端口初始化
0251 DF6D RCALL _port_init
(0084) /**/
(0085) MCUCR = 0x02; //INT0引脚上的下降沿触发中断
0252 E082 LDI R24,2
0253 BF85 OUT 0x35,R24
(0086) GICR = 0x40; //外部中断0请求使能
0254 E480 LDI R24,0x40
0255 BF8B OUT 0x3B,R24
(0087) /**/
(0088) /** /
(0089) MCUCR = 0x00; //INT0引脚上的低电平触发中断
(0090) GICR = 0x40; //外部中断0请求使能
(0091) /**/
(0092) /** /
(0093) MCUCR = 0x01; //INT0引脚上的上升沿和下降沿都触发中断
(0094) GICR = 0x40; //外部中断0请求使能
(0095) /**/
(0096) /** /
(0097) MCUCR = 0x03; //INT0引脚上的上升沿触发中断
(0098) GICR = 0x40; //外部中断0请求使能
(0099) /**/
(0100) adc_init();
0256 DFF4 RCALL _adc_init
(0101) SEI(); //打开全局中断
0257 9478 BSET 7
0258 9508 RET
_main:
temp --> Y+3
temp_show --> Y+2
i --> R20
0259 9727 SBIW R28,7
(0102)
(0103) }
(0104) void main(void)
(0105) {
(0106) char temp_show[5]; //定义数组用作在液晶屏上进行显示
(0107) unsigned char i;
(0108) unsigned int temp;
(0109) for(i=0;i<5;i++)
025A 2744 CLR R20
025B C009 RJMP 0x0265
(0110) {
(0111) temp_show[i] = 0;
025C 01CE MOVW R24,R28
025D 9602 ADIW R24,2
025E 2FE4 MOV R30,R20
025F 27FF CLR R31
0260 0FE8 ADD R30,R24
0261 1FF9 ADC R31,R25
0262 2422 CLR R2
0263 8220 STD Z+0,R2
0264 9543 INC R20
0265 3045 CPI R20,5
0266 F3A8 BCS 0x025C
(0112) }
(0113) temp_show[4] = 0xff; //显示结束标志
0267 EF8F LDI R24,0xFF
0268 838E STD Y+6,R24
(0114) /**/
(0115) init_devices();
0269 DFE6 RCALL _init_devices
(0116) LCDReady();
026A 940E0108 CALL _LCDReady
(0117) LcdInit(); //LCD初始化
026C 940E012A CALL _LcdInit
(0118) CharsWrite(0,1,"AD0 VOLTAGE:"); //在LCD的第一行显示"AD0 VOLTAGE:"
026E E688 LDI R24,0x68
026F E090 LDI R25,0
0270 8399 STD Y+1,R25
0271 8388 STD Y+0,R24
0272 E021 LDI R18,1
0273 2700 CLR R16
0274 940E013C CALL _CharsWrite
(0119) CharsWrite(0,2,"0.0V"); //在第二行显示“0.0V”
0276 E683 LDI R24,0x63
0277 E090 LDI R25,0
0278 8399 STD Y+1,R25
0279 8388 STD Y+0,R24
027A E022 LDI R18,2
027B 2700 CLR R16
027C 940E013C CALL _CharsWrite
(0120) uart_init(); //串口初始化
027E 940E0084 CALL _uart_init
(0121) delay_ms(1000);
0280 EE08 LDI R16,0xE8
0281 E013 LDI R17,3
0282 940E01B0 CALL _delay_ms
0284 C01B RJMP 0x02A0
(0122) /**/
(0123) while(1)
(0124) {
(0125) ClearLcd(); //清屏LCD
0285 940E008D CALL _ClearLcd
(0126) delay_us(80); //等待清屏操作完成
0287 E500 LDI R16,0x50
0288 E010 LDI R17,0
0289 940E0197 CALL _delay_us
(0127) CharsWrite(0,1,"AD0 VOLTAGE:"); //在LCD的第一行显示"AD0 VOLTAGE:"
028B E688 LDI R24,0x68
028C E090 LDI R25,0
028D 8399 STD Y+1,R25
028E 8388 STD Y+0,R24
028F E021 LDI R18,1
0290 2700 CLR R16
0291 940E013C CALL _CharsWrite
(0128) data_con(); //将ad转换值转换为电压值
0293 DF56 RCALL _data_con
(0129) CharsWrite(0,2,adc_show); //在LCD上显示转换电压值
0294 E785 LDI R24,0x75
0295 E090 LDI R25,0
0296 8399 STD Y+1,R25
0297 8388 STD Y+0,R24
0298 E022 LDI R18,2
0299 2700 CLR R16
029A 940E013C CALL _CharsWrite
(0130) delay_ms(300);
FILE: <library>
029C E20C LDI R16,0x2C
029D E011 LDI R17,1
029E 940E01B0 CALL _delay_ms
02A0 CFE4 RJMP 0x0285
02A1 9627 ADIW R28,7
02A2 9508 RET
mod16u:
02A3 9468 BSET 6
02A4 C001 RJMP xdiv16u
div16u:
02A5 94E8 BCLR 6
xdiv16u:
02A6 92EA ST R14,-Y
02A7 92FA ST R15,-Y
02A8 938A ST R24,-Y
02A9 24EE CLR R14
02AA 24FF CLR R15
02AB E180 LDI R24,0x10
02AC 0F00 LSL R16
02AD 1F11 ROL R17
02AE 1CEE ROL R14
02AF 1CFF ROL R15
02B0 16E2 CP R14,R18
02B1 06F3 CPC R15,R19
02B2 F018 BCS 0x02B6
02B3 1AE2 SUB R14,R18
02B4 0AF3 SBC R15,R19
02B5 9503 INC R16
02B6 958A DEC R24
02B7 F7A1 BNE 0x02AC
02B8 F416 BRTC 0x02BB
02B9 2D0E MOV R16,R14
02BA 2D1F MOV R17,R15
02BB 9189 LD R24,Y+
02BC 90F9 LD R15,Y+
02BD 90E9 LD R14,Y+
02BE 9508 RET
empy32u:
empy32s:
02BF 940E0314 CALL long_prolog
02C1 927F PUSH R7
02C2 940E032D CALL tstzero1
02C4 F139 BEQ 0x02EC
02C5 2477 CLR R7
02C6 940E0333 CALL tstzero2
02C8 F419 BNE 0x02CC
02C9 018C MOVW R16,R24
02CA 019D MOVW R18,R26
02CB C020 RJMP 0x02EC
02CC 9F08 MUL R16,R24
02CD 2CB0 MOV R11,R0
02CE 2CA1 MOV R10,R1
02CF 9F28 MUL R18,R24
02D0 2C90 MOV R9,R0
02D1 2C81 MOV R8,R1
02D2 9F18 MUL R17,R24
02D3 0CA0 ADD R10,R0
02D4 1C91 ADC R9,R1
02D5 1C87 ADC R8,R7
02D6 9F09 MUL R16,R25
02D7 0CA0 ADD R10,R0
02D8 1C91 ADC R9,R1
02D9 1C87 ADC R8,R7
02DA 9F19 MUL R17,R25
02DB 0C90 ADD R9,R0
02DC 1C81 ADC R8,R1
02DD 9F0A MUL R16,R26
02DE 0C90 ADD R9,R0
02DF 1C81 ADC R8,R1
02E0 9F38 MUL R19,R24
02E1 0C80 ADD R8,R0
02E2 9F29 MUL R18,R25
02E3 0C80 ADD R8,R0
02E4 9F1A MUL R17,R26
02E5 0C80 ADD R8,R0
02E6 9F0B MUL R16,R27
02E7 0C80 ADD R8,R0
02E8 2D0B MOV R16,R11
02E9 2D1A MOV R17,R10
02EA 2D29 MOV R18,R9
02EB 2D38 MOV R19,R8
02EC 907F POP R7
02ED 940C0322 JMP long_epilog
pop_gset2:
02EF E0E2 LDI R30,2
02F0 940C0301 JMP pop
pop_gset4:
02F2 E0E8 LDI R30,0x8
02F3 940C0301 JMP pop
push_gset5:
02F5 92FA ST R15,-Y
02F6 92EA ST R14,-Y
push_gset4:
02F7 92DA ST R13,-Y
02F8 92CA ST R12,-Y
push_gset3:
02F9 92BA ST R11,-Y
02FA 92AA ST R10,-Y
push_gset2:
02FB 937A ST R23,-Y
02FC 936A ST R22,-Y
push_gset1:
02FD 935A ST R21,-Y
02FE 934A ST R20,-Y
02FF 9508 RET
pop_gset1:
0300 E0E1 LDI R30,1
pop:
0301 9149 LD R20,Y+
0302 9159 LD R21,Y+
0303 FDE0 SBRC R30,0
0304 9508 RET
0305 9169 LD R22,Y+
0306 9179 LD R23,Y+
0307 FDE1 SBRC R30,1
0308 9508 RET
0309 90A9 LD R10,Y+
030A 90B9 LD R11,Y+
030B FDE2 SBRC R30,2
030C 9508 RET
030D 90C9 LD R12,Y+
030E 90D9 LD R13,Y+
030F FDE3 SBRC R30,3
0310 9508 RET
0311 90E9 LD R14,Y+
0312 90F9 LD R15,Y+
0313 9508 RET
long_prolog:
0314 928A ST R8,-Y
0315 929A ST R9,-Y
0316 92AA ST R10,-Y
0317 92BA ST R11,-Y
0318 93EA ST R30,-Y
0319 938A ST R24,-Y
031A 939A ST R25,-Y
031B 93AA ST R26,-Y
031C 93BA ST R27,-Y
031D 8589 LDD R24,Y+9
031E 859A LDD R25,Y+10
031F 85AB LDD R26,Y+11
0320 85BC LDD R27,Y+12
0321 9508 RET
long_epilog:
0322 91B9 LD R27,Y+
0323 91A9 LD R26,Y+
0324 9199 LD R25,Y+
0325 9189 LD R24,Y+
0326 91E9 LD R30,Y+
0327 90B9 LD R11,Y+
0328 90A9 LD R10,Y+
0329 9099 LD R9,Y+
032A 9089 LD R8,Y+
032B 9624 ADIW R28,4
032C 9508 RET
tstzero1:
032D 27EE CLR R30
032E 2BE0 OR R30,R16
032F 2BE1 OR R30,R17
0330 2BE2 OR R30,R18
0331 2BE3 OR R30,R19
0332 9508 RET
tstzero2:
0333 27EE CLR R30
0334 2BE8 OR R30,R24
0335 2BE9 OR R30,R25
0336 2BEA OR R30,R26
0337 2BEB OR R30,R27
0338 9508 RET
lsr32:
0339 920F PUSH R0
033A 9009 LD R0,Y+
033B 2000 TST R0
033C F031 BEQ 0x0343
033D 9536 LSR R19
033E 9527 ROR R18
033F 9517 ROR R17
0340 9507 ROR R16
0341 940A DEC R0
0342 CFF8 RJMP 0x033B
0343 900F POP R0
0344 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -