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

📄 adc.lst

📁 基于MEGA128的双通道AD转换例程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    006B EFCF      LDI	R28,0xFF
    006C E1D0      LDI	R29,0x10
    006D BFCD      OUT	0x3D,R28
    006E BFDE      OUT	0x3E,R29
    006F 51C0      SUBI	R28,0x10
    0070 40D0      SBCI	R29,0
    0071 EA0A      LDI	R16,0xAA
    0072 8308      STD	Y+0,R16
    0073 2400      CLR	R0
    0074 E2EB      LDI	R30,0x2B
    0075 E0F1      LDI	R31,1
    0076 E011      LDI	R17,1
    0077 3FEF      CPI	R30,0xFF
    0078 07F1      CPC	R31,R17
    0079 F011      BEQ	0x007C
    007A 9201      ST	R0,Z+
    007B CFFB      RJMP	0x0077
    007C 8300      STD	Z+0,R16
    007D EAEA      LDI	R30,0xAA
    007E E0F0      LDI	R31,0
    007F E0A0      LDI	R26,0
    0080 E0B1      LDI	R27,1
    0081 E010      LDI	R17,0
    0082 3DE5      CPI	R30,0xD5
    0083 07F1      CPC	R31,R17
    0084 F021      BEQ	0x0089
    0085 95C8      LPM
    0086 9631      ADIW	R30,1
    0087 920D      ST	R0,X+
    0088 CFF9      RJMP	0x0082
    0089 940E00F4  CALL	_main
