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

📄 ad2disp.lst

📁 用ICC编写的程序包括SPI
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0123 E070      LDI	R23,0
    0124 929A      ST	R9,-Y
    0125 928A      ST	R8,-Y
    0126 927A      ST	R7,-Y
    0127 926A      ST	R6,-Y
    0128 018A      MOVW	R16,R20
    0129 019B      MOVW	R18,R22
    012A 940E02F2  CALL	empy32s
    012C 925A      ST	R5,-Y
    012D 924A      ST	R4,-Y
    012E 923A      ST	R3,-Y
    012F 922A      ST	R2,-Y
    0130 940E02F2  CALL	empy32s
    0132 90200076  LDS	R2,0x76
    0134 90300077  LDS	R3,0x77
    0136 2444      CLR	R4
    0137 2455      CLR	R5
    0138 925A      ST	R5,-Y
    0139 924A      ST	R4,-Y
    013A 923A      ST	R3,-Y
    013B 922A      ST	R2,-Y
    013C 940E0277  CALL	div32s
    013E 01FE      MOVW	R30,R28
    013F 8300      STD	Z+0,R16
    0140 8311      STD	Z+1,R17
    0141 8322      STD	Z+2,R18
    0142 8333      STD	Z+3,R19
(0081) 		
(0082) 		 }
(0083) 		
(0084) 	display((unsigned int)(result),0);
    0143 2722      CLR	R18
    0144 01FE      MOVW	R30,R28
    0145 8100      LDD	R16,Z+0
    0146 8111      LDD	R17,Z+1
    0147 940E0051  CALL	_display
(0085) 	}
(0086)  display(AdValue[3],1);
    0149 E021      LDI	R18,1
    014A 91000072  LDS	R16,0x72
    014C 91100073  LDS	R17,0x73
    014E 940E0051  CALL	_display
(0087)  display(AdValue[5],2);
    0150 E022      LDI	R18,2
    0151 91000076  LDS	R16,0x76
    0153 91100077  LDS	R17,0x77
    0155 940E0051  CALL	_display
(0088)  display(AdValue[7]*5,3);
    0157 E023      LDI	R18,3
    0158 9020007A  LDS	R2,0x7A
    015A 9030007B  LDS	R3,0x7B
    015C E005      LDI	R16,5
    015D E010      LDI	R17,0
    015E 932F      PUSH	R18
    015F 933F      PUSH	R19
    0160 0191      MOVW	R18,R2
    0161 940E02E2  CALL	empy16s
    0163 913F      POP	R19
    0164 912F      POP	R18
    0165 940E0051  CALL	_display
    0167 C003      RJMP	0x016B
(0089)  
(0090)  while(!time_flag)
(0091)  key=ReadKey();
    0168 940E01A7  CALL	_ReadKey
    016A 2EA0      MOV	R10,R16
    016B 90200064  LDS	R2,0x64
    016D 2022      TST	R2
    016E F3C9      BEQ	0x0168
    016F CF78      RJMP	0x00E8
(0092)  
(0093)  }
(0094) }
    0170 9624      ADIW	R28,4
    0171 9508      RET
_timer2_ovf_isr:
    0172 938A      ST	R24,-Y
    0173 B78F      IN	R24,0x3F
    0174 938A      ST	R24,-Y
FILE: F:\IccAvr_Pro\time.c
(0001) 
(0002) #include "time.h"
(0003) 
(0004) unsigned char time_flag=0;
(0005) unsigned char pwm=0x7f;
(0006) #pragma interrupt_handler timer2_ovf_isr:5
(0007) void timer2_ovf_isr(void)
(0008) {
(0009)  TCNT2 = 0x71; //reload counter value
    0175 E781      LDI	R24,0x71
    0176 BD84      OUT	0x24,R24
(0010)  time_flag=1;
    0177 E081      LDI	R24,1
    0178 93800064  STS	0x64,R24
(0011) }
    017A 9189      LD	R24,Y+
    017B BF8F      OUT	0x3F,R24
    017C 9189      LD	R24,Y+
    017D 9518      RETI
(0012) 
(0013) //TIMER2 initialize - prescale:256
(0014) // WGM: Normal
(0015) // desired value: 5mSec
(0016) // actual value:  4.965mSec (0.7%)
(0017) void timer2_init(void)
(0018) {
(0019)  TCCR2 = 0x00; //stop
_timer2_init:
    017E 2422      CLR	R2
    017F BC25      OUT	0x25,R2
(0020)  ASSR  = 0x00; //set async mode
    0180 BC22      OUT	0x22,R2
(0021)  TCNT2 = 0x71; //setup
    0181 E781      LDI	R24,0x71
    0182 BD84      OUT	0x24,R24
(0022)  OCR2  = 0x8F;
    0183 E88F      LDI	R24,0x8F
    0184 BD83      OUT	0x23,R24
(0023)  TCCR2 = 0x06; //start
    0185 E086      LDI	R24,6
    0186 BD85      OUT	0x25,R24
(0024)  time_flag=0;
    0187 92200064  STS	0x64,R2
(0025) }
    0189 9508      RET
(0026) 
(0027) //TIMER1 initialize - prescale:1
(0028) // WGM: 8) PWM phz freq correct, TOP=ICRn
(0029) // desired value: 14.4KHz
(0030) // actual value: 14.456KHz (0.4%)
(0031) void timer1_init(void)
(0032) {
(0033)  DDRD|=BIT(PORTD4)|BIT(PORTD5);
_timer1_init:
    018A B381      IN	R24,0x11
    018B 6380      ORI	R24,0x30
    018C BB81      OUT	0x11,R24
(0034)  TCCR1B = 0x00; //stop
    018D 2422      CLR	R2
    018E BC2E      OUT	0x2E,R2
(0035)  TCNT1H = 0xFF; //setup
    018F EF8F      LDI	R24,0xFF
    0190 BD8D      OUT	0x2D,R24
(0036)  TCNT1L = 0x01;
    0191 E081      LDI	R24,1
    0192 BD8C      OUT	0x2C,R24
(0037)  OCR1AH = 0x00;
    0193 BC2B      OUT	0x2B,R2
(0038)  OCR1AL = 0x7f;
    0194 E78F      LDI	R24,0x7F
    0195 BD8A      OUT	0x2A,R24
(0039)  OCR1BH = 0x00;
    0196 BC29      OUT	0x29,R2
(0040)  OCR1BL = 0x7f;
    0197 BD88      OUT	0x28,R24
(0041)  ICR1H  = 0x00;
    0198 BC27      OUT	0x27,R2
(0042)  ICR1L  = 0xFF;
    0199 EF8F      LDI	R24,0xFF
    019A BD86      OUT	0x26,R24
(0043)  TCCR1A = 0xA0;
    019B EA80      LDI	R24,0xA0
    019C BD8F      OUT	0x2F,R24
(0044)  TCCR1B = 0x11; //start Timer
    019D E181      LDI	R24,0x11
    019E BD8E      OUT	0x2E,R24
(0045) }
    019F 9508      RET
(0046) void pwm_change(unsigned char pwm)
(0047) {
(0048)  OCR1AH = 0x00;
_pwm_change:
  pwm                  --> R16
    01A0 2422      CLR	R2
    01A1 BC2B      OUT	0x2B,R2
(0049)  OCR1AL = pwm;
    01A2 BD0A      OUT	0x2A,R16
(0050)  OCR1BH = 0x00;
    01A3 BC29      OUT	0x29,R2
(0051)  OCR1BL = pwm;
    01A4 BD08      OUT	0x28,R16
(0052)  ICR1H  = 0x00;
    01A5 BC27      OUT	0x27,R2
(0053) 
(0054) }
    01A6 9508      RET
FILE: F:\IccAvr_Pro\key.c
(0001) #include "key.h"
(0002) 
(0003) unsigned char keyflag[4];
(0004) 
(0005) unsigned char ReadKey(void)
(0006) {
(0007)  	unsigned char temp,i;
(0008) 	temp=PINB&0x0f;
_ReadKey:
  temp                 --> R16
  i                    --> R16
    01A7 B306      IN	R16,0x16
    01A8 700F      ANDI	R16,0xF
(0009) 	switch(temp)
    01A9 2711      CLR	R17
    01AA 3007      CPI	R16,7
    01AB E0E0      LDI	R30,0
    01AC 071E      CPC	R17,R30
    01AD F0F9      BEQ	0x01CD
    01AE 300B      CPI	R16,0xB
    01AF E0E0      LDI	R30,0
    01B0 071E      CPC	R17,R30
    01B1 F0A9      BEQ	0x01C7
    01B2 300D      CPI	R16,0xD
    01B3 E0E0      LDI	R30,0
    01B4 071E      CPC	R17,R30
    01B5 F059      BEQ	0x01C1
    01B6 300E      CPI	R16,0xE
    01B7 E0E0      LDI	R30,0
    01B8 071E      CPC	R17,R30
    01B9 F009      BEQ	0x01BB
    01BA C017      RJMP	0x01D2
(0010) 		{
(0011) 		 case 0x0e:
(0012) 		 	  keyflag[0]++;break;
    01BB 91800068  LDS	R24,_keyflag
    01BD 5F8F      SUBI	R24,0xFF
    01BE 93800068  STS	_keyflag,R24
    01C0 C011      RJMP	0x01D2
(0013) 		 case 0x0d:
(0014) 		 	  keyflag[1]++;break;
    01C1 91800069  LDS	R24,_keyflag+1
    01C3 5F8F      SUBI	R24,0xFF
    01C4 93800069  STS	_keyflag+1,R24
    01C6 C00B      RJMP	0x01D2
(0015) 		 case 0x0b:
(0016) 		 	  keyflag[2]++;break;
    01C7 9180006A  LDS	R24,_keyflag+2
    01C9 5F8F      SUBI	R24,0xFF
    01CA 9380006A  STS	_keyflag+2,R24
    01CC C005      RJMP	0x01D2
(0017) 		 case 0x07:
(0018) 		 	  keyflag[3]++;break;
    01CD 9180006B  LDS	R24,_keyflag+3
    01CF 5F8F      SUBI	R24,0xFF
    01D0 9380006B  STS	_keyflag+3,R24
(0019) 		 }
(0020) 		 for(i=0;i<4;i++)
    01D2 2700      CLR	R16
    01D3 C015      RJMP	0x01E9
(0021) 		 {
(0022) 		  if(keyflag[i]==4)
    01D4 E688      LDI	R24,0x68
    01D5 E090      LDI	R25,0
    01D6 2FE0      MOV	R30,R16
    01D7 27FF      CLR	R31
    01D8 0FE8      ADD	R30,R24
    01D9 1FF9      ADC	R31,R25
    01DA 8180      LDD	R24,Z+0
    01DB 3084      CPI	R24,4
    01DC F459      BNE	0x01E8
(0023) 		  		{
(0024) 				 keyflag[0]=0;
    01DD 2422      CLR	R2
    01DE 92200068  STS	_keyflag,R2
(0025) 				 keyflag[1]=0;
    01E0 92200069  STS	_keyflag+1,R2
(0026) 				 keyflag[2]=0;
    01E2 9220006A  STS	_keyflag+2,R2
(0027) 				 keyflag[3]=0;
    01E4 9220006B  STS	_keyflag+3,R2
(0028) 				 return i+1;
    01E6 5F0F      SUBI	R16,0xFF
    01E7 C004      RJMP	0x01EC
    01E8 9503      INC	R16
    01E9 3004      CPI	R16,4
    01EA F348      BCS	0x01D4
(0029) 				 } 
(0030) 		 }
(0031) 	return 0;    
    01EB 2700      CLR	R16
    01EC 9508      RET
FILE: F:\IccAvr_Pro\ADC.c
(0001) 
(0002) #include "ADC.h"
(0003) const unsigned char ADChannel[]={3,5,7,0xff};
(0004) unsigned int AdValue[8];
(0005) unsigned char AdP=0;
(0006) unsigned char AdFlag=0;
(0007) //ADC initialisation
(0008) // Conversion time: 28uS
(0009) void adc_init(void)
(0010) {
(0011)  ADCSR = 0x00; //disable adc
_adc_init:
    01ED 2422      CLR	R2
    01EE B826      OUT	0x06,R2
(0012)  ADMUX = 0x40; //select adc input 0
    01EF E480      LDI	R24,0x40
    01F0 B987      OUT	0x07,R24
(0013)  ACSR  = 0x80;
    01F1 E880      LDI	R24,0x80
    01F2 B988      OUT	0x08,R24
(0014)  ADCSR = 0x8C;
    01F3 E88C      LDI	R24,0x8C
    01F4 B986      OUT	0x06,R24
(0015)  AdP=0;
    01F5 92200066  STS	0x66,R2
(0016) }
    01F7 9508      RET
_adc_isr:
  value                --> R16
    01F8 920A      ST	R0,-Y
    01F9 921A      ST	R1,-Y
    01FA 922A      ST	R2,-Y
    01FB 923A      ST	R3,-Y
    01FC 930A      ST	R16,-Y
    01FD 931A      ST	R17,-Y
    01FE 938A      ST	R24,-Y
    01FF 939A      ST	R25,-Y
    0200 93EA      ST	R30,-Y
    0201 93FA      ST	R31,-Y
    0202 B60F      IN	R0,0x3F
    0203 920A      ST	R0,-Y
(0017) 
(0018) #pragma interrupt_handler adc_isr:15
(0019) void adc_isr(void)
(0020) {
(0021)  //conversion complete, read value (int) using...
(0022)  // value=ADCL;            //Read 8 low bits first (important)
(0023)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0024)  unsigned int value;
(0025)  		  value=ADCL;
    0204 B104      IN	R16,0x04
    0205 2711      CLR	R17
(0026) 		  value|=(int)ADCH<<8;
    0206 B025      IN	R2,0x05
    0207 2433      CLR	R3
    0208 2C32      MOV	R3,R2
    0209 2422      CLR	R2
    020A 2902      OR	R16,R2
    020B 2913      OR	R17,R3
(0027) 		  AdValue[ADChannel[AdP]]=value;
    020C E584      LDI	R24,0x54
    020D E090      LDI	R25,0
    020E 91E00066  LDS	R30,0x66
    0210 27FF      CLR	R31
    0211 0FE8      ADD	R30,R24
    0212 1FF9      ADC	R31,R25
    0213 91E4      LPM	R30,0(Z)
    0214 E082      LDI	R24,2
    0215 9F8E      MUL	R24,R30
    0216 01F0      MOVW	R30,R0
    0217 E68C      LDI	R24,0x6C
    0218 E090      LDI	R25,0
    0219 0FE8      ADD	R30,R24
    021A 1FF9      ADC	R31,R25
    021B 8311      STD	Z+1,R17
    021C 8300      STD	Z+0,R16
(0028) 		  AdP++;
    021D 91800066  LDS	R24,0x66
    021F 5F8F      SUBI	R24,0xFF
    0220 93800066  STS	0x66,R24
(0029) 		  if (ADChannel[AdP]!=0xff)
    0222 E584      LDI	R24,0x54
    0223 E090      LDI	R25,0
    0224 91E00066  LDS	R30,0x66
    0226 27FF      CLR	R31
    0227 0FE8      ADD	R30,R24
    0228 1FF9      ADC	R31,R25
    0229 91E4      LPM	R30,0(Z)
    022A 3FEF      CPI	R30,0xFF
    022B F051      BEQ	0x0236

⌨️ 快捷键说明

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