⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adconv.lst

📁 使用mega16单片机进行片上自带的AD转换编程
💻 LST
字号:
__start:
__text_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 36E6      CPI	R30,0x66
    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 940E01A4  CALL	push_gset1
    004D 2F40      MOV	R20,R16
FILE: D:\单片机编程\iccavr\AD转换\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 940E01BB  CALL	lsl8
    0052 B228      IN	R2,0x18
    0053 2A20      OR	R2,R16
    0054 BA28      OUT	0x18,R2
    0055 940E01A7  CALL	pop_gset1
    0057 9508      RET
_CLRS:
  l                    --> R20
    0058 940E01A4  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 940E01BB  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 940E01A7  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 940E0178  CALL	push_arg4
    0069 940E019C  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 940E0199  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
(0104) }
(0105) 
(0106) unsigned int count,i;
(0107) unsigned int j;
(0108) void main()
(0109) {
(0110)   ADMUX=0x00;
_main:
    0117 2422      CLR	R2
    0118 B827      OUT	0x07,R2
(0111)   ADCSRA=0xE6;
    0119 EE86      LDI	R24,0xE6
    011A B986      OUT	0x06,R24
(0112) 
(0113)   Display(0xA4,0xff);
    011B EF2F      LDI	R18,0xFF
    011C EA04      LDI	R16,0xA4
    011D DF49      RCALL	_Display
    011E C057      RJMP	0x0176
(0114)   while(1)
(0115)   {
(0116)     count=20000;
    011F E280      LDI	R24,0x20
    0120 E49E      LDI	R25,0x4E
    0121 93900065  STS	count+1,R25
    0123 93800064  STS	count,R24
(0117)     while(count--);
    0125 90200064  LDS	R2,count
    0127 90300065  LDS	R3,count+1
    0129 01C1      MOVW	R24,R2
    012A 9701      SBIW	R24,1
    012B 93900065  STS	count+1,R25
    012D 93800064  STS	count,R24
    012F 2022      TST	R2
    0130 F7A1      BNE	0x0125
    0131 2033      TST	R3
    0132 F791      BNE	0x0125
(0118)     i=ADC_Conv();
    0133 DFD8      RCALL	_ADC_Conv
    0134 93100063  STS	i+1,R17
    0136 93000062  STS	i,R16
(0119)     for(j=0;j<4;j++)
    0138 2422      CLR	R2
    0139 2433      CLR	R3
    013A 92300061  STS	j+1,R3
    013C 92200060  STS	j,R2
    013E C02F      RJMP	0x016E
(0120)     {
(0121)       Display(i%10,j+1);
    013F 91200060  LDS	R18,j
    0141 5F2F      SUBI	R18,0xFF
    0142 4F3F      SBCI	R19,0xFF
    0143 E08A      LDI	R24,0xA
    0144 E090      LDI	R25,0
    0145 91000062  LDS	R16,i
    0147 91100063  LDS	R17,i+1
    0149 932F      PUSH	R18
    014A 933F      PUSH	R19
    014B 019C      MOVW	R18,R24
    014C 940E017D  CALL	mod16u
    014E 913F      POP	R19
    014F 912F      POP	R18
    0150 DF16      RCALL	_Display
(0122)       if(i!=0)
    0151 90200062  LDS	R2,i
    0153 90300063  LDS	R3,i+1
    0155 2022      TST	R2
    0156 F411      BNE	0x0159
    0157 2033      TST	R3
    0158 F061      BEQ	0x0165
(0123) 	  {
(0124) 	    i=i/10;
FILE: <library>
    0159 E02A      LDI	R18,0xA
    015A E030      LDI	R19,0
    015B 91000062  LDS	R16,i
    015D 91100063  LDS	R17,i+1
    015F 940E017F  CALL	div16u
    0161 93100063  STS	i+1,R17
    0163 93000062  STS	i,R16
    0165 91800060  LDS	R24,j
    0167 91900061  LDS	R25,j+1
    0169 9601      ADIW	R24,1
    016A 93900061  STS	j+1,R25
    016C 93800060  STS	j,R24
    016E 91800060  LDS	R24,j
    0170 91900061  LDS	R25,j+1
    0172 3084      CPI	R24,4
    0173 E0E0      LDI	R30,0
    0174 079E      CPC	R25,R30
    0175 F248      BCS	0x013F
    0176 CFA8      RJMP	0x011F
    0177 9508      RET
push_arg4:
    0178 933A      ST	R19,-Y
    0179 932A      ST	R18,-Y
push_arg2:
    017A 931A      ST	R17,-Y
    017B 930A      ST	R16,-Y
    017C 9508      RET
mod16u:
    017D 9468      BSET	6
    017E C001      RJMP	xdiv16u
div16u:
    017F 94E8      BCLR	6
xdiv16u:
    0180 92EA      ST	R14,-Y
    0181 92FA      ST	R15,-Y
    0182 938A      ST	R24,-Y
    0183 24EE      CLR	R14
    0184 24FF      CLR	R15
    0185 E180      LDI	R24,0x10
    0186 0F00      LSL	R16
    0187 1F11      ROL	R17
    0188 1CEE      ROL	R14
    0189 1CFF      ROL	R15
    018A 16E2      CP	R14,R18
    018B 06F3      CPC	R15,R19
    018C F018      BCS	0x0190
    018D 1AE2      SUB	R14,R18
    018E 0AF3      SBC	R15,R19
    018F 9503      INC	R16
    0190 958A      DEC	R24
    0191 F7A1      BNE	0x0186
    0192 F416      BRTC	0x0195
    0193 2D0E      MOV	R16,R14
    0194 2D1F      MOV	R17,R15
    0195 9189      LD	R24,Y+
    0196 90F9      LD	R15,Y+
    0197 90E9      LD	R14,Y+
    0198 9508      RET
pop_gset5:
    0199 27EE      CLR	R30
    019A 940C01A8  JMP	pop
push_gset5:
    019C 92FA      ST	R15,-Y
    019D 92EA      ST	R14,-Y
push_gset4:
    019E 92DA      ST	R13,-Y
    019F 92CA      ST	R12,-Y
push_gset3:
    01A0 92BA      ST	R11,-Y
    01A1 92AA      ST	R10,-Y
push_gset2:
    01A2 937A      ST	R23,-Y
    01A3 936A      ST	R22,-Y
push_gset1:
    01A4 935A      ST	R21,-Y
    01A5 934A      ST	R20,-Y
    01A6 9508      RET
pop_gset1:
    01A7 E0E1      LDI	R30,1
pop:
    01A8 9149      LD	R20,Y+
    01A9 9159      LD	R21,Y+
    01AA FDE0      SBRC	R30,0
    01AB 9508      RET
    01AC 9169      LD	R22,Y+
    01AD 9179      LD	R23,Y+
    01AE FDE1      SBRC	R30,1
    01AF 9508      RET
    01B0 90A9      LD	R10,Y+
    01B1 90B9      LD	R11,Y+
    01B2 FDE2      SBRC	R30,2
    01B3 9508      RET
    01B4 90C9      LD	R12,Y+
    01B5 90D9      LD	R13,Y+
    01B6 FDE3      SBRC	R30,3
    01B7 9508      RET
    01B8 90E9      LD	R14,Y+
    01B9 90F9      LD	R15,Y+
    01BA 9508      RET
lsl8:
    01BB 2311      TST	R17
    01BC F019      BEQ	0x01C0
    01BD 0F00      LSL	R16
    01BE 951A      DEC	R17
    01BF CFFB      RJMP	lsl8
    01C0 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -