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

📄 adc.lst

📁 我自己编写的atmega16的adc的范例
💻 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 51C0      SUBI	R28,0x10
    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 940E0060  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: F:\自编程序\M16\ADC\UART.C
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) #pragma interrupt_handler	USART_Recive_Complete_handler:12
(0004) #pragma interrupt_handler	USART_Data_Register_Empty_handler:13
(0005) #pragma interrupt_handler	USART_Transmit_Complete_handler:14
(0006) void USART_Init(void)
(0007) {
(0008)  //{{WIZARD_MAP(UART)
(0009)     // crystal: 16M
(0010) 	// Baud Rate: 9600
(0011) 	// Character Size: 8-bit
(0012) 	// Mode: Asynchronous
(0013) 	// Parity: Disabled
(0014) 	// Stop Bit: 1-bit
(0015) 	UBRRL = 0x33;
_USART_Init:
    004B E383      LDI	R24,0x33
    004C B989      OUT	0x09,R24
(0016) 	UBRRH = 0x00;
    004D 2422      CLR	R2
    004E BC20      OUT	0x20,R2
(0017) 	UCSRA = 0x00;
    004F B82B      OUT	0x0B,R2
(0018) 	UCSRC = 0x86;
    0050 E886      LDI	R24,0x86
    0051 BD80      OUT	0x20,R24
(0019) 	UCSRB = 0x18;
    0052 E188      LDI	R24,0x18
    0053 B98A      OUT	0x0A,R24
(0020) 	//UCSRB|=0X80;//开接收结束中断
(0021) 	//UCSRB|=0X40;//开发送结束中断
(0022)     //UCSRB|=0X20;//开数据寄存器空中断
(0023) }
    0054 9508      RET
(0024) void USART_Transmit(unsigned char data)
(0025) {
(0026)    /* 等待发送缓冲器为空 */
(0027)    while ( !( UCSRA & (1<<UDRE)) );
_USART_Transmit:
  data                 --> R16
    0055 9B5D      SBIS	0x0B,5
    0056 CFFE      RJMP	_USART_Transmit
(0028)   /* 将数据放入缓冲器,发送数据 */
(0029)   UDR = data;
    0057 B90C      OUT	0x0C,R16
(0030) }
    0058 9508      RET
(0031) unsigned char USART_Recive(void)
(0032) {
(0033)  	/* 等待接收数据*/
(0034) 	while ( !(UCSRA & (1<<RXC)) );
_USART_Recive:
    0059 9B5F      SBIS	0x0B,7
    005A CFFE      RJMP	_USART_Recive
(0035) 	/* 从缓冲器中获取并返回数据*/
(0036) 	return UDR;
    005B B10C      IN	R16,0x0C
    005C 9508      RET
(0037) }
(0038) void USART_Recive_Complete_handler(void)
(0039) {
(0040) 
(0041) }
_USART_Recive_Complete_handler:
    005D 9518      RETI
(0042) void USART_Data_Register_Empty_handler(void)
(0043) {
(0044) 
(0045) }void USART_Transmit_Complete_handler(void)
_USART_Data_Register_Empty_handler:
    005E 9518      RETI
(0046) {
(0047) 
(0048) }
_USART_Transmit_Complete_handler:
    005F 9518      RETI
_main:
  temp                 --> Y+1
  str                  --> Y+0
  i                    --> R20
    0060 9724      SBIW	R28,4
FILE: F:\自编程序\M16\ADC\main.c
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) void main()
(0004) {
(0005)   unsigned char temp,str[4];
(0006)   unsigned int i;
(0007)   DDRA=0x00;
    0061 2422      CLR	R2
    0062 BA2A      OUT	0x1A,R2
(0008)   PORTA=0X00;
    0063 BA2B      OUT	0x1B,R2
(0009)   USART_Init();
    0064 940E004B  CALL	_USART_Init
(0010)   //ADMUX=0X40;
(0011)  // ADCSRA=0XE4;
(0012)  // SFIOR&=0X1F;
(0013)   ADC_initial();
    0066 940E00BA  CALL	_ADC_initial
    0068 C02C      RJMP	0x0095
(0014)   while(1){
(0015)   for(i=0;i<60000;i++);
    0069 2744      CLR	R20
    006A 2755      CLR	R21
    006B C002      RJMP	0x006E
    006C 5F4F      SUBI	R20,0xFF
    006D 4F5F      SBCI	R21,0xFF
    006E 3640      CPI	R20,0x60
    006F EEEA      LDI	R30,0xEA
    0070 075E      CPC	R21,R30
    0071 F3D0      BCS	0x006C
(0016)   MyItoa(ADC_READ()*5,str);
    0072 940E00BF  CALL	_ADC_READ
    0074 0118      MOVW	R2,R16
    0075 019E      MOVW	R18,R28
    0076 E005      LDI	R16,5
    0077 E010      LDI	R17,0
    0078 932F      PUSH	R18
    0079 933F      PUSH	R19
    007A 0191      MOVW	R18,R2
    007B 940E00E5  CALL	empy16s
    007D 913F      POP	R19
    007E 912F      POP	R18
    007F 940E0098  CALL	_MyItoa
(0017)   USART_Transmit(str[0]);
    0081 8108      LDD	R16,Y+0
    0082 2711      CLR	R17
    0083 940E0055  CALL	_USART_Transmit
(0018)   USART_Transmit(str[1]);
    0085 8109      LDD	R16,Y+1
    0086 2711      CLR	R17
    0087 940E0055  CALL	_USART_Transmit
(0019)   USART_Transmit(str[2]);
    0089 810A      LDD	R16,Y+2
    008A 2711      CLR	R17
    008B 940E0055  CALL	_USART_Transmit
(0020)   USART_Transmit(str[3]);
    008D 810B      LDD	R16,Y+3
    008E 2711      CLR	R17
    008F 940E0055  CALL	_USART_Transmit
(0021)   USART_Transmit('\n');
    0091 E00A      LDI	R16,0xA
    0092 E010      LDI	R17,0
    0093 940E0055  CALL	_USART_Transmit
    0095 CFD3      RJMP	0x0069
(0022)   }
(0023) }
    0096 9624      ADIW	R28,4
    0097 9508      RET
_MyItoa:
  i                    --> R20
  Dat                  --> R22
  Inter                --> R10
    0098 940E0113  CALL	push_gset3
    009A 01B9      MOVW	R22,R18
    009B 0158      MOVW	R10,R16
FILE: F:\自编程序\M16\ADC\ADC.C
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003) #define AVCC                (1<<REFS0)
(0004) #define V_2.56              (1<<REFS0)|(1<<REFS1)
(0005) #define AD_PRESCAL_2        (1<<ADPS0)
(0006) #define AD_PRESCAL_4        (1<<ADPS1)
(0007) #define AD_PRESCAL_8        (1<<ADPS0)|(1<<ADPS1)
(0008) #define AD_PRESCAL_16       (1<<ADPS2)
(0009) #define AD_PRESCAL_32       (1<<ADPS0)|(1<<ADPS2)
(0010) #define AD_PRESCAL_64       (1<<ADPS1)|(1<<ADPS2)
(0011) #define AD_PRESCAL_128      (1<<ADPS0)|(1<<ADPS2)|(1<<ADPS1)
(0012) #define AD_SE_ADC0                   //ADC0
(0013) #define AD_SE_ADC1          (1<<MUX0) //ADC1
(0014) #define AD_SE_ADC2          (1<<MUX1) //ADC2
(0015) #define AD_SE_ADC3          (1<<MUX1)|(1<<MUX0) //ADC3
(0016) #define AD_SE_ADC4          (1<<MUX2)//ADC4
(0017) #define AD_SE_ADC5          (1<<MUX2)|(1<<MUX0)//ADC5
(0018) #define AD_SE_ADC6          (1<<MUX2)|(1<<MUX1) //ADC6
(0019) #define AD_SE_ADC7          (1<<MUX2)|(1<<MUX1)|(1<<MUX0) //ADC7
(0020) //========================================  
(0021) //数字转到字串,函数.--只有4个字节,而且向后对齐,前面补零. 
(0022) void MyItoa( unsigned int  Inter, unsigned char Dat[]) 
(0023) { 
(0024)     unsigned char i; 
(0025)     for ( i=0; i<4 ; i++ ) 
    009C 2744      CLR	R20
    009D C017      RJMP	0x00B5
(0026)     { 
(0027)         Dat[3-i]=Inter%10+'0'; 
    009E 2E24      MOV	R2,R20
    009F 2433      CLR	R3
    00A0 E0E3      LDI	R30,3
    00A1 E0F0      LDI	R31,0
    00A2 19E2      SUB	R30,R2
    00A3 09F3      SBC	R31,R3
    00A4 0FE6      ADD	R30,R22
    00A5 1FF7      ADC	R31,R23
    00A6 E02A      LDI	R18,0xA
    00A7 E030      LDI	R19,0
    00A8 0185      MOVW	R16,R10
    00A9 940E00C9  CALL	mod16u
    00AB 01C8      MOVW	R24,R16
    00AC 96C0      ADIW	R24,0x30
    00AD 8380      STD	Z+0,R24
(0028)         Inter/=10; 
    00AE E02A      LDI	R18,0xA
    00AF E030      LDI	R19,0
    00B0 0185      MOVW	R16,R10
    00B1 940E00CB  CALL	div16u
    00B3 0158      MOVW	R10,R16
    00B4 9543      INC	R20
    00B5 3044      CPI	R20,4
    00B6 F338      BCS	0x009E
(0029)     }  
(0030) } 
    00B7 940E00F5  CALL	pop_gset3
    00B9 9508      RET
(0031) void ADC_initial(void)
(0032) {
(0033)  ADMUX=AVCC;
_ADC_initial:
    00BA E480      LDI	R24,0x40
    00BB B987      OUT	0x07,R24
(0034)  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|AD_PRESCAL_4;
    00BC EE82      LDI	R24,0xE2
    00BD B986      OUT	0x06,R24
(0035) }
    00BE 9508      RET
(0036) unsigned int ADC_READ()
(0037) {
(0038)  unsigned char temp;
(0039)  unsigned int data;
(0040)  temp=ADCL;
_ADC_READ:
  temp                 --> R18
  data                 --> R16
    00BF B124      IN	R18,0x04
(0041)  data=ADCH;
    00C0 B105      IN	R16,0x05
    00C1 2711      CLR	R17
(0042)  data<<=8;
    00C2 2F10      MOV	R17,R16
    00C3 2700      CLR	R16
(0043)  data+=temp;
    00C4 2E22      MOV	R2,R18
    00C5 2433      CLR	R3
    00C6 0D02      ADD	R16,R2
    00C7 1D13      ADC	R17,R3
(0044)  return(data);
FILE: <library>
    00C8 9508      RET
mod16u:
    00C9 9468      BSET	6
    00CA C001      RJMP	xdiv16u
div16u:
    00CB 94E8      BCLR	6
xdiv16u:
    00CC 92EA      ST	R14,-Y
    00CD 92FA      ST	R15,-Y
    00CE 938A      ST	R24,-Y
    00CF 24EE      CLR	R14
    00D0 24FF      CLR	R15
    00D1 E180      LDI	R24,0x10
    00D2 0F00      LSL	R16
    00D3 1F11      ROL	R17
    00D4 1CEE      ROL	R14
    00D5 1CFF      ROL	R15
    00D6 16E2      CP	R14,R18
    00D7 06F3      CPC	R15,R19
    00D8 F018      BCS	0x00DC
    00D9 1AE2      SUB	R14,R18
    00DA 0AF3      SBC	R15,R19
    00DB 9503      INC	R16
    00DC 958A      DEC	R24
    00DD F7A1      BNE	0x00D2
    00DE F416      BRTC	0x00E1
    00DF 2D0E      MOV	R16,R14
    00E0 2D1F      MOV	R17,R15
    00E1 9189      LD	R24,Y+
    00E2 90F9      LD	R15,Y+
    00E3 90E9      LD	R14,Y+
    00E4 9508      RET
empy16s:
    00E5 920A      ST	R0,-Y
    00E6 921A      ST	R1,-Y
    00E7 938A      ST	R24,-Y
    00E8 939A      ST	R25,-Y
    00E9 9F02      MUL	R16,R18
    00EA 01C0      MOVW	R24,R0
    00EB 9F12      MUL	R17,R18
    00EC 0D90      ADD	R25,R0
    00ED 9F03      MUL	R16,R19
    00EE 0D90      ADD	R25,R0
    00EF 018C      MOVW	R16,R24
    00F0 9199      LD	R25,Y+
    00F1 9189      LD	R24,Y+
    00F2 9019      LD	R1,Y+
    00F3 9009      LD	R0,Y+
    00F4 9508      RET
pop_gset3:
    00F5 E0E4      LDI	R30,4
    00F6 940C00FC  JMP	pop
push_gset1:
    00F8 935A      ST	R21,-Y
    00F9 934A      ST	R20,-Y
    00FA 9508      RET
pop_gset1:
    00FB E0E1      LDI	R30,1
pop:
    00FC 9149      LD	R20,Y+
    00FD 9159      LD	R21,Y+
    00FE FDE0      SBRC	R30,0
    00FF 9508      RET
    0100 9169      LD	R22,Y+
    0101 9179      LD	R23,Y+
    0102 FDE1      SBRC	R30,1
    0103 9508      RET
    0104 90A9      LD	R10,Y+
    0105 90B9      LD	R11,Y+
    0106 FDE2      SBRC	R30,2
    0107 9508      RET
    0108 90C9      LD	R12,Y+
    0109 90D9      LD	R13,Y+
    010A FDE3      SBRC	R30,3
    010B 9508      RET
    010C 90E9      LD	R14,Y+
    010D 90F9      LD	R15,Y+
    010E 9508      RET
push_gset2:
    010F 937A      ST	R23,-Y
    0110 936A      ST	R22,-Y
    0111 940C00F8  JMP	push_gset1
push_gset3:
    0113 92BA      ST	R11,-Y
    0114 92AA      ST	R10,-Y
    0115 940C010F  JMP	push_gset2

⌨️ 快捷键说明

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