📄 ad.lst
字号:
Interrupt Vectors
00000 940C 0037 JMP __text_start|__start
Program Code (text area)
__text_start|__start:
00037 E5CF LDI R28,0x5F
00038 E0D4 LDI R29,4
00039 BFCD OUT 0x3D,R28
0003A BFDE OUT 0x3E,R29
0003B 51CE SUBI R28,0x1E
0003C 40D0 SBCI R29,0
0003D EA0A LDI R16,0xAA
0003E 8308 ST Y,R16
0003F 2400 CLR R0
00040 E7EA LDI R30,0x7A
00041 E0F0 LDI R31,0
00042 E010 LDI R17,0
00043 37EA CPI R30,0x7A
00044 07F1 CPC R31,R17
00045 F011 BEQ 0x0048
00046 9201 ST Z+,R0
00047 CFFB RJMP 0x0043
00048 8300 ST Z,R16
00049 E5E4 LDI R30,0x54
0004A E0F0 LDI R31,0
0004B E6A0 LDI R26,0x60
0004C E0B0 LDI R27,0
0004D E010 LDI R17,0
0004E E000 LDI R16,0
0004F BF0B OUT 0x3B,R16
00050 36EE CPI R30,0x6E
00051 07F1 CPC R31,R17
00052 F021 BEQ 0x0057
00053 95C8 LPM
00054 9631 ADIW R30,1
00055 920D ST X+,R0
00056 CFF9 RJMP 0x0050
00057 940E 00A4 CALL _main
_exit:
00059 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0005A 940E 00D6 CALL push_xgsetF000
FILE: F:\51&av配套光盘\51&avr配套程序\avr程序\15AD转换\AD.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) uchar const table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0007)
(0008) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};
(0009) void delay(uint ms)
(0010) {
(0011) uint i,j;
(0012) for(i=0;i<ms;i++)
0005C 2744 CLR R20
0005D 2755 CLR R21
0005E C00B RJMP 0x006A
(0013) {
(0014) for(j=0;j<1141;j++);
0005F 2766 CLR R22
00060 2777 CLR R23
00061 C002 RJMP 0x0064
00062 5F6F SUBI R22,0xFF
00063 4F7F SBCI R23,0xFF
00064 3765 CPI R22,0x75
00065 E0E4 LDI R30,4
00066 077E CPC R23,R30
00067 F3D0 BCS 0x0062
00068 5F4F SUBI R20,0xFF
00069 4F5F SBCI R21,0xFF
0006A 1740 CP R20,R16
0006B 0751 CPC R21,R17
0006C F390 BCS 0x005F
0006D 940C 00DB JMP pop_xgsetF000
_show:
k --> R10
j --> R12
0006F 92AA ST -Y,R10
00070 92CA ST -Y,R12
00071 2EA2 MOV R10,R18
00072 2EC0 MOV R12,R16
(0015) }
(0016) }
(0017) void show(uchar j,uchar k)
(0018) {
(0019)
(0020) DDRA=0xff;
00073 EF8F LDI R24,0xFF
00074 BB8A OUT 0x1A,R24
(0021) PORTA = table[j]; // i 值的 个位数
00075 E680 LDI R24,0x60
00076 E090 LDI R25,0
00077 2DEC MOV R30,R12
00078 27FF CLR R31
00079 0FE8 ADD R30,R24
0007A 1FF9 ADC R31,R25
0007B 8020 LD R2,Z
0007C BA2B OUT 0x1B,R2
(0022) PORTC = LED_W[k]; //点亮第一位数码管
0007D E68A LDI R24,0x6A
0007E E090 LDI R25,0
0007F 2DEA MOV R30,R10
00080 27FF CLR R31
00081 0FE8 ADD R30,R24
00082 1FF9 ADC R31,R25
00083 8020 LD R2,Z
00084 BA25 OUT 0x15,R2
(0023)
(0024) delay(2);
00085 E002 LDI R16,2
00086 E010 LDI R17,0
00087 DFD2 RCALL _delay
00088 90C9 LD R12,Y+
00089 90A9 LD R10,Y+
0008A 9508 RET
_mega16_ad:
addata --> R10
0008B 92AA ST -Y,R10
0008C 92BA ST -Y,R11
(0025)
(0026)
(0027)
(0028) }
(0029)
(0030)
(0031) uint mega16_ad()
(0032) {
(0033) uint addata;
(0034) DDRA&=~BIT(PA0);
0008D 98D0 CBI 0x1A,0
(0035) PORTA&=~BIT(PA0);
0008E 98D8 CBI 0x1B,0
(0036) ADMUX=0x40;
0008F E480 LDI R24,0x40
00090 B987 OUT 0x07,R24
(0037) ADCSR=0X80;
00091 E880 LDI R24,0x80
00092 B986 OUT 0x06,R24
(0038) ADCSR|=BIT(ADSC);
00093 9A36 SBI 0x06,6
(0039) while(!(ADCSR&(BIT(ADIF))));
00094 9B34 SBIS 0x06,4
00095 CFFE RJMP 0x0094
(0040) addata=ADCL;
00096 B0A4 IN R10,0x04
00097 24BB CLR R11
(0041) addata=addata+ADCH*256;
00098 B125 IN R18,0x05
00099 2733 CLR R19
0009A E000 LDI R16,0
0009B E011 LDI R17,1
0009C 940E 00C6 CALL empy16s
0009E 0EA0 ADD R10,R16
0009F 1EB1 ADC R11,R17
(0042) return addata;
000A0 0185 MOVW R16,R10
000A1 90B9 LD R11,Y+
000A2 90A9 LD R10,Y+
000A3 9508 RET
_main:
i --> Y,+1
a --> R20
ad --> Y,+0
ada --> R10
000A4 9728 SBIW R28,0x8
(0043) }
(0044)
(0045) void main()
(0046) {
(0047) uint ada,i,ad[]={0,0,0,0},a=5000;
000A5 E782 LDI R24,0x72
000A6 E090 LDI R25,0
000A7 01FE MOVW R30,R28
000A8 E008 LDI R16,0x8
000A9 E010 LDI R17,0
000AA 93FA ST -Y,R31
000AB 93EA ST -Y,R30
000AC 939A ST -Y,R25
000AD 938A ST -Y,R24
000AE 940E 00E0 CALL asgnblk
000B0 E848 LDI R20,0x88
000B1 E153 LDI R21,0x13
(0048)
(0049) DDRC=0XFF;
000B2 EF8F LDI R24,0xFF
000B3 BB84 OUT 0x14,R24
(0050) PORTC=0X00;
000B4 2422 CLR R2
000B5 BA25 OUT 0x15,R2
000B6 C00C RJMP 0x00C3
(0051) while(1)
(0052) {
(0053) ada=mega16_ad();//999 0999
000B7 DFD3 RCALL _mega16_ad
000B8 0158 MOVW R10,R16
(0054)
(0055) if(ada>600)
000B9 E588 LDI R24,0x58
000BA E092 LDI R25,2
000BB 1780 CP R24,R16
000BC 0791 CPC R25,R17
000BD F418 BCC 0x00C1
(0056) {
(0057) DDRA|=BIT(7);
000BE 9AD7 SBI 0x1A,7
(0058) PORTA&=~BIT(7);
000BF 98DF CBI 0x1B,7
(0059) }
000C0 C002 RJMP 0x00C3
(0060) else
(0061) {
(0062) DDRA|=BIT(7);
000C1 9AD7 SBI 0x1A,7
(0063) PORTA|=BIT(7);
FILE: <library>
000C2 9ADF SBI 0x1B,7
000C3 CFF3 RJMP 0x00B7
000C4 9628 ADIW R28,0x8
000C5 9508 RET
empy16s:
000C6 920A ST -Y,R0
000C7 921A ST -Y,R1
000C8 938A ST -Y,R24
000C9 939A ST -Y,R25
000CA 9F02 MUL R16,R18
000CB 01C0 MOVW R24,R0
000CC 9F12 MUL R17,R18
000CD 0D90 ADD R25,R0
000CE 9F03 MUL R16,R19
000CF 0D90 ADD R25,R0
000D0 018C MOVW R16,R24
000D1 9199 LD R25,Y+
000D2 9189 LD R24,Y+
000D3 9019 LD R1,Y+
000D4 9009 LD R0,Y+
000D5 9508 RET
push_xgsetF000:
000D6 937A ST -Y,R23
000D7 936A ST -Y,R22
000D8 935A ST -Y,R21
000D9 934A ST -Y,R20
000DA 9508 RET
pop_xgsetF000:
000DB 9149 LD R20,Y+
000DC 9159 LD R21,Y+
000DD 9169 LD R22,Y+
000DE 9179 LD R23,Y+
000DF 9508 RET
asgnblk:
000E0 93AA ST -Y,R26
000E1 93BA ST -Y,R27
000E2 93EA ST -Y,R30
000E3 93FA ST -Y,R31
000E4 920A ST -Y,R0
000E5 81AF LDD R26,Y+7
000E6 85B8 LDD R27,Y+8
000E7 81ED LDD R30,Y+5
000E8 81FE LDD R31,Y+6
000E9 3000 CPI R16,0
000EA 0701 CPC R16,R17
000EB F029 BEQ 0x00F1
000EC 9001 LD R0,Z+
000ED 920D ST X+,R0
000EE 5001 SUBI R16,1
000EF 4010 SBCI R17,0
000F0 CFF8 RJMP 0x00E9
000F1 9009 LD R0,Y+
000F2 91F9 LD R31,Y+
000F3 91E9 LD R30,Y+
000F4 91B9 LD R27,Y+
000F5 91A9 LD R26,Y+
000F6 9624 ADIW R28,4
000F7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -