📄 adc-1602.lis
字号:
0314 .dbfile D:\16实验程序\模数转换\adc_1602\ADC-1602.c
0314 .dbfunc e main _main fI
0314 ; adc_h1 -> <dead>
0314 ; adc_l1 -> <dead>
0314 ; ten_4 -> <dead>
0314 ; adc_h0 -> R12,R13
0314 ; adc_l0 -> R10,R11
0314 ; adc_data1 -> R20,R21
0314 ; ten_1 -> R10
0314 ; ten_2 -> R12
0314 ; adc_data0 -> R22,R23
0314 ; ten_3 -> R14
0314 ; i -> R20
.even
0314 _main::
0314 2497 sbiw R28,4
0316 .dbline -1
0316 .dbline 16
0316 ; //ADC转换程序
0316 ; //通过电位器W1来调节ADC0的电压输入
0316 ; //采集的电压值用1602液晶显示
0316 ; #include<iom16v.h>
0316 ; #include <macros.h>
0316 ; #include"1602.h"
0316 ; #define uchar unsigned char
0316 ; #define uint unsigned int
0316 ;
0316 ; uchar adc_0[]={"ADC_0: . V"};
0316 ; uchar adc_1[]={"ADC_1: . V"};
0316 ;
0316 ; //ADC测试,使用1602显示ADC0和ADC1的值
0316 ; //主函数
0316 ; main()
0316 ; {
0316 .dbline 21
0316 ; uchar ten_1,ten_2,ten_3,ten_4,i;
0316 ; uint adc_data0,adc_l0,adc_h0,adc_data1,adc_l1,adc_h1;
0316 ;
0316 ; //初始化端口
0316 ; DDRA=0xf0;
0316 80EF ldi R24,240
0318 8ABB out 0x1a,R24
031A .dbline 22
031A ; PORTA=0x00;
031A 2224 clr R2
031C 2BBA out 0x1b,R2
031E .dbline 23
031E ; DDRB=0x00;
031E 27BA out 0x17,R2
0320 .dbline 24
0320 ; DDRD=0xff;
0320 8FEF ldi R24,255
0322 81BB out 0x11,R24
0324 .dbline 25
0324 ; PORTD=0x00;
0324 22BA out 0x12,R2
0326 .dbline 27
0326 ; //1602初始化
0326 ; LcdInit();
0326 BCDE xcall _LcdInit
0328 .dbline 28
0328 ; WriteChar(1,2,11,adc_0);
0328 80E0 ldi R24,<_adc_0
032A 90E0 ldi R25,>_adc_0
032C 9B83 std y+3,R25
032E 8A83 std y+2,R24
0330 8BE0 ldi R24,11
0332 90E0 ldi R25,0
0334 9983 std y+1,R25
0336 8883 std y+0,R24
0338 22E0 ldi R18,2
033A 01E0 ldi R16,1
033C BADF xcall _WriteChar
033E .dbline 29
033E ; WriteChar(2,2,11,adc_1);
033E 80E0 ldi R24,<_adc_1
0340 90E0 ldi R25,>_adc_1
0342 9B83 std y+3,R25
0344 8A83 std y+2,R24
0346 8BE0 ldi R24,11
0348 90E0 ldi R25,0
034A 9983 std y+1,R25
034C 8883 std y+0,R24
034E 22E0 ldi R18,2
0350 02E0 ldi R16,2
0352 AFDF xcall _WriteChar
0354 88C0 xjmp L46
0356 L45:
0356 .dbline 32
0356 ;
0356 ; while(1)
0356 ; {
0356 .dbline 34
0356 ; //取ADC_0
0356 ; ADCSR=0x00;
0356 2224 clr R2
0358 26B8 out 0x6,R2
035A .dbline 35
035A ; ADMUX=0x40;
035A 80E4 ldi R24,64
035C 87B9 out 0x7,R24
035E .dbline 36
035E ; ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|0x07; //128分频,连续转换
035E 87EE ldi R24,231
0360 86B9 out 0x6,R24
0362 .dbline 37
0362 ; s_ms(500); //延时很重要,给出转换的时间
0362 04EF ldi R16,500
0364 11E0 ldi R17,1
0366 4CDE xcall _s_ms
0368 .dbline 38
0368 ; adc_l0=ADCL;
0368 A4B0 in R10,0x4
036A BB24 clr R11
036C .dbline 39
036C ; adc_h0=ADCH;
036C C5B0 in R12,0x5
036E DD24 clr R13
0370 .dbline 40
0370 ; adc_data0=adc_h0<<8|adc_l0;
0370 B601 movw R22,R12
0372 762F mov R23,R22
0374 6627 clr R22
0376 6A29 or R22,R10
0378 7B29 or R23,R11
037A .dbline 41
037A ; adc_data0=adc_data0>>1; //放弃一位的精度
037A 7695 lsr R23
037C 6795 ror R22
037E .dbline 42
037E ; adc_data0-=35; //修正
037E 6352 subi R22,35
0380 7040 sbci R23,0
0382 .dbline 54
0382 ;
0382 ; //取ADC_1
0382 ; //ADCSR=0x00;
0382 ; //ADMUX=0x41;
0382 ; //ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|0x07;
0382 ; //s_ms(500);
0382 ; //adc_l1=ADCL;
0382 ; //adc_h1=ADCH;
0382 ; //adc_data1=adc_h1<<8|adc_l1;
0382 ; //adc_data1=adc_data1>>1;
0382 ; //adc_data1-=35;
0382 ; adc_data1=500;
0382 44EF ldi R20,500
0384 51E0 ldi R21,1
0386 .dbline 57
0386 ;
0386 ; //显示ADC0
0386 ; ten_3=(adc_data0)/100;
0386 24E6 ldi R18,100
0388 30E0 ldi R19,0
038A 8B01 movw R16,R22
038C 0E940000 xcall div16u
0390 E02E mov R14,R16
0392 .dbline 58
0392 ; ten_2=(adc_data0-(ten_3*100))/10;
0392 84E6 ldi R24,100
0394 8E9D mul R24,R14
0396 8B01 movw R16,R22
0398 0019 sub R16,R0
039A 1109 sbc R17,R1
039C 2AE0 ldi R18,10
039E 30E0 ldi R19,0
03A0 0E940000 xcall div16u
03A4 C02E mov R12,R16
03A6 .dbline 59
03A6 ; ten_1=adc_data0-(ten_3*100)-ten_2*10;
03A6 84E6 ldi R24,100
03A8 8E9D mul R24,R14
03AA A62E mov R10,R22
03AC A018 sub R10,R0
03AE B108 sbc R11,R1
03B0 8AE0 ldi R24,10
03B2 8C9D mul R24,R12
03B4 A018 sub R10,R0
03B6 B108 sbc R11,R1
03B8 .dbline 60
03B8 ; WriteNum(1,8,(ten_3));
03B8 2E2C mov R2,R14
03BA 3324 clr R3
03BC 3982 std y+1,R3
03BE 2882 std y+0,R2
03C0 28E0 ldi R18,8
03C2 30E0 ldi R19,0
03C4 01E0 ldi R16,1
03C6 10E0 ldi R17,0
03C8 2CDF xcall _WriteNum
03CA .dbline 61
03CA ; WriteNum(1,10,(ten_2));
03CA 2C2C mov R2,R12
03CC 3324 clr R3
03CE 3982 std y+1,R3
03D0 2882 std y+0,R2
03D2 2AE0 ldi R18,10
03D4 30E0 ldi R19,0
03D6 01E0 ldi R16,1
03D8 10E0 ldi R17,0
03DA 23DF xcall _WriteNum
03DC .dbline 62
03DC ; WriteNum(1,11,(ten_1));
03DC 2A2C mov R2,R10
03DE 3324 clr R3
03E0 3982 std y+1,R3
03E2 2882 std y+0,R2
03E4 2BE0 ldi R18,11
03E6 30E0 ldi R19,0
03E8 01E0 ldi R16,1
03EA 10E0 ldi R17,0
03EC 1ADF xcall _WriteNum
03EE .dbline 65
03EE ;
03EE ; //显示ADC1
03EE ; ten_3=(adc_data1)/100;
03EE 24E6 ldi R18,100
03F0 30E0 ldi R19,0
03F2 8A01 movw R16,R20
03F4 0E940000 xcall div16u
03F8 E02E mov R14,R16
03FA .dbline 66
03FA ; ten_2=(adc_data1-(ten_3*100))/10;
03FA 84E6 ldi R24,100
03FC 8E9D mul R24,R14
03FE 8A01 movw R16,R20
0400 0019 sub R16,R0
0402 1109 sbc R17,R1
0404 2AE0 ldi R18,10
0406 30E0 ldi R19,0
0408 0E940000 xcall div16u
040C C02E mov R12,R16
040E .dbline 67
040E ; ten_1=adc_data1-(ten_3*100)-ten_2*10;
040E 84E6 ldi R24,100
0410 8E9D mul R24,R14
0412 A42E mov R10,R20
0414 A018 sub R10,R0
0416 B108 sbc R11,R1
0418 8AE0 ldi R24,10
041A 8C9D mul R24,R12
041C A018 sub R10,R0
041E B108 sbc R11,R1
0420 .dbline 68
0420 ; WriteNum(2,8,(ten_3));
0420 2E2C mov R2,R14
0422 3324 clr R3
0424 3982 std y+1,R3
0426 2882 std y+0,R2
0428 28E0 ldi R18,8
042A 30E0 ldi R19,0
042C 02E0 ldi R16,2
042E 10E0 ldi R17,0
0430 F8DE xcall _WriteNum
0432 .dbline 69
0432 ; WriteNum(2,10,(ten_2));
0432 2C2C mov R2,R12
0434 3324 clr R3
0436 3982 std y+1,R3
0438 2882 std y+0,R2
043A 2AE0 ldi R18,10
043C 30E0 ldi R19,0
043E 02E0 ldi R16,2
0440 10E0 ldi R17,0
0442 EFDE xcall _WriteNum
0444 .dbline 70
0444 ; WriteNum(2,11,(ten_1));
0444 2A2C mov R2,R10
0446 3324 clr R3
0448 3982 std y+1,R3
044A 2882 std y+0,R2
044C 2BE0 ldi R18,11
044E 30E0 ldi R19,0
0450 02E0 ldi R16,2
0452 10E0 ldi R17,0
0454 E6DE xcall _WriteNum
0456 .dbline 72
0456 ;
0456 ; for(i=0;i<18;i++)
0456 4427 clr R20
0458 04C0 xjmp L51
045A L48:
045A .dbline 73
045A ; {
045A .dbline 74
045A ; s_ms(60000);
045A 00E6 ldi R16,60000
045C 1AEE ldi R17,234
045E D0DD xcall _s_ms
0460 .dbline 75
0460 ; }
0460 L49:
0460 .dbline 72
0460 4395 inc R20
0462 L51:
0462 .dbline 72
0462 4231 cpi R20,18
0464 D0F3 brlo L48
0466 X11:
0466 .dbline 76
0466 ; }
0466 L46:
0466 .dbline 31
0466 77CF xjmp L45
0468 X12:
0468 .dbline -2
0468 L44:
0468 .dbline 0 ; func end
0468 2496 adiw R28,4
046A 0895 ret
046C .dbsym l adc_h1 5 i
046C .dbsym l adc_l1 5 i
046C .dbsym l ten_4 5 c
046C .dbsym r adc_h0 12 i
046C .dbsym r adc_l0 10 i
046C .dbsym r adc_data1 20 i
046C .dbsym r ten_1 10 c
046C .dbsym r ten_2 12 c
046C .dbsym r adc_data0 22 i
046C .dbsym r ten_3 14 c
046C .dbsym r i 20 c
046C .dbend
046C ; }
046C ;
046C ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -