📄 adconv.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51CE SUBI R28,0x1E
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0117 CALL _main
_exit:
004A CFFF RJMP _exit
_SETB:
k --> R20
004B 940E0231 CALL push_gset1
004D 2F40 MOV R20,R16
FILE: D:\单片机编程\iccavr\AD转换\20070609\ADCONV.c
(0001) #include <iom16v.h>
(0002) #define CS 0
(0003) #define CLK 1
(0004) #define DIO 2
(0005) #define KEY 3
(0006)
(0007) void SETB(unsigned char k)
(0008) {//这里的PORTB根据自己的程序修改
(0009) PORTB=PORTB|(1<<k);
004E E001 LDI R16,1
004F 2F14 MOV R17,R20
0050 940E0248 CALL lsl8
0052 B228 IN R2,0x18
0053 2A20 OR R2,R16
0054 BA28 OUT 0x18,R2
0055 940E0234 CALL pop_gset1
0057 9508 RET
_CLRS:
l --> R20
0058 940E0231 CALL push_gset1
005A 2F40 MOV R20,R16
(0010) }
(0011)
(0012) void CLRS(unsigned char l)
(0013) {//这里的PORTB根据自己的程序修改
(0014) PORTB=PORTB&~(1<<l);
005B E001 LDI R16,1
005C 2F14 MOV R17,R20
005D 940E0248 CALL lsl8
005F 2E20 MOV R2,R16
0060 9420 COM R2
0061 B238 IN R3,0x18
0062 2032 AND R3,R2
0063 BA38 OUT 0x18,R3
0064 940E0234 CALL pop_gset1
0066 9508 RET
_Display:
DataPos --> Y+1
datanum --> R14
cToDIO --> R20
iToDIO --> R10
num --> Y+0
transdata --> R22
wait --> R12
position --> Y+14
Data --> Y+12
0067 940E0194 CALL push_arg4
0069 940E0229 CALL push_gset5
006B 9722 SBIW R28,2
(0015) }
(0016)
(0017) //初始化显示时Data=0xA4,position=0xFF
(0018) //Data为显示数据,position为数据显示位置
(0019) //Data为10进制或16进制数,只能一位一位发送
(0020) //position为1-8的数字
(0021) void Display(unsigned char Data,unsigned char position)
(0022) {
(0023) unsigned char DataPos=~0;
006C EF8F LDI R24,0xFF
006D 8389 STD Y+1,R24
(0024) unsigned char num=~0;
006E 8388 STD Y+0,R24
(0025) unsigned char wait=~0;
006F 2EC8 MOV R12,R24
(0026) unsigned char datanum=~0;
(0027) unsigned int transdata=~0;
0070 EF6F LDI R22,0xFF
0071 EF7F LDI R23,0xFF
(0028) unsigned int iToDIO=~0;
0072 EF8F LDI R24,0xFF
0073 EF9F LDI R25,0xFF
0074 015C MOVW R10,R24
(0029) unsigned char cToDIO=~0;
0075 EF4F LDI R20,0xFF
(0030) DDRB=0xFF;
0076 BAA7 OUT 0x17,R10
(0031) SETB(KEY);
0077 E003 LDI R16,3
0078 DFD2 RCALL _SETB
(0032) SETB(CS);
0079 2700 CLR R16
007A DFD0 RCALL _SETB
(0033) SETB(DIO);
007B E002 LDI R16,2
007C DFCE RCALL _SETB
(0034) datanum=2;
007D E082 LDI R24,2
007E 2EE8 MOV R14,R24
(0035) CLRS(CS);
007F 2700 CLR R16
0080 DFD7 RCALL _CLRS
(0036) if(Data!=0xA4)
0081 858C LDD R24,Y+12
0082 3A84 CPI R24,0xA4
0083 F409 BNE 0x0085
0084 C04C RJMP 0x00D1
(0037) {
(0038) DataPos=0xC8+position-1;
0085 858E LDD R24,Y+14
0086 5388 SUBI R24,0x38
0087 5081 SUBI R24,1
0088 8389 STD Y+1,R24
(0039) transdata=DataPos;
0089 2F68 MOV R22,R24
008A 2777 CLR R23
(0040) transdata=transdata<<8;
008B 2F76 MOV R23,R22
008C 2766 CLR R22
(0041) transdata=transdata+Data;
008D 842C LDD R2,Y+12
008E 2433 CLR R3
008F 0D62 ADD R22,R2
0090 1D73 ADC R23,R3
0091 C036 RJMP 0x00C8
(0042) while(datanum--)
(0043) {
(0044) wait=25;
0092 E189 LDI R24,0x19
0093 2EC8 MOV R12,R24
(0045) while(wait--)
0094 2C2C MOV R2,R12
0095 2433 CLR R3
0096 2D82 MOV R24,R2
0097 5081 SUBI R24,1
0098 2EC8 MOV R12,R24
0099 2022 TST R2
009A F7C9 BNE 0x0094
(0046) {;}
(0047) for(num=0;num<8;num++)
009B 2400 CLR R0
009C 8208 STD Y+0,R0
009D C027 RJMP 0x00C5
(0048) {
(0049) iToDIO=transdata&0x8000;
009E 01CB MOVW R24,R22
009F 7080 ANDI R24,0
00A0 7890 ANDI R25,0x80
00A1 015C MOVW R10,R24
(0050) transdata=transdata<<1;
00A2 0F66 LSL R22
00A3 1F77 ROL R23
(0051) if(iToDIO==0x0000)
00A4 3080 CPI R24,0
00A5 0789 CPC R24,R25
00A6 F419 BNE 0x00AA
(0052) {
(0053) CLRS(DIO);
00A7 E002 LDI R16,2
00A8 DFAF RCALL _CLRS
(0054) }
00A9 C002 RJMP 0x00AC
(0055) else
(0056) {
(0057) SETB(DIO);
00AA E002 LDI R16,2
00AB DF9F RCALL _SETB
(0058) }
(0059) SETB(CLK);
00AC E001 LDI R16,1
00AD DF9D RCALL _SETB
(0060) wait=4;
00AE E084 LDI R24,4
00AF 2EC8 MOV R12,R24
(0061) while(wait--)
00B0 2C2C MOV R2,R12
00B1 2433 CLR R3
00B2 2D82 MOV R24,R2
00B3 5081 SUBI R24,1
00B4 2EC8 MOV R12,R24
00B5 2022 TST R2
00B6 F7C9 BNE 0x00B0
(0062) {;}
(0063) CLRS(CLK);
00B7 E001 LDI R16,1
00B8 DF9F RCALL _CLRS
(0064) wait=4;
00B9 E084 LDI R24,4
00BA 2EC8 MOV R12,R24
(0065) while(wait--)
00BB 2C2C MOV R2,R12
00BC 2433 CLR R3
00BD 2D82 MOV R24,R2
00BE 5081 SUBI R24,1
00BF 2EC8 MOV R12,R24
00C0 2022 TST R2
00C1 F7C9 BNE 0x00BB
00C2 8008 LDD R0,Y+0
00C3 9403 INC R0
00C4 8208 STD Y+0,R0
00C5 8188 LDD R24,Y+0
00C6 3088 CPI R24,0x8
00C7 F2B0 BCS 0x009E
00C8 2C2E MOV R2,R14
00C9 2433 CLR R3
00CA 2D82 MOV R24,R2
00CB 5081 SUBI R24,1
00CC 2EE8 MOV R14,R24
00CD 2022 TST R2
00CE F009 BEQ 0x00D0
00CF CFC2 RJMP 0x0092
(0066) {;}
(0067) }
(0068) }
(0069) }
00D0 C034 RJMP 0x0105
(0070) else
(0071) {
(0072) wait=25;
00D1 E189 LDI R24,0x19
00D2 2EC8 MOV R12,R24
(0073) while(wait--);
00D3 2C2C MOV R2,R12
00D4 2433 CLR R3
00D5 2D82 MOV R24,R2
00D6 5081 SUBI R24,1
00D7 2EC8 MOV R12,R24
00D8 2022 TST R2
00D9 F7C9 BNE 0x00D3
(0074) for(num=0;num<8;num++)
00DA 2400 CLR R0
00DB 8208 STD Y+0,R0
00DC C025 RJMP 0x0102
(0075) {
(0076) cToDIO=Data&0x80;
00DD 854C LDD R20,Y+12
00DE 7840 ANDI R20,0x80
(0077) Data=Data<<1;
00DF 842C LDD R2,Y+12
00E0 0C22 LSL R2
00E1 862C STD Y+12,R2
(0078) if(cToDIO==0x00)
00E2 2344 TST R20
00E3 F419 BNE 0x00E7
(0079) {
(0080) CLRS(DIO);
00E4 E002 LDI R16,2
00E5 DF72 RCALL _CLRS
(0081) }
00E6 C002 RJMP 0x00E9
(0082) else
(0083) {
(0084) SETB(DIO);
00E7 E002 LDI R16,2
00E8 DF62 RCALL _SETB
(0085) }
(0086) SETB(CLK);
00E9 E001 LDI R16,1
00EA DF60 RCALL _SETB
(0087) wait=4;
00EB E084 LDI R24,4
00EC 2EC8 MOV R12,R24
(0088) while(wait--);
00ED 2C2C MOV R2,R12
00EE 2433 CLR R3
00EF 2D82 MOV R24,R2
00F0 5081 SUBI R24,1
00F1 2EC8 MOV R12,R24
00F2 2022 TST R2
00F3 F7C9 BNE 0x00ED
(0089) CLRS(CLK);
00F4 E001 LDI R16,1
00F5 DF62 RCALL _CLRS
(0090) wait=4;
00F6 E084 LDI R24,4
00F7 2EC8 MOV R12,R24
(0091) while(wait--);
00F8 2C2C MOV R2,R12
00F9 2433 CLR R3
00FA 2D82 MOV R24,R2
00FB 5081 SUBI R24,1
00FC 2EC8 MOV R12,R24
00FD 2022 TST R2
00FE F7C9 BNE 0x00F8
00FF 8008 LDD R0,Y+0
0100 9403 INC R0
0101 8208 STD Y+0,R0
0102 8188 LDD R24,Y+0
0103 3088 CPI R24,0x8
0104 F2C0 BCS 0x00DD
(0092) }
(0093) }
(0094) SETB(CS);
0105 2700 CLR R16
0106 DF44 RCALL _SETB
0107 9622 ADIW R28,2
0108 940E0226 CALL pop_gset5
010A 9624 ADIW R28,4
010B 9508 RET
(0095) }
(0096)
(0097) unsigned int ADC_Conv(void)
(0098) {
(0099) unsigned int temp1,temp2;
(0100) temp1=(unsigned int)ADCL;
_ADC_Conv:
temp1 --> R18
temp2 --> R16
010C B124 IN R18,0x04
010D 2733 CLR R19
(0101) temp2=(unsigned int)ADCH;
010E B105 IN R16,0x05
010F 2711 CLR R17
(0102) temp2=(temp2<<8)+temp1;
0110 0118 MOVW R2,R16
0111 2C32 MOV R3,R2
0112 2422 CLR R2
0113 0E22 ADD R2,R18
0114 1E33 ADC R3,R19
0115 0181 MOVW R16,R2
(0103) return temp2;
0116 9508 RET
_main:
total --> Y+0
num --> Y+4
count --> R12
j --> R14
i --> R10
0117 9725 SBIW R28,5
(0104) }
(0105)
(0106)
(0107) void main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -