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

📄 adc.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
字号:
__start:
__text_start:
    001B E5CF      LDI	R28,0x5F
    001C E0D4      LDI	R29,4
    001D BFCD      OUT	0x3D,R28
    001E BFDE      OUT	0x3E,R29
    001F 51C0      SUBI	R28,0x10
    0020 40D0      SBCI	R29,0
    0021 EA0A      LDI	R16,0xAA
    0022 8308      STD	Y+0,R16
    0023 2400      CLR	R0
    0024 E6EF      LDI	R30,0x6F
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 36EF      CPI	R30,0x6F
    0028 07F1      CPC	R31,R17
    0029 F011      BEQ	0x002C
    002A 9201      ST	R0,Z+
    002B CFFB      RJMP	0x0027
    002C 8300      STD	Z+0,R16
    002D E2E6      LDI	R30,0x26
    002E E0F0      LDI	R31,0
    002F E6A0      LDI	R26,0x60
    0030 E0B0      LDI	R27,0
    0031 E010      LDI	R17,0
    0032 33E5      CPI	R30,0x35
    0033 07F1      CPC	R31,R17
    0034 F021      BEQ	0x0039
    0035 95C8      LPM
    0036 9631      ADIW	R30,1
    0037 920D      ST	R0,X+
    0038 CFF9      RJMP	0x0032
    0039 D07E      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
FILE: F:\单片机教学\调试程序\ADC\adc-led.c
(0001) //Designed by Alf
(0002) //用于实现AD转换,转换结果由数码管显示,需要闭合SW5、SW6;以及SW8的1脚(AD0),而后旋转AD1电位器即可看到;
(0003) //AD将电位器分得的0~5V电压转换成了0~1023;
(0004) //ICC-AVR application builder : 2005-3-8 下午 04:53:49
(0005) // Target : M8
(0006) // Crystal: 11.059Mhz
(0007) 
(0008) #include <iom8v.h>
(0009) #include <macros.h>
(0010) 
(0011) //lednum全局变量
(0012) char lednum = 0;
(0013) char lednum1 = 0;
(0014) char lednum2 = 0;
(0015) char lednum3 = 0;
(0016) char lednum4 = 0;
(0017) //码表
(0018) char num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0019) 
(0020) 
(0021) void port_init(void)
(0022) {
(0023)  PORTB = 0xFF;
_port_init:
    003B EF8F      LDI	R24,0xFF
    003C BB88      OUT	0x18,R24
(0024)  DDRB  = 0xFF;
    003D BB87      OUT	0x17,R24
(0025)  PORTC = 0x00; //m103 output only
    003E 2422      CLR	R2
    003F BA25      OUT	0x15,R2
(0026)  DDRC  = 0x7E;
    0040 E78E      LDI	R24,0x7E
    0041 BB84      OUT	0x14,R24
(0027)  PORTD = 0x00;
    0042 BA22      OUT	0x12,R2
(0028)  DDRD  = 0xFF;
    0043 EF8F      LDI	R24,0xFF
    0044 BB81      OUT	0x11,R24
(0029) }
    0045 9508      RET
(0030) 
(0031) //TIMER0 initialisation - prescale:1024
(0032) // WGM: Normal
(0033) // desired value: 20mSec
(0034) // actual value: 19.908mSec (0.5%)
(0035) void timer0_init(void)
(0036) {
(0037)   TCCR0 = 0x00; //stop
_timer0_init:
    0046 2422      CLR	R2
    0047 BE23      OUT	0x33,R2
(0038)  TCNT0 = 0x29; //set count
    0048 E289      LDI	R24,0x29
    0049 BF82      OUT	0x32,R24
(0039)  TCCR0 = 0x04; //start timer
    004A E084      LDI	R24,4
    004B BF83      OUT	0x33,R24
(0040) }
    004C 9508      RET
_timer0_ovf_isr:
    004D 922A      ST	R2,-Y
    004E 938A      ST	R24,-Y
    004F 939A      ST	R25,-Y
    0050 B62F      IN	R2,0x3F
    0051 922A      ST	R2,-Y
(0041) 
(0042) #pragma interrupt_handler timer0_ovf_isr:10
(0043) void timer0_ovf_isr(void)
(0044) {
(0045)  TCNT0 = 0x29; //reload counter value
    0052 E289      LDI	R24,0x29
    0053 BF82      OUT	0x32,R24
(0046)  TCCR0 = 0x04; //start timer
    0054 E084      LDI	R24,4
    0055 BF83      OUT	0x33,R24
(0047)  
(0048)  PORTB |= 0x30;
    0056 B388      IN	R24,0x18
    0057 6380      ORI	R24,0x30
    0058 BB88      OUT	0x18,R24
(0049)  PORTC |= 0x30;
    0059 B385      IN	R24,0x15
    005A 6380      ORI	R24,0x30
    005B BB85      OUT	0x15,R24
(0050)  if(lednum == 0)	//更新PB4数码管;
    005C 90200060  LDS	R2,0x60
    005E 2022      TST	R2
    005F F429      BNE	0x0065
(0051)  {	PORTB &= ~0x10;
    0060 98C4      CBI	0x18,4
(0052) 	PORTD = lednum4;
    0061 90200064  LDS	R2,0x64
    0063 BA22      OUT	0x12,R2
(0053)  }
    0064 C016      RJMP	0x007B
(0054)  else if(lednum ==1)	//更新PB5数码管;
    0065 91800060  LDS	R24,0x60
    0067 3081      CPI	R24,1
    0068 F429      BNE	0x006E
(0055)  {	PORTB &= ~0x20;
    0069 98C5      CBI	0x18,5
(0056) 	PORTD = lednum3;
    006A 90200063  LDS	R2,0x63
    006C BA22      OUT	0x12,R2
(0057)  }
    006D C00D      RJMP	0x007B
(0058)  else if(lednum ==2)	//更新PC4数码管;
    006E 91800060  LDS	R24,0x60
    0070 3082      CPI	R24,2
    0071 F429      BNE	0x0077
(0059)  {	PORTC &= ~0x10;
    0072 98AC      CBI	0x15,4
(0060) 	PORTD = lednum2;
    0073 90200062  LDS	R2,0x62
    0075 BA22      OUT	0x12,R2
(0061)  }
    0076 C004      RJMP	0x007B
(0062)  else 	//更新PC5数码管;
(0063)  { 	PORTC &= ~0x20;
    0077 98AD      CBI	0x15,5
(0064) 	PORTD = lednum1;
    0078 90200061  LDS	R2,0x61
    007A BA22      OUT	0x12,R2
(0065)  }
(0066) 
(0067) lednum++;
    007B 91800060  LDS	R24,0x60
    007D 5F8F      SUBI	R24,0xFF
    007E 93800060  STS	0x60,R24
    0080 C005      RJMP	0x0086
(0068) while(lednum >= 4) lednum = lednum - 4;
    0081 91800060  LDS	R24,0x60
    0083 5084      SUBI	R24,4
    0084 93800060  STS	0x60,R24
    0086 91800060  LDS	R24,0x60
    0088 3084      CPI	R24,4
    0089 F7B8      BCC	0x0081
(0069)  
(0070) }
    008A 9029      LD	R2,Y+
    008B BE2F      OUT	0x3F,R2
    008C 9199      LD	R25,Y+
    008D 9189      LD	R24,Y+
    008E 9029      LD	R2,Y+
    008F 9518      RETI
(0071) 
(0072) //call this routine to initialise all peripherals
(0073) void init_devices(void)
(0074) {
(0075)  //stop errant interrupts until set up
(0076)  CLI(); //disable all interrupts
_init_devices:
    0090 94F8      BCLR	7
(0077)  port_init();
    0091 DFA9      RCALL	_port_init
(0078)  timer0_init();
    0092 DFB3      RCALL	_timer0_init
(0079) 
(0080)  MCUCR = 0x00;
    0093 2422      CLR	R2
    0094 BE25      OUT	0x35,R2
(0081)  GICR  = 0x00;
    0095 BE2B      OUT	0x3B,R2
(0082)  TIMSK = 0x01; //timer interrupt sources
    0096 E081      LDI	R24,1
    0097 BF89      OUT	0x39,R24
(0083)  SEI(); //re-enable interrupts
    0098 9478      BSET	7
(0084)  //all peripherals are now initialised
(0085) }
    0099 9508      RET
_delay:
  j                    --> R16
  i                    --> R18
  z                    --> R20
    009A D0DF      RCALL	push_gset1
(0086) 
(0087) 
(0088) 
(0089) 
(0090) //自定义函数
(0091) void delay(void)
(0092) {
(0093)  unsigned int i,j,z;
(0094)  for(i=0;i<10000;i++);
    009B 2722      CLR	R18
    009C 2733      CLR	R19
    009D C002      RJMP	0x00A0
    009E 5F2F      SUBI	R18,0xFF
    009F 4F3F      SBCI	R19,0xFF
    00A0 3120      CPI	R18,0x10
    00A1 E2E7      LDI	R30,0x27
    00A2 073E      CPC	R19,R30
    00A3 F3D0      BCS	0x009E
(0095)  {	for(j=0;j<10000;j++)
    00A4 2700      CLR	R16
    00A5 2711      CLR	R17
    00A6 C00B      RJMP	0x00B2
(0096)  	{	for(z=0;z<100;z++);}
    00A7 2744      CLR	R20
    00A8 2755      CLR	R21
    00A9 C002      RJMP	0x00AC
    00AA 5F4F      SUBI	R20,0xFF
    00AB 4F5F      SBCI	R21,0xFF
    00AC 3644      CPI	R20,0x64
    00AD E0E0      LDI	R30,0
    00AE 075E      CPC	R21,R30
    00AF F3D0      BCS	0x00AA
    00B0 5F0F      SUBI	R16,0xFF
    00B1 4F1F      SBCI	R17,0xFF
    00B2 3100      CPI	R16,0x10
    00B3 E2E7      LDI	R30,0x27
    00B4 071E      CPC	R17,R30
    00B5 F388      BCS	0x00A7
(0097)  }
(0098) }
    00B6 D0C6      RCALL	pop_gset1
    00B7 9508      RET
_main:
  temp                 --> R14
  num4                 --> R22
  num3                 --> R10
  num2                 --> R20
  num1                 --> Y+2
  i                    --> R12
  data                 --> Y+0
    00B8 9723      SBIW	R28,3
(0099) 
(0100) void main(void)
(0101) {
(0102)   char i;
(0103)   unsigned int data=0,temp;
    00B9 2400      CLR	R0
    00BA 2411      CLR	R1
    00BB 8219      STD	Y+1,R1
    00BC 8208      STD	Y+0,R0
(0104)   char num1=0,num2=0,num3=0,num4=0;
    00BD 820A      STD	Y+2,R0
    00BE 2744      CLR	R20
    00BF 24AA      CLR	R10
    00C0 2766      CLR	R22
(0105)   init_devices();
    00C1 DFCE      RCALL	_init_devices
(0106)  
(0107)  for(i=0;i<=9;i++)
    00C2 24CC      CLR	R12
    00C3 C00B      RJMP	0x00CF
(0108)  {	lednum1 = num[i];
    00C4 E685      LDI	R24,0x65
    00C5 E090      LDI	R25,0
    00C6 2DEC      MOV	R30,R12
    00C7 27FF      CLR	R31
    00C8 0FE8      ADD	R30,R24
    00C9 1FF9      ADC	R31,R25
    00CA 8020      LDD	R2,Z+0
    00CB 92200061  STS	0x61,R2
(0109)  	delay();
    00CD DFCC      RCALL	_delay
    00CE 94C3      INC	R12
    00CF E089      LDI	R24,0x9
    00D0 158C      CP	R24,R12
    00D1 F790      BCC	0x00C4
(0110)  } 
(0111)  
(0112)  lednum1 = num[0];
    00D2 90200065  LDS	R2,0x65
    00D4 92200061  STS	0x61,R2
(0113)  lednum2 = num[0];
    00D6 92200062  STS	0x62,R2
(0114)  lednum3 = num[0];
    00D8 92200063  STS	0x63,R2
(0115)  lednum4 = num[0];
    00DA 92200064  STS	0x64,R2
(0116)  
(0117)  delay();
    00DC DFBD      RCALL	_delay
(0118)  delay();
    00DD DFBC      RCALL	_delay
    00DE C06C      RJMP	0x014B
(0119)  while(1)
(0120)  {	ADMUX = 0x40;	  //选择通道零
    00DF E480      LDI	R24,0x40
    00E0 B987      OUT	0x07,R24
(0121)  	ADCSRA = 0xC7;
    00E1 EC87      LDI	R24,0xC7
    00E2 B986      OUT	0x06,R24
(0122) 	
(0123) 	while((ADCSRA | 0x10)==0);
    00E3 B186      IN	R24,0x06
    00E4 6180      ORI	R24,0x10
    00E5 F3E9      BEQ	0x00E3
(0124) 	ADCSRA &=~0x10;
    00E6 9834      CBI	0x06,4
(0125) 	
(0126) 	data = ADCL;
    00E7 B024      IN	R2,0x04
    00E8 2433      CLR	R3
    00E9 8239      STD	Y+1,R3
    00EA 8228      STD	Y+0,R2
(0127) 	temp =ADCH<<8;
    00EB B0E5      IN	R14,0x05
    00EC 24FF      CLR	R15
    00ED 2CFE      MOV	R15,R14
    00EE 24EE      CLR	R14
(0128) 	data = data +temp;
    00EF 0101      MOVW	R0,R2
    00F0 0C0E      ADD	R0,R14
    00F1 1C1F      ADC	R1,R15
    00F2 8219      STD	Y+1,R1
    00F3 8208      STD	Y+0,R0
(0129) 	
(0130) 	num4 = data/1000;
    00F4 EE28      LDI	R18,0xE8
    00F5 E033      LDI	R19,3
    00F6 0180      MOVW	R16,R0
    00F7 D058      RCALL	div16u
    00F8 2F60      MOV	R22,R16
(0131) 	num3 = (data- data/1000*1000)/100;
    00F9 EE28      LDI	R18,0xE8
    00FA E033      LDI	R19,3
    00FB 8108      LDD	R16,Y+0
    00FC 8119      LDD	R17,Y+1
    00FD D052      RCALL	div16u
    00FE 0198      MOVW	R18,R16
    00FF EE08      LDI	R16,0xE8
    0100 E013      LDI	R17,3
    0101 D068      RCALL	empy16s
    0102 0118      MOVW	R2,R16
    0103 8108      LDD	R16,Y+0
    0104 8119      LDD	R17,Y+1
    0105 1902      SUB	R16,R2
    0106 0913      SBC	R17,R3
    0107 E624      LDI	R18,0x64
    0108 E030      LDI	R19,0
    0109 D046      RCALL	div16u
    010A 2EA0      MOV	R10,R16
(0132) 	num2 = (data-data/100*100)/10;
    010B E624      LDI	R18,0x64
    010C E030      LDI	R19,0
    010D 8108      LDD	R16,Y+0
    010E 8119      LDD	R17,Y+1
    010F D040      RCALL	div16u
    0110 0198      MOVW	R18,R16
    0111 E604      LDI	R16,0x64
    0112 E010      LDI	R17,0
    0113 D056      RCALL	empy16s
    0114 0118      MOVW	R2,R16
    0115 8108      LDD	R16,Y+0
    0116 8119      LDD	R17,Y+1
    0117 1902      SUB	R16,R2
    0118 0913      SBC	R17,R3
    0119 E02A      LDI	R18,0xA
    011A E030      LDI	R19,0
    011B D034      RCALL	div16u
    011C 2F40      MOV	R20,R16
(0133) 	num1= data-data/10*10; 
    011D E02A      LDI	R18,0xA
    011E E030      LDI	R19,0
    011F 8108      LDD	R16,Y+0
    0120 8119      LDD	R17,Y+1
    0121 D02E      RCALL	div16u
    0122 0198      MOVW	R18,R16
    0123 E00A      LDI	R16,0xA
    0124 E010      LDI	R17,0
    0125 D044      RCALL	empy16s
    0126 8048      LDD	R4,Y+0
    0127 8059      LDD	R5,Y+1
    0128 1A40      SUB	R4,R16
    0129 0A51      SBC	R5,R17
    012A 824A      STD	Y+2,R4
(0134) 	
(0135) 	
(0136) 	lednum4 = num[num4];
    012B E685      LDI	R24,0x65
    012C E090      LDI	R25,0
    012D 2FE6      MOV	R30,R22
    012E 27FF      CLR	R31
    012F 0FE8      ADD	R30,R24
    0130 1FF9      ADC	R31,R25
    0131 8020      LDD	R2,Z+0
    0132 92200064  STS	0x64,R2
(0137) 	lednum3 = num[num3];  
    0134 2DEA      MOV	R30,R10
    0135 27FF      CLR	R31
    0136 0FE8      ADD	R30,R24
    0137 1FF9      ADC	R31,R25
    0138 8020      LDD	R2,Z+0
    0139 92200063  STS	0x63,R2
(0138) 	lednum2 = num[num2];
    013B 2FE4      MOV	R30,R20
    013C 27FF      CLR	R31
    013D 0FE8      ADD	R30,R24
    013E 1FF9      ADC	R31,R25
    013F 8020      LDD	R2,Z+0
    0140 92200062  STS	0x62,R2
(0139) 	lednum1 = num[num1];
    0142 2DE4      MOV	R30,R4
    0143 27FF      CLR	R31
    0144 0FE8      ADD	R30,R24
    0145 1FF9      ADC	R31,R25
    0146 8020      LDD	R2,Z+0
    0147 92200061  STS	0x61,R2
(0140) 	
(0141) 	ADCSRA |= 0x40;    
    0149 9A36      SBI	0x06,6
(0142) 	delay();
    014A DF4F      RCALL	_delay
    014B CF93      RJMP	0x00DF
(0143) 	
(0144)  } 
(0145) }
FILE: <library>
    014C 9623      ADIW	R28,3
    014D 9508      RET
mod16u:
    014E 9468      BSET	6
    014F C001      RJMP	xdiv16u
div16u:
    0150 94E8      BCLR	6
xdiv16u:
    0151 92EA      ST	R14,-Y
    0152 92FA      ST	R15,-Y
    0153 938A      ST	R24,-Y
    0154 24EE      CLR	R14
    0155 24FF      CLR	R15
    0156 E180      LDI	R24,0x10
    0157 0F00      LSL	R16
    0158 1F11      ROL	R17
    0159 1CEE      ROL	R14
    015A 1CFF      ROL	R15
    015B 16E2      CP	R14,R18
    015C 06F3      CPC	R15,R19
    015D F018      BCS	0x0161
    015E 1AE2      SUB	R14,R18
    015F 0AF3      SBC	R15,R19
    0160 9503      INC	R16
    0161 958A      DEC	R24
    0162 F7A1      BNE	0x0157
    0163 F416      BRTC	0x0166
    0164 2D0E      MOV	R16,R14
    0165 2D1F      MOV	R17,R15
    0166 9189      LD	R24,Y+
    0167 90F9      LD	R15,Y+
    0168 90E9      LD	R14,Y+
    0169 9508      RET
empy16s:
    016A 920A      ST	R0,-Y
    016B 921A      ST	R1,-Y
    016C 938A      ST	R24,-Y
    016D 939A      ST	R25,-Y
    016E 9F02      MUL	R16,R18
    016F 01C0      MOVW	R24,R0
    0170 9F12      MUL	R17,R18
    0171 0D90      ADD	R25,R0
    0172 9F03      MUL	R16,R19
    0173 0D90      ADD	R25,R0
    0174 018C      MOVW	R16,R24
    0175 9199      LD	R25,Y+
    0176 9189      LD	R24,Y+
    0177 9019      LD	R1,Y+
    0178 9009      LD	R0,Y+
    0179 9508      RET
push_gset1:
    017A 935A      ST	R21,-Y
    017B 934A      ST	R20,-Y
    017C 9508      RET
pop_gset1:
    017D E0E1      LDI	R30,1
pop:
    017E 9149      LD	R20,Y+
    017F 9159      LD	R21,Y+
    0180 FDE0      SBRC	R30,0
    0181 9508      RET
    0182 9169      LD	R22,Y+
    0183 9179      LD	R23,Y+
    0184 FDE1      SBRC	R30,1
    0185 9508      RET
    0186 90A9      LD	R10,Y+
    0187 90B9      LD	R11,Y+
    0188 FDE2      SBRC	R30,2
    0189 9508      RET
    018A 90C9      LD	R12,Y+
    018B 90D9      LD	R13,Y+
    018C FDE3      SBRC	R30,3
    018D 9508      RET
    018E 90E9      LD	R14,Y+
    018F 90F9      LD	R15,Y+
    0190 9508      RET

⌨️ 快捷键说明

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