📄 adc.lis
字号:
.module ADC.c
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile J:\AVRpractice\BOOK\ADC\ADC.c
000A .dbsym e Table _Table A[10:10]c
000A _Data::
000A .blkb 2
.area idata
000A 0000 .byte 0,0
.area data(ram, con, rel)
000C .dbfile J:\AVRpractice\BOOK\ADC\ADC.c
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile J:\AVRpractice\BOOK\ADC\ADC.c
000E .dbsym e Data _Data A[4:4]c
.area text(rom, con, rel)
0000 .dbfile J:\AVRpractice\BOOK\ADC\ADC.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 10
0002 ; #include<io8535v.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ;
0002 ;
0002 ; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0002 ; uchar Data[4]={0,0,0,0};
0002 ;
0002 ; void DelayMs(uint i) //0.25ms
0002 ; {uchar j;
0002 .dbline 11
0002 ; for(;i!=0;i--)
0002 07C0 rjmp L5
0004 L2:
0004 .dbline 12
0004 .dbline 12
0004 4AEF ldi R20,250
0006 01C0 rjmp L9
0008 L6:
0008 .dbline 12
0008 .dbline 12
0008 .dbline 12
0008 L7:
0008 .dbline 12
0008 4A95 dec R20
000A L9:
000A .dbline 12
000A 4423 tst R20
000C E9F7 brne L6
000E .dbline 12
000E L3:
000E .dbline 11
000E 0150 subi R16,1
0010 1040 sbci R17,0
0012 L5:
0012 .dbline 11
0012 0030 cpi R16,0
0014 0107 cpc R16,R17
0016 B1F7 brne L2
0018 X0:
0018 .dbline -2
0018 .dbline 13
0018 ; {for(j=250;j!=0;j--) {;}}
0018 ; }
0018 L1:
0018 00D0 rcall pop_gset1
001A .dbline 0 ; func end
001A 0895 ret
001C .dbsym r j 20 c
001C .dbsym r i 16 i
001C .dbend
001C .dbfunc e Display _Display fV
001C ; sel -> R20
001C ; i -> R22
001C ; p -> R10,R11
.even
001C _Display::
001C 00D0 rcall push_gset3
001E A02E mov R10,R16
0020 B12E mov R11,R17
0022 .dbline -1
0022 .dbline 16
0022 ;
0022 ; void Display(uchar *p) //间隔5ms显示
0022 ; {uchar i,sel=0x01;
0022 .dbline 16
0022 41E0 ldi R20,1
0024 .dbline 17
0024 ; for(i=0;i<4;i++)
0024 6627 clr R22
0026 17C0 rjmp L14
0028 L11:
0028 .dbline 18
0028 .dbline 18
0028 42BB out 0x12,R20
002A .dbline 19
002A E62F mov R30,R22
002C FF27 clr R31
002E EA0D add R30,R10
0030 FB1D adc R31,R11
0032 E081 ldd R30,z+0
0034 FF27 clr R31
0036 80E0 ldi R24,<_Table
0038 90E0 ldi R25,>_Table
003A E80F add R30,R24
003C F91F adc R31,R25
003E 2080 ldd R2,z+0
0040 3324 clr R3
0042 8FEF ldi R24,255
0044 90E0 ldi R25,0
0046 8219 sub R24,R2
0048 9309 sbc R25,R3
004A 88BB out 0x18,R24
004C .dbline 20
004C 04E1 ldi R16,20
004E 10E0 ldi R17,0
0050 D7DF rcall _DelayMs
0052 .dbline 21
0052 440F lsl R20
0054 .dbline 22
0054 L12:
0054 .dbline 17
0054 6395 inc R22
0056 L14:
0056 .dbline 17
0056 6430 cpi R22,4
0058 38F3 brlo L11
005A .dbline -2
005A .dbline 23
005A ; {PORTD=sel;
005A ; PORTB=0xff-Table[p[i]];
005A ; DelayMs(20);
005A ; sel=sel<<1;
005A ; }
005A ; }
005A L10:
005A 00D0 rcall pop_gset3
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r sel 20 c
005E .dbsym r i 22 c
005E .dbsym r p 10 pc
005E .dbend
005E .dbfunc e ADC_Convert _ADC_Convert fi
005E ; temp1 -> R18,R19
005E ; temp2 -> R16,R17
.even
005E _ADC_Convert::
005E .dbline -1
005E .dbline 26
005E ;
005E ; uint ADC_Convert(void)
005E ; {uint temp1,temp2;
005E .dbline 27
005E ; temp1=(uint)ADCL;
005E 24B1 in R18,0x4
0060 3327 clr R19
0062 .dbline 28
0062 ; temp2=(uint)ADCH;
0062 05B1 in R16,0x5
0064 1127 clr R17
0066 .dbline 29
0066 ; temp2=(temp2<<8)+temp1;
0066 202E mov R2,R16
0068 312E mov R3,R17
006A 322C mov R3,R2
006C 2224 clr R2
006E 220E add R2,R18
0070 331E adc R3,R19
0072 022D mov R16,R2
0074 132D mov R17,R3
0076 .dbline 30
0076 ; return(temp2);
0076 .dbline -2
0076 L15:
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbsym r temp1 18 i
0078 .dbsym r temp2 16 i
0078 .dbend
0078 .dbfunc e Process _Process fV
0078 ; p -> R20,R21
0078 ; i -> R22,R23
.even
0078 _Process::
0078 00D0 rcall push_gset2
007A 422F mov R20,R18
007C 532F mov R21,R19
007E 602F mov R22,R16
0080 712F mov R23,R17
0082 .dbline -1
0082 .dbline 34
0082 ; }
0082 ;
0082 ; void Process(uint i,uchar *p)
0082 ; {p[0]=i/1000;
0082 .dbline 34
0082 28EE ldi R18,1000
0084 33E0 ldi R19,3
0086 062F mov R16,R22
0088 172F mov R17,R23
008A 00D0 rcall div16u
008C E42F mov R30,R20
008E F52F mov R31,R21
0090 0083 std z+0,R16
0092 .dbline 35
0092 ; i=i%1000;
0092 28EE ldi R18,1000
0094 33E0 ldi R19,3
0096 062F mov R16,R22
0098 172F mov R17,R23
009A 00D0 rcall mod16u
009C 602F mov R22,R16
009E 712F mov R23,R17
00A0 .dbline 36
00A0 ; p[1]=i/100;
00A0 24E6 ldi R18,100
00A2 30E0 ldi R19,0
00A4 00D0 rcall div16u
00A6 E42F mov R30,R20
00A8 F52F mov R31,R21
00AA 0183 std z+1,R16
00AC .dbline 37
00AC ; i=i%100;
00AC 24E6 ldi R18,100
00AE 30E0 ldi R19,0
00B0 062F mov R16,R22
00B2 172F mov R17,R23
00B4 00D0 rcall mod16u
00B6 602F mov R22,R16
00B8 712F mov R23,R17
00BA .dbline 38
00BA ; p[2]=i/10;
00BA 2AE0 ldi R18,10
00BC 30E0 ldi R19,0
00BE 00D0 rcall div16u
00C0 E42F mov R30,R20
00C2 F52F mov R31,R21
00C4 0283 std z+2,R16
00C6 .dbline 39
00C6 ; i=i%10;
00C6 2AE0 ldi R18,10
00C8 30E0 ldi R19,0
00CA 062F mov R16,R22
00CC 172F mov R17,R23
00CE 00D0 rcall mod16u
00D0 602F mov R22,R16
00D2 712F mov R23,R17
00D4 .dbline 40
00D4 ; p[3]=i;
00D4 E42F mov R30,R20
00D6 F52F mov R31,R21
00D8 6383 std z+3,R22
00DA .dbline -2
00DA .dbline 41
00DA ; }
00DA L16:
00DA 00D0 rcall pop_gset2
00DC .dbline 0 ; func end
00DC 0895 ret
00DE .dbsym r p 20 pc
00DE .dbsym r i 22 i
00DE .dbend
00DE .dbfunc e main _main fV
00DE ; i -> R20,R21
.even
00DE _main::
00DE .dbline -1
00DE .dbline 44
00DE ;
00DE ; void main(void)
00DE ; {uint i;
00DE .dbline 45
00DE ; DDRA=0x00; //设置A口为不带上拉输入;
00DE 2224 clr R2
00E0 2ABA out 0x1a,R2
00E2 .dbline 46
00E2 ; PORTA=0x00;
00E2 2BBA out 0x1b,R2
00E4 .dbline 47
00E4 ; DDRB=0xff; //设置B口为推挽1输出;
00E4 8FEF ldi R24,255
00E6 87BB out 0x17,R24
00E8 .dbline 48
00E8 ; PORTB=0xff;
00E8 88BB out 0x18,R24
00EA .dbline 49
00EA ; DDRD=0xff; //设置C口为推挽1输出;
00EA 81BB out 0x11,R24
00EC .dbline 50
00EC ; PORTD=0xff;
00EC 82BB out 0x12,R24
00EE .dbline 51
00EE ; PORTB=0x00; //B口初始化输出1;C口初始化输出0;点亮全部数码管;
00EE 28BA out 0x18,R2
00F0 .dbline 52
00F0 ; PORTD=0xff;
00F0 82BB out 0x12,R24
00F2 .dbline 53
00F2 ; ADMUX=0x01; //选择第二通道ADC1;
00F2 81E0 ldi R24,1
00F4 87B9 out 0x7,R24
00F6 .dbline 54
00F6 ; ADCSR=0xe6; //125K转换速率,自由转换模式;启动AD转换器;
00F6 86EE ldi R24,230
00F8 86B9 out 0x6,R24
00FA .dbline 55
00FA ; DelayMs(3000); //延时待系统稳定;
00FA 08EB ldi R16,3000
00FC 1BE0 ldi R17,11
00FE 80DF rcall _DelayMs
0100 09C0 rjmp L19
0102 L18:
0102 .dbline 57
0102 .dbline 57
0102 ADDF rcall _ADC_Convert
0104 402F mov R20,R16
0106 512F mov R21,R17
0108 .dbline 58
0108 20E0 ldi R18,<_Data
010A 30E0 ldi R19,>_Data
010C B5DF rcall _Process
010E .dbline 59
010E 00E0 ldi R16,<_Data
0110 10E0 ldi R17,>_Data
0112 84DF rcall _Display
0114 .dbline 60
0114 L19:
0114 .dbline 56
0114 F6CF rjmp L18
0116 X1:
0116 .dbline -2
0116 .dbline 61
0116 ; while(1)
0116 ; {i=ADC_Convert();
0116 ; Process(i,Data);
0116 ; Display(Data);
0116 ; }
0116 ; }
0116 L17:
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbsym r i 20 i
0118 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -