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

📄 adc.lst

📁 AtMega169的ADC功能的测试C语言程序
💻 LST
字号:
__start:
__text_start:
      38 EFCF      LDI	R28,0xFF
      39 E0D4      LDI	R29,4
      3A BFCD      OUT	0x3D,R28
      3B BFDE      OUT	0x3E,R29
      3C 51C0      SUBI	R28,0x10
      3D 40D0      SBCI	R29,0
      3E EA0A      LDI	R16,0xAA
      3F 8308      STD	Y+0,R16
      40 2400      CLR	R0
      41 E0E4      LDI	R30,4
      42 E0F1      LDI	R31,1
      43 E011      LDI	R17,1
      44 30E6      CPI	R30,6
      45 07F1      CPC	R31,R17
      46 F011      BEQ	0x0049
      47 9201      ST	R0,Z+
      48 CFFB      RJMP	0x0044
      49 8300      STD	Z+0,R16
      4A E6EC      LDI	R30,0x6C
      4B E0F0      LDI	R31,0
      4C E0A0      LDI	R26,0
      4D E0B1      LDI	R27,1
      4E E010      LDI	R17,0
      4F 37E0      CPI	R30,0x70
      50 07F1      CPC	R31,R17
      51 F021      BEQ	0x0056
      52 95C8      LPM
      53 9631      ADIW	R30,1
      54 920D      ST	R0,X+
      55 CFF9      RJMP	0x004F
      56 940E 00B9 CALL	_main
_exit:
      58 CFFF      RJMP	_exit
FILE: E:\WORK\WORK_DEMO\169P_demo\169ADC\AD.C
(0001) // **************************************************************
(0002) // *** 		         广 州 天 河 双 龙 电 子 公 司 	          ***
(0003) // ***                   http://www.sl.com.cn                 ***
(0004) // ***                   实验:ADC转换		                   ***
(0005) // ***                  作者:zxy@sl.com.cn                   ***
(0006) // ***                       2006年3月28日                    ***
(0007) // ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
(0008) // **************************************************************
(0009) //用跳线短接J3的ADC2,调节可变电阻R7,LED显示将发生变化 
(0010) #include <iom169v.h>
(0011) #include <macros.h>
(0012) #define Vref   3212//参考电压值,注意不同环境下的Vref不相同
(0013) 
(0014) extern const unsigned char seg_table[16];
(0015) extern unsigned char led_buff[4];
(0016) extern void delay_ms(unsigned int time);
(0017) extern void display(void);
(0018) unsigned int adc_rel;//AD转换结果
(0019) 
(0020) //ADC初始化
(0021) void adc_init(void)
(0022) {
(0023)  ADCSRA = 0x00; //设置前,先关闭ADC
_adc_init:
      59 2422      CLR	R2
      5A 9220 007A STS	0x007A,R2
(0024)  ADMUX =(1<<REFS0)|(1<<MUX0);//选择内部AVCC为基准,单端输入口为ADC1
      5C E481      LDI	R24,0x41
      5D 9380 007C STS	0x007C,R24
(0025)  ACSR  =(1<<ACD);//关闭模拟比较器,禁止位P148
      5F E880      LDI	R24,0x80
      60 BF80      OUT	0x30,R24
(0026)  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//ADC时钟64分频
      61 EC8F      LDI	R24,0xCF
      62 9380 007A STS	0x007A,R24
      64 9508      RET
_adc_isr:
      65 938A      ST	R24,-Y
      66 939A      ST	R25,-Y
      67 B78F      IN	R24,0x3F
      68 938A      ST	R24,-Y
(0027) }
(0028) 
(0029) //ADC完成中断
(0030) #pragma interrupt_handler adc_isr:20 
(0031) //AD 中断  
(0032) 
(0033) void adc_isr(void)
(0034) { 
(0035) 
(0036)  adc_rel = ADC&0x3ff;
      69 9180 0078 LDS	R24,0x0078
      6B 9190 0079 LDS	R25,0x0079
      6D 7093      ANDI	R25,3
      6E 9390 0105 STS	adc_rel+1,R25
      70 9380 0104 STS	adc_rel,R24
(0037)  //ADMUX =(1<<REFS0)|(1<<MUX0);
(0038)  ADCSRA|=(1<<ADSC);//启动AD转换
      72 9180 007A LDS	R24,0x007A
      74 6480      ORI	R24,0x40
      75 9380 007A STS	0x007A,R24
      77 9189      LD	R24,Y+
      78 BF8F      OUT	0x3F,R24
      79 9199      LD	R25,Y+
      7A 9189      LD	R24,Y+
      7B 9518      RETI
_ADCtoBCD:
  i                    --> R12
  temp                 --> R10
      7C 940E 0165 CALL	push_xgsetF03C
      7E 0158      MOVW	R10,R16
(0039) }
(0040) 
(0041) //ADC结果转换成电压值
(0042) void ADCtoBCD(unsigned int temp)
(0043)  {
(0044)   unsigned char i;
(0045)   temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/1024);//ADC结果转换成电压值
      7F 0115      MOVW	R2,R10
      80 2444      CLR	R4
      81 2455      CLR	R5
      82 E84C      LDI	R20,0x8C
      83 E05C      LDI	R21,0xC
      84 E060      LDI	R22,0
      85 E070      LDI	R23,0
      86 925A      ST	R5,-Y
      87 924A      ST	R4,-Y
      88 923A      ST	R3,-Y
      89 922A      ST	R2,-Y
      8A 018A      MOVW	R16,R20
      8B 019B      MOVW	R18,R22
      8C 940E 0131 CALL	empy32s
      8E E08A      LDI	R24,0xA
      8F E090      LDI	R25,0
      90 938A      ST	R24,-Y
      91 940E 01A2 CALL	lsr32
      93 0158      MOVW	R10,R16