_exit:
    008B CFFF      RJMP	_exit
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC_2_Channel\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) #include "config.h"
(0011) float adc_result;
(0012) 
(0013) void adc_init(void)
(0014) {
(0015)  ADCSRA = 0x00; //disable adc
_adc_init:
    008C 2422      CLR	R2
    008D B826      OUT	0x06,R2
(0016)  ADMUX = (1<<REFS0)|(1<<ADLAR);
    008E E680      LDI	R24,0x60
    008F B987      OUT	0x07,R24
(0017)  ACSR = (1<<ACD);
    0090 E880      LDI	R24,0x80
    0091 B988      OUT	0x08,R24
(0018)  ADCSRA = (1<<ADEN);
    0092 B986      OUT	0x06,R24
    0093 9508      RET
_get_adc:
  value                --> R20
  i                    --> R22
  adc_channel          --> R22
    0094 940E0512  CALL	push_gset2
    0096 01B8      MOVW	R22,R16
(0019) }
(0020) 
(0021) void get_adc(unsigned adc_channel)
(0022) {
(0023)  unsigned int value=0,i;
    0097 2744      CLR	R20
    0098 2755      CLR	R21
(0024)  
(0025)  adc_init();
    0099 DFF2      RCALL	_adc_init
(0026)  ADMUX += adc_channel;
    009A B027      IN	R2,0x07
    009B 2433      CLR	R3
    009C 0E26      ADD	R2,R22
    009D 1E37      ADC	R3,R23
    009E B827      OUT	0x07,R2
(0027)  
(0028)  for(i=0;i<4;i++)
    009F 2766      CLR	R22
    00A0 2777      CLR	R23
    00A1 C00B      RJMP	0x00AD
(0029)  {
(0030)   ADCSRA |= (1<<ADSC); 
    00A2 9A36      SBI	0x06,6
(0031)   delay_nus(100);
    00A3 E604      LDI	R16,0x64
    00A4 E010      LDI	R17,0
    00A5 940E0258  CALL	_delay_nus
(0032)   value += ADCH;
    00A7 B025      IN	R2,0x05
    00A8 2433      CLR	R3
    00A9 0D42      ADD	R20,R2
    00AA 1D53      ADC	R21,R3
    00AB 5F6F      SUBI	R22,0xFF
    00AC 4F7F      SBCI	R23,0xFF
    00AD 3064      CPI	R22,4
    00AE E0E0      LDI	R30,0
    00AF 077E      CPC	R23,R30
    00B0 F388      BCS	0x00A2
(0033)  }
(0034)  
(0035)  value >>= 2;
    00B1 011A      MOVW	R2,R20
    00B2 9436      LSR	R3
    00B3 9427      ROR	R2
    00B4 9436      LSR	R3
    00B5 9427      ROR	R2
    00B6 01A1      MOVW	R20,R2
(0036)  
(0037)  adc_result=(value*4.97)/256;
    00B7 E90C      LDI	R16,0x9C
    00B8 E010      LDI	R17,0
    00B9 940E0534  CALL	lpm32
    00BB 933A      ST	R19,-Y
    00BC 932A      ST	R18,-Y
    00BD 931A      ST	R17,-Y
    00BE 930A      ST	R16,-Y
    00BF E908      LDI	R16,0x98
    00C0 E010      LDI	R17,0
    00C1 940E0534  CALL	lpm32
    00C3 933A      ST	R19,-Y
    00C4 932A      ST	R18,-Y
    00C5 931A      ST	R17,-Y
    00C6 930A      ST	R16,-Y
    00C7 018A      MOVW	R16,R20
    00C8 9516      LSR	R17
    00C9 9507      ROR	R16
    00CA 940E0590  CALL	int2fp
    00CC 933A      ST	R19,-Y
    00CD 932A      ST	R18,-Y
    00CE 931A      ST	R17,-Y
    00CF 930A      ST	R16,-Y
    00D0 940E06D9  CALL	empy32fs
    00D2 018A      MOVW	R16,R20
    00D3 7001      ANDI	R16,1
    00D4 7010      ANDI	R17,0
    00D5 940E0590  CALL	int2fp
    00D7 933A      ST	R19,-Y
    00D8 932A      ST	R18,-Y
    00D9 931A      ST	R17,-Y
    00DA 930A      ST	R16,-Y
    00DB 940E05EA  CALL	add32fs
    00DD 940E06D9  CALL	empy32fs
    00DF E904      LDI	R16,0x94
    00E0 E010      LDI	R17,0
    00E1 940E0534  CALL	lpm32
    00E3 933A      ST	R19,-Y
    00E4 932A      ST	R18,-Y
    00E5 931A      ST	R17,-Y
    00E6 930A      ST	R16,-Y
    00E7 940E064E  CALL	div32f
    00E9 9310012C  STS	adc_result+1,R17
    00EB 9300012B  STS	adc_result,R16
    00ED 9330012E  STS	adc_result+3,R19
    00EF 9320012D  STS	adc_result+2,R18
    00F1 940E0503  CALL	pop_gset2
    00F3 9508      RET
_main:
  i                    --> R22
  adc_str              --> R20
    00F4 9722      SBIW	R28,2
(0038) }
(0039) 
(0040) void main(void)
(0041) { 
(0042)  unsigned char *adc_str="The adc result of channel 0 is : 2.031 V\n\n",i=0;
    00F5 E040      LDI	R20,0
    00F6 E051      LDI	R21,1
    00F7 2766      CLR	R22
(0043)  CLI();
    00F8 94F8      BCLR	7
(0044)  Com_init();
    00F9 940E0280  CALL	_Com_init
(0045)  SEI();
    00FB 9478      BSET	7
    00FC C156      RJMP	0x0253
(0046)  while(1)
(0047)  {
(0048)   get_adc(i);
    00FD 2F06      MOV	R16,R22
    00FE 2711      CLR	R17
    00FF DF94      RCALL	_get_adc
(0049)   adc_str[26]=i+0x30;
    0100 2F86      MOV	R24,R22
    0101 5D80      SUBI	R24,0xD0
    0102 01FA      MOVW	R30,R20
    0103 8F82      STD	Z+26,R24
(0050)   adc_result *= 1000;
    0104 E900      LDI	R16,0x90
    0105 E010      LDI	R17,0
    0106 940E0534  CALL	lpm32
    0108 933A      ST	R19,-Y
    0109 932A      ST	R18,-Y
    010A 931A      ST	R17,-Y
    010B 930A      ST	R16,-Y
    010C 9040012D  LDS	R4,adc_result+2
    010E 9050012E  LDS	R5,adc_result+3
    0110 9020012B  LDS	R2,adc_result
    0112 9030012C  LDS	R3,adc_result+1
    0114 925A      ST	R5,-Y
    0115 924A      ST	R4,-Y
    0116 923A      ST	R3,-Y
    0117 922A      ST	R2,-Y
    0118 940E06DC  CALL	empy32f
    011A 9310012C  STS	adc_result+1,R17
    011C 9300012B  STS	adc_result,R16
    011E 9330012E  STS	adc_result+3,R19
    0120 9320012D  STS	adc_result+2,R18
(0051)   adc_str[33]=(unsigned int)adc_result/1000+0x30;
    0122 933A      ST	R19,-Y
    0123 932A      ST	R18,-Y
    0124 931A      ST	R17,-Y
    0125 930A      ST	R16,-Y
    0126 E80C      LDI	R16,0x8C
    0127 E010      LDI	R17,0
    0128 940E0534  CALL	lpm32
    012A 933A      ST	R19,-Y
    012B 932A      ST	R18,-Y
    012C 931A      ST	R17,-Y
    012D 930A      ST	R16,-Y
    012E 940E06A8  CALL	cmp32f
    0130 F0EC      BLT	0x014E
    0131 9040012D  LDS	R4,adc_result+2
    0133 9050012E  LDS	R5,adc_result+3
    0135 9020012B  LDS	R2,adc_result
    0137 9030012C  LDS	R3,adc_result+1
    0139 925A      ST	R5,-Y
    013A 924A      ST	R4,-Y
    013B 923A      ST	R3,-Y
    013C 922A      ST	R2,-Y
    013D E80C      LDI	R16,0x8C
    013E E010      LDI	R17,0
    013F 940E0534  CALL	lpm32
    0141 933A      ST	R19,-Y
    0142 932A      ST	R18,-Y
    0143 931A      ST	R17,-Y
    0144 930A      ST	R16,-Y
    0145 940E05F5  CALL	sub32f
    0147 940E0548  CALL	fp2int
    0149 01C8      MOVW	R24,R16
    014A 5080      SUBI	R24,0
    014B 4890      SBCI	R25,0x80
    014C 015C      MOVW	R10,R24
    014D C00B      RJMP	0x0159
    014E 9120012D  LDS	R18,adc_result+2
    0150 9130012E  LDS	R19,adc_result+3
    0152 9100012B  LDS	R16,adc_result
    0154 9110012C  LDS	R17,adc_result+1
    0156 940E0548  CALL	fp2int
    0158 0158      MOVW	R10,R16
    0159 EE28      LDI	R18,0xE8
    015A E033      LDI	R19,3
    015B 0185      MOVW	R16,R10
    015C 940E0460  CALL	div16u
    015E 01C8      MOVW	R24,R16
    015F 96C0      ADIW	R24,0x30
    0160 01FA      MOVW	R30,R20
    0161 A381      STD	Z+33,R24
(0052)   adc_str[35]=((unsigned int)adc_result%1000)/100+0x30;
    0162 9040012D  LDS	R4,adc_result+2
    0164 9050012E  LDS	R5,adc_result+3
    0166 9020012B  LDS	R2,adc_result
    0168 9030012C  LDS	R3,adc_result+1
    016A 925A      ST	R5,-Y
    016B 924A      ST	R4,-Y
    016C 923A      ST	R3,-Y
    016D 922A      ST	R2,-Y
    016E E80C      LDI	R16,0x8C
    016F E010      LDI	R17,0
    0170 940E0534  CALL	lpm32
    0172 933A      ST	R19,-Y
    0173 932A      ST	R18,-Y
    0174 931A      ST	R17,-Y
    0175 930A      ST	R16,-Y
    0176 940E06A8  CALL	cmp32f
    0178 F0EC      BLT	0x0196
    0179 9040012D  LDS	R4,adc_result+2
    017B 9050012E  LDS	R5,adc_result+3
    017D 9020012B  LDS	R2,adc_result
    017F 9030012C  LDS	R3,adc_result+1
    0181 925A      ST	R5,-Y
    0182 924A      ST	R4,-Y
    0183 923A      ST	R3,-Y
    0184 922A      ST	R2,-Y
    0185 E80C      LDI	R16,0x8C
    0186 E010      LDI	R17,0
    0187 940E0534  CALL	lpm32
    0189 933A      ST	R19,-Y
    018A 932A      ST	R18,-Y
    018B 931A      ST	R17,-Y
    018C 930A      ST	R16,-Y
    018D 940E05F5  CALL	sub32f
    018F 940E0548  CALL	fp2int
    0191 01C8      MOVW	R24,R16
    0192 5080      SUBI	R24,0
    0193 4890      SBCI	R25,0x80
    0194 015C      MOVW	R10,R24
    0195 C00B      RJMP	0x01A1
    0196 9120012D  LDS	R18,adc_result+2
    0198 9130012E  LDS	R19,adc_result+3
    019A 9100012B  LDS	R16,adc_result
    019C 9110012C  LDS	R17,adc_result+1
    019E 940E0548  CALL	fp2int
    01A0 0158      MOVW	R10,R16
    01A1 EE28      LDI	R18,0xE8
    01A2 E033      LDI	R19,3
    01A3 0185      MOVW	R16,R10
    01A4 940E045E  CALL	mod16u
    01A6 E624      LDI	R18,0x64
    01A7 E030      LDI	R19,0
    01A8 940E0460  CALL	div16u
    01AA 01C8      MOVW	R24,R16
    01AB 96C0      ADIW	R24,0x30
    01AC 01FA      MOVW	R30,R20
    01AD A383      STD	Z+35,R24
(0053)   adc_str[36]=((unsigned int)adc_result%100)/10+0x30;
    01AE 9040012D  LDS	R4,adc_result+2
    01B0 9050012E  LDS	R5,adc_result+3
    01B2 9020012B  LDS	R2,adc_result
    01B4 9030012C  LDS	R3,adc_result+1
    01B6 925A      ST	R5,-Y
    01B7 924A      ST	R4,-Y
    01B8 923A      ST	R3,-Y
    01B9 922A      ST	R2,-Y
    01BA E80C      LDI	R16,0x8C
    01BB E010      LDI	R17,0
    01BC 940E0534  CALL	lpm32
    01BE 933A      ST	R19,-Y
    01BF 932A      ST	R18,-Y
    01C0 931A      ST	R17,-Y
    01C1 930A      ST	R16,-Y
    01C2 940E06A8  CALL	cmp32f
    01C4 F0EC      BLT	0x01E2
    01C5 9040012D  LDS	R4,adc_result+2
    01C7 9050012E  LDS	R5,adc_result+3
    01C9 9020012B  LDS	R2,adc_result
    01CB 9030012C  LDS	R3,adc_result+1
    01CD 925A      ST	R5,-Y
    01CE 924A      ST	R4,-Y
    01CF 923A      ST	R3,-Y
    01D0 922A      ST	R2,-Y
    01D1 E80C      LDI	R16,0x8C
    01D2 E010      LDI	R17,0
    01D3 940E0534  CALL	lpm32
    01D5 933A      ST	R19,-Y
    01D6 932A      ST	R18,-Y
    01D7 931A      ST	R17,-Y
    01D8 930A      ST	R16,-Y
    01D9 940E05F5  CALL	sub32f
    01DB 940E0548  CALL	fp2int
    01DD 01C8      MOVW	R24,R16
    01DE 5080      SUBI	R24,0
    01DF 4890      SBCI	R25,0x80
    01E0 015C      MOVW	R10,R24
    01E1 C00B      RJMP	0x01ED
    01E2 9120012D  LDS	R18,adc_result+2
    01E4 9130012E  LDS	R19,adc_result+3
    01E6 9100012B  LDS	R16,adc_result
    01E8 9110012C  LDS	R17,adc_result+1
    01EA 940E0548  CALL	fp2int
    01EC 0158      MOVW	R10,R16
    01ED E624      LDI	R18,0x64
    01EE E030      LDI	R19,0
    01EF 0185      MOVW	R16,R10
    01F0 940E045E  CALL	mod16u
    01F2 E02A      LDI	R18,0xA
    01F3 E030      LDI	R19,0
    01F4 940E0460  CALL	div16u
    01F6 01C8      MOVW	R24,R16
    01F7 96C0      ADIW	R24,0x30
    01F8 01FA      MOVW	R30,R20
    01F9 A384      STD	Z+36,R24
(0054)   adc_str[37]=(unsigned int)adc_result%10+0x30;
    01FA 9040012D  LDS	R4,adc_result+2
    01FC 9050012E  LDS	R5,adc_result+3
    01FE 9020012B  LDS	R2,adc_result
    0200 9030012C  LDS	R3,adc_result+1
    0202 925A      ST	R5,-Y
    0203 924A      ST	R4,-Y
    0204 923A      ST	R3,-Y
    0205 922A      ST	R2,-Y
    0206 E80C      LDI	R16,0x8C
    0207 E010      LDI	R17,0
    0208 940E0534  CALL	lpm32
    020A 933A      ST	R19,-Y
    020B 932A      ST	R18,-Y
    020C 931A      ST	R17,-Y
    020D 930A      ST	R16,-Y
    020E 940E06A8  CALL	cmp32f
    0210 F0EC      BLT	0x022E
    0211 9040012D  LDS	R4,adc_result+2
    0213 9050012E  LDS	R5,adc_result+3
    0215 9020012B  LDS	R2,adc_result
    0217 9030012C  LDS	R3,adc_result+1
    0219 925A      ST	R5,-Y
    021A 924A      ST	R4,-Y
    021B 923A      ST	R3,-Y
    021C 922A      ST	R2,-Y
    021D E80C      LDI	R16,0x8C
    021E E010      LDI	R17,0
    021F 940E0534  CALL	lpm32
    0221 933A      ST	R19,-Y
    0222 932A      ST	R18,-Y
    0223 931A      ST	R17,-Y
    0224 930A      ST	R16,-Y

⌨️ 快捷键说明

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