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

📄 adc.lst

📁 ATMEG8单片机的自带10位AD转换器程序
💻 LST
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E0      CPI	R30,0x60
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D031      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\ADC\ADC.C
(0001) /******************************
(0002)        NAME: ADC.C
(0003) 	   DATA:2007/5/8
(0004) 	   AUTHOR: DIP STIDIO
(0005) 	   CPU: ATMEGA8
(0006) 	    8.000MHz
(0007) ******************************/
(0008) #include <iom8v.h>
(0009) #include <macros.h>
(0010) #pragma interrupt_handler USART_receive: 12  
(0011) //------------------------------------------------------------------
(0012) //                      ADC初始化函数
(0013) //------------------------------------------------------------------
(0014) void initial_ADC(void)
(0015) {
(0016)          ADMUX=0XE0;  //使用片内2.56基准电压,左对齐模式。
_initial_ADC:
    0033 EE80      LDI	R24,0xE0
    0034 B987      OUT	0x07,R24
(0017) 		 
(0018) //  	 ADMUX=0XC0;  //使用片内2.56基准电压,右对齐模式。
(0019) 
(0020) 		 ADCSRA=0X86; //开启ADC功能,关中断,时钟为系统时钟的64分频(BIT2-BIT0确定分频数)
    0035 E886      LDI	R24,0x86
    0036 B986      OUT	0x06,R24
    0037 9508      RET
_ADC_run8bit:
  result               --> R20
  channel              --> R16
    0038 D038      RCALL	push_gset1
(0021) 		  
(0022) }
(0023) //-------------------------------------------------------------------
(0024) //		                ADC转换函数(8位精度,左对齐,单次采样)
(0025) //-------------------------------------------------------------------
(0026) unsigned char ADC_run8bit(unsigned char channel)//通道号为0X00--0X07
(0027) {
(0028)     unsigned char result=0;   //转换结果
    0039 2744      CLR	R20
(0029) 	
(0030)        		 ADMUX|=channel;  //确定通道号
    003A B027      IN	R2,0x07
    003B 2A20      OR	R2,R16
    003C B827      OUT	0x07,R2
(0031) 			 
(0032) 	   		 ADCSRA|=0X40;     //启动AD转换(通过写ADSC位实现)
    003D 9A36      SBI	0x06,6
(0033) 			  
(0034) 			 result=ADCH;      //储存采样结果
    003E B145      IN	R20,0x05
(0035) 			 
(0036) 	   return(result);  //返回结果
    003F 2F04      MOV	R16,R20
    0040 D033      RCALL	pop_gset1
    0041 9508      RET
(0037) }
(0038) /*
(0039) //-------------------------------------------------------------------
(0040) //		                ADC转换函数(10位精度,左对齐,单次采样)
(0041) //-------------------------------------------------------------------
(0042) int ADC_run16bit(unsigned char channel)//通道号为0X00--0X07
(0043) {
(0044)     int result=0;   //转换结果
(0045)     int	 RESH=0,RESL=0;   //存储高低位结果
(0046) 	
(0047)        		 ADCMUX|=channel;  //确定通道号
(0048) 			 
(0049) 	   		 ADCSRA|=0X40;     //启动AD转换(通过写ADSC位实现)
(0050) 			  
(0051) 			 RESH=ADCH;      //储存高位结果
(0052) 			 RESL=ADCL;      //储存低位结果
(0053) 			 
(0054) 			 result=(RESH<<8)|RESL;
(0055) 			 
(0056) 	   return(result);  //返回结果
(0057) }
(0058) */
(0059) //------------------------------------------------------------------
(0060) //						   USART初始化函数
(0061) //------------------------------------------------------------------
(0062) void initial_USART(void)
(0063) {
(0064) //-----端口设置--------
(0065)     		PORTB = 0x00;
_initial_USART:
    0042 2422      CLR	R2
    0043 BA28      OUT	0x18,R2
(0066)     		DDRB  = 0x00;
    0044 BA27      OUT	0x17,R2
(0067)     		PORTC = 0x00; 
    0045 BA25      OUT	0x15,R2
(0068)     		DDRC  = 0x00;
    0046 BA24      OUT	0x14,R2
(0069)     		PORTD = 0x00;
    0047 BA22      OUT	0x12,R2
(0070)     		DDRD  = 0xFF;
    0048 EF8F      LDI	R24,0xFF
    0049 BB81      OUT	0x11,R24
(0071) //------USART设置-------
(0072) 			UCSRA=0X00;   //波特率不加倍,同时清空一些标志位
    004A B82B      OUT	0x0B,R2
(0073) 			UCSRB=0X98;   //使能接收和发送,数据位为8位,开接收中断
    004B E988      LDI	R24,0x98
    004C B98A      OUT	0x0A,R24
(0074) 			UCSRC=0X86;   //异步方式,禁止奇偶校验,数据位为8位
    004D E886      LDI	R24,0x86
    004E BD80      OUT	0x20,R24
(0075) 	//时钟频率8M,波特率9600
(0076) 			UBRRH=0X00;
    004F BC20      OUT	0x20,R2
(0077) 			UBRRL=0X33;
    0050 E383      LDI	R24,0x33
    0051 B989      OUT	0x09,R24
(0078) 	//时钟频率8M,波特率57600
(0079) 	//         UBRRH=0X00;
(0080) 	//		   UBRRL=0X08;
(0081) 	
(0082) 			SEI();     //全局开中断
    0052 9478      BSET	7
    0053 9508      RET
(0083) }            
(0084) //--------------------------------------------------------------
(0085) //						   发送函数
(0086) //--------------------------------------------------------------
(0087) void send(unsigned char DAT)
(0088) {
(0089)    	 			   UDR=DAT;  //发送数据
_send:
  DAT                  --> R16
    0054 B90C      OUT	0x0C,R16
(0090) 				     while ( !( UCSRA & (1<<TXC)) );   //检验TXC位,当TXC=1时可以表示发送完成
    0055 9B5E      SBIS	0x0B,6
    0056 CFFE      RJMP	0x0055
    0057 9508      RET
_USART_receive:
  RECdata              --> R22
  ADCdata              --> R20
    0058 D02F      RCALL	push_lset
    0059 D015      RCALL	push_gset2
(0091) }					 	   	 		  			  	   //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
(0092) //--------------------------------------------------------------
(0093) //						接收中断服务函数
(0094) //--------------------------------------------------------------
(0095) void USART_receive(void)
(0096) {    unsigned char ADCdata=0X04;
    005A E044      LDI	R20,4
(0097)  	 unsigned char RECdata;  
(0098)                 RECdata=UDR;
    005B B16C      IN	R22,0x0C
(0099) 			      ADCdata=ADC_run8bit(RECdata);//AD转换
    005C 2F06      MOV	R16,R22
    005D DFDA      RCALL	_ADC_run8bit
    005E 2F40      MOV	R20,R16
(0100) 				            send( ADCdata);
    005F DFF4      RCALL	_send
    0060 D006      RCALL	pop_gset2
    0061 D03D      RCALL	pop_lset
    0062 9518      RETI
(0101) 	
(0102) }
(0103) //------------------------------------------------------------------
(0104) //                       主函数
(0105) //------------------------------------------------------------------	
(0106) void main(void)
(0107) {
(0108)  	  initial_USART();  		    		 
_main:
    0063 DFDE      RCALL	_initial_USART
(0109)  	   initial_ADC();
    0064 DFCE      RCALL	_initial_ADC
(0110) 	   
(0111) 	   while(1);
FILE: <library>
    0065 CFFF      RJMP	0x0065
    0066 9508      RET
pop_gset2:
    0067 E0E2      LDI	R30,2
    0068 C00C      RJMP	pop
push_gset5:
    0069 92FA      ST	R15,-Y
    006A 92EA      ST	R14,-Y
push_gset4:
    006B 92DA      ST	R13,-Y
    006C 92CA      ST	R12,-Y
push_gset3:
    006D 92BA      ST	R11,-Y
    006E 92AA      ST	R10,-Y
push_gset2:
    006F 937A      ST	R23,-Y
    0070 936A      ST	R22,-Y
push_gset1:
    0071 935A      ST	R21,-Y
    0072 934A      ST	R20,-Y
    0073 9508      RET
pop_gset1:
    0074 E0E1      LDI	R30,1
pop:
    0075 9149      LD	R20,Y+
    0076 9159      LD	R21,Y+
    0077 FDE0      SBRC	R30,0
    0078 9508      RET
    0079 9169      LD	R22,Y+
    007A 9179      LD	R23,Y+
    007B FDE1      SBRC	R30,1
    007C 9508      RET
    007D 90A9      LD	R10,Y+
    007E 90B9      LD	R11,Y+
    007F FDE2      SBRC	R30,2
    0080 9508      RET
    0081 90C9      LD	R12,Y+
    0082 90D9      LD	R13,Y+
    0083 FDE3      SBRC	R30,3
    0084 9508      RET
    0085 90E9      LD	R14,Y+
    0086 90F9      LD	R15,Y+
    0087 9508      RET
push_lset:
    0088 93FA      ST	R31,-Y
    0089 93EA      ST	R30,-Y
    008A 93BA      ST	R27,-Y
    008B 93AA      ST	R26,-Y
    008C 939A      ST	R25,-Y
    008D 938A      ST	R24,-Y
    008E 933A      ST	R19,-Y
    008F 932A      ST	R18,-Y
    0090 931A      ST	R17,-Y
    0091 930A      ST	R16,-Y
    0092 929A      ST	R9,-Y
    0093 928A      ST	R8,-Y
    0094 927A      ST	R7,-Y
    0095 926A      ST	R6,-Y
    0096 925A      ST	R5,-Y
    0097 924A      ST	R4,-Y
    0098 923A      ST	R3,-Y
    0099 922A      ST	R2,-Y
    009A 921A      ST	R1,-Y
    009B 920A      ST	R0,-Y
    009C B60F      IN	R0,0x3F
    009D 920A      ST	R0,-Y
    009E 9508      RET
pop_lset:
    009F 9009      LD	R0,Y+
    00A0 BE0F      OUT	0x3F,R0
    00A1 9009      LD	R0,Y+
    00A2 9019      LD	R1,Y+
    00A3 9029      LD	R2,Y+
    00A4 9039      LD	R3,Y+
    00A5 9049      LD	R4,Y+
    00A6 9059      LD	R5,Y+
    00A7 9069      LD	R6,Y+
    00A8 9079      LD	R7,Y+
    00A9 9089      LD	R8,Y+
    00AA 9099      LD	R9,Y+
    00AB 9109      LD	R16,Y+
    00AC 9119      LD	R17,Y+
    00AD 9129      LD	R18,Y+
    00AE 9139      LD	R19,Y+
    00AF 9189      LD	R24,Y+
    00B0 9199      LD	R25,Y+
    00B1 91A9      LD	R26,Y+
    00B2 91B9      LD	R27,Y+
    00B3 91E9      LD	R30,Y+
    00B4 91F9      LD	R31,Y+
    00B5 9508      RET

⌨️ 快捷键说明

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