(0046)   for(i=0;i<4;i++)
      94 24CC      CLR	R12
      95 C019      RJMP	0x00AF
(0047)   {
(0048)    led_buff[i]=seg_table[temp%10];//结果存入显示缓存
      96 E02A      LDI	R18,0xA
      97 E030      LDI	R19,0
      98 0185      MOVW	R16,R10
      99 940E 0115 CALL	mod16u
      9B 01F8      MOVW	R30,R16
      9C E58C      LDI	R24,0x5C
      9D E090      LDI	R25,0
      9E 0FE8      ADD	R30,R24
      9F 1FF9      ADC	R31,R25
      A0 9024      LPM	R2,0(Z)
      A1 E080      LDI	R24,0
      A2 E091      LDI	R25,1
      A3 2DEC      MOV	R30,R12
      A4 27FF      CLR	R31
      A5 0FE8      ADD	R30,R24
      A6 1FF9      ADC	R31,R25
      A7 8220      STD	Z+0,R2
(0049)    temp=temp/10;
      A8 E02A      LDI	R18,0xA
      A9 E030      LDI	R19,0
      AA 0185      MOVW	R16,R10
      AB 940E 0117 CALL	div16u
      AD 0158      MOVW	R10,R16
      AE 94C3      INC	R12
      AF 2D8C      MOV	R24,R12
      B0 3084      CPI	R24,4
      B1 F320      BCS	0x0096
(0050)    }
(0051)   led_buff[3]&=0x7f; 
      B2 9180 0103 LDS	R24,led_buff+3
      B4 778F      ANDI	R24,0x7F
      B5 9380 0103 STS	led_buff+3,R24
      B7 940C 016E JMP	pop_xgsetF03C
(0052)  }
(0053) 
(0054) void main(void)
(0055) { 
(0056)  unsigned int adc_old;
(0057)     adc_init();//AD初始化
_main:
  adc_old              --> R10
      B9 DF9F      RCALL	_adc_init
(0058) 	  
(0059) 	  DDRE=0xff;//E口初始化
      BA EF8F      LDI	R24,0xFF
      BB B98D      OUT	0x0D,R24
(0060) 	  PORTE=0xff;//E口初始化
      BC B98E      OUT	0x0E,R24
(0061) 	  DDRB|=0xf0;//B口初始化
      BD B184      IN	R24,0x04
      BE 6F80      ORI	R24,0xF0
      BF B984      OUT	0x04,R24
(0062) 	  PORTB|=0xf0;//B口初始化
      C0 B185      IN	R24,0x05
      C1 6F80      ORI	R24,0xF0
      C2 B985      OUT	0x05,R24
(0063) 	  SEI();//使能全局中断
      C3 9478      BSET	7
      C4 C00C      RJMP	0x00D1
(0064)     while(1)
(0065)     { 
(0066) 	   if(adc_old!=adc_rel)
      C5 9020 0104 LDS	R2,adc_rel
      C7 9030 0105 LDS	R3,adc_rel+1
      C9 14A2      CP	R10,R2
      CA 04B3      CPC	R11,R3
      CB F019      BEQ	0x00CF
(0067)             {
(0068) 	            adc_old=adc_rel;  //AD转换结果
      CC 0151      MOVW	R10,R2
(0069) 	            ADCtoBCD(adc_old);//进制转换
      CD 0181      MOVW	R16,R2
      CE DFAD      RCALL	_ADCtoBCD
(0070) 	          }	   	
(0071) 	   display();	//显示函数
      CF 940E 00EA CALL	_display
      D1 CFF3      RJMP	0x00C5
      D2 9508      RET
FILE: E:\WORK\WORK_DEMO\169P_demo\169ADC\LEDNUM.C
(0001) #include<iom169v.h>
(0002) const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
(0003) 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
(0004) unsigned char led_buff[4]={0,0,0,0};
(0005) /*				微秒级延时程序	  		*/
(0006) void delay_us(int time)
(0007) 	 {     
(0008)   	  do
(0009) 	  	{
(0010) 		 time--;
_delay_us:
  time                 --> R16
      D3 5001      SUBI	R16,1
      D4 4010      SBCI	R17,0
(0011) 		}	
(0012)   	  while (time>1);
      D5 E081      LDI	R24,1
      D6 E090      LDI	R25,0
      D7 1780      CP	R24,R16
      D8 0791      CPC	R25,R17
      D9 F3CC      BLT	0x00D3
      DA 9508      RET
_delay_ms:
  time                 --> R20
      DB 934A      ST	R20,-Y
      DC 935A      ST	R21,-Y
      DD 01A8      MOVW	R20,R16
(0013) 	 }	  
(0014) /*	  		    毫秒级延时程序			*/	 
(0015) void delay_ms(unsigned int time)
(0016) 	 {
      DE C005      RJMP	0x00E4
(0017) 	  while(time!=0)
(0018) 	  	  {		
(0019) 		   delay_us(1000);
      DF EE08      LDI	R16,0xE8
      E0 E013      LDI	R17,3
      E1 DFF1      RCALL	_delay_us
(0020) 		   time--;
      E2 5041      SUBI	R20,1
      E3 4050      SBCI	R21,0
      E4 3040      CPI	R20,0
      E5 0745      CPC	R20,R21
      E6 F7C1      BNE	0x00DF
      E7 9159      LD	R21,Y+
      E8 9149      LD	R20,Y+
      E9 9508      RET
_display:
  n                    --> R20
      EA 934A      ST	R20,-Y
      EB 935A      ST	R21,-Y
(0021) 		  }
(0022) 	 }					
(0023) void display(void)
(0024) 	 {
(0025) 	  unsigned char n;
(0026) 	  DDRE=0xff;
      EC EF8F      LDI	R24,0xFF
      ED B98D      OUT	0x0D,R24
(0027) 	  PORTE=0xff;
      EE B98E      OUT	0x0E,R24
(0028) 	  DDRB|=0xf0;
      EF B184      IN	R24,0x04
      F0 6F80      ORI	R24,0xF0
      F1 B984      OUT	0x04,R24
(0029) 	  PORTB|=0xf0;
      F2 B185      IN	R24,0x05
      F3 6F80      ORI	R24,0xF0
      F4 B985      OUT	0x05,R24
(0030) 	  for(n=0;n<4;n++)
      F5 2744      CLR	R20
      F6 C019      RJMP	0x0110
(0031) 	  	 {		  
(0032) 		  PORTE=led_buff[n];
      F7 E080      LDI	R24,0
      F8 E091      LDI	R25,1
      F9 2FE4      MOV	R30,R20
      FA 27FF      CLR	R31
      FB 0FE8      ADD	R30,R24
      FC 1FF9      ADC	R31,R25
      FD 8020      LDD	R2,Z+0
      FE B82E      OUT	0x0E,R2
(0033) 		  PORTB&=~(1<<(n+4));
      FF 2F14      MOV	R17,R20
     100 5F1C      SUBI	R17,0xFC
     101 E001      LDI	R16,1
     102 940E 019C CALL	lsl8
     104 2E20      MOV	R2,R16
     105 9420      COM	R2
     106 B035      IN	R3,0x05
     107 2032      AND	R3,R2
     108 B835      OUT	0x05,R3
(0034) 		  delay_ms(1);
     109 E001      LDI	R16,1
     10A E010      LDI	R17,0
     10B DFCF      RCALL	_delay_ms
(0035) 		  PORTB|=0xf0;		  
FILE: <library>
     10C B185      IN	R24,0x05
     10D 6F80      ORI	R24,0xF0
     10E B985      OUT	0x05,R24
     10F 9543      INC	R20
     110 3044      CPI	R20,4
     111 F328      BCS	0x00F7
     112 9159      LD	R21,Y+
     113 9149      LD	R20,Y+
     114 9508      RET
mod16u:
     115 9468      BSET	6
     116 C001      RJMP	xdiv16u
div16u:
     117 94E8      BCLR	6
xdiv16u:
     118 92EA      ST	R14,-Y
     119 92FA      ST	R15,-Y
     11A 938A      ST	R24,-Y
     11B 24EE      CLR	R14
     11C 24FF      CLR	R15
     11D E180      LDI	R24,0x10
     11E 0F00      LSL	R16
     11F 1F11      ROL	R17
     120 1CEE      ROL	R14
     121 1CFF      ROL	R15
     122 16E2      CP	R14,R18
     123 06F3      CPC	R15,R19
     124 F018      BCS	0x0128
     125 1AE2      SUB	R14,R18
     126 0AF3      SBC	R15,R19
     127 9503      INC	R16
     128 958A      DEC	R24
     129 F7A1      BNE	0x011E
     12A F416      BRTC	0x012D
     12B 2D0E      MOV	R16,R14
     12C 2D1F      MOV	R17,R15
     12D 9189      LD	R24,Y+
     12E 90F9      LD	R15,Y+
     12F 90E9      LD	R14,Y+
     130 9508      RET
empy32s:
empy32u:
     131 940E 0177 CALL	long_prolog
     133 927A      ST	R7,-Y
     134 940E 0190 CALL	tstzero1
     136 F159      BEQ	0x0162
     137 2477      CLR	R7
     138 940E 0196 CALL	tstzero2
     13A F419      BNE	0x013E
     13B 018C      MOVW	R16,R24
     13C 019D      MOVW	R18,R26
     13D C024      RJMP	0x0162
     13E 920A      ST	R0,-Y
     13F 921A      ST	R1,-Y
     140 9F08      MUL	R16,R24
     141 2CB0      MOV	R11,R0
     142 2CA1      MOV	R10,R1
     143 9F28      MUL	R18,R24
     144 2C90      MOV	R9,R0
     145 2C81      MOV	R8,R1
     146 9F18      MUL	R17,R24
     147 0CA0      ADD	R10,R0
     148 1C91      ADC	R9,R1
     149 1C87      ADC	R8,R7
     14A 9F09      MUL	R16,R25
     14B 0CA0      ADD	R10,R0
     14C 1C91      ADC	R9,R1
     14D 1C87      ADC	R8,R7
     14E 9F19      MUL	R17,R25
     14F 0C90      ADD	R9,R0
     150 1C81      ADC	R8,R1
     151 9F0A      MUL	R16,R26
     152 0C90      ADD	R9,R0
     153 1C81      ADC	R8,R1
     154 9F38      MUL	R19,R24
     155 0C80      ADD	R8,R0
     156 9F29      MUL	R18,R25
     157 0C80      ADD	R8,R0
     158 9F1A      MUL	R17,R26
     159 0C80      ADD	R8,R0
     15A 9F0B      MUL	R16,R27
     15B 0C80      ADD	R8,R0
     15C 9019      LD	R1,Y+
     15D 9009      LD	R0,Y+
     15E 2D0B      MOV	R16,R11
     15F 2D1A      MOV	R17,R10
     160 2D29      MOV	R18,R9
     161 2D38      MOV	R19,R8
     162 9079      LD	R7,Y+
     163 940C 0185 JMP	long_epilog
push_xgsetF03C:
     165 937A      ST	R23,-Y
     166 936A      ST	R22,-Y
     167 935A      ST	R21,-Y
     168 934A      ST	R20,-Y
     169 92DA      ST	R13,-Y
     16A 92CA      ST	R12,-Y
     16B 92BA      ST	R11,-Y
     16C 92AA      ST	R10,-Y
     16D 9508      RET
pop_xgsetF03C:
     16E 90A9      LD	R10,Y+
     16F 90B9      LD	R11,Y+
     170 90C9      LD	R12,Y+
     171 90D9      LD	R13,Y+
     172 9149      LD	R20,Y+
     173 9159      LD	R21,Y+
     174 9169      LD	R22,Y+
     175 9179      LD	R23,Y+
     176 9508      RET
long_prolog:
     177 928A      ST	R8,-Y
     178 929A      ST	R9,-Y
     179 92AA      ST	R10,-Y
     17A 92BA      ST	R11,-Y
     17B 93EA      ST	R30,-Y
     17C 938A      ST	R24,-Y
     17D 939A      ST	R25,-Y
     17E 93AA      ST	R26,-Y
     17F 93BA      ST	R27,-Y
     180 8589      LDD	R24,Y+9
     181 859A      LDD	R25,Y+10
     182 85AB      LDD	R26,Y+11
     183 85BC      LDD	R27,Y+12
     184 9508      RET
long_epilog:
     185 91B9      LD	R27,Y+
     186 91A9      LD	R26,Y+
     187 9199      LD	R25,Y+
     188 9189      LD	R24,Y+
     189 91E9      LD	R30,Y+
     18A 90B9      LD	R11,Y+
     18B 90A9      LD	R10,Y+
     18C 9099      LD	R9,Y+
     18D 9089      LD	R8,Y+
     18E 9624      ADIW	R28,4
     18F 9508      RET
tstzero1:
     190 27EE      CLR	R30
     191 2BE0      OR	R30,R16
     192 2BE1      OR	R30,R17
     193 2BE2      OR	R30,R18
     194 2BE3      OR	R30,R19
     195 9508      RET
tstzero2:
     196 27EE      CLR	R30
     197 2BE8      OR	R30,R24
     198 2BE9      OR	R30,R25
     199 2BEA      OR	R30,R26
     19A 2BEB      OR	R30,R27
     19B 9508      RET
lsl8:
     19C 2311      TST	R17
     19D F019      BEQ	0x01A1
     19E 0F00      LSL	R16
     19F 951A      DEC	R17
     1A0 CFFB      RJMP	lsl8
     1A1 9508      RET
lsr32:
     1A2 920F      PUSH	R0
     1A3 9009      LD	R0,Y+
     1A4 2000      TST	R0
     1A5 F031      BEQ	0x01AC
     1A6 9536      LSR	R19
     1A7 9527      ROR	R18
     1A8 9517      ROR	R17
     1A9 9507      ROR	R16
     1AA 940A      DEC	R0
     1AB CFF8      RJMP	0x01A4
     1AC 900F      POP	R0
     1AD 9508      RET

⌨️ 快捷键说明

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