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

📄 02-8a-11.lst

📁 这里有11个用ICCAVR开发的源代码,经DEMO板调试后已经通过.
💻 LST
字号:
__start:
__text_start:
    001E EFCF      LDI	R28,0xFF
    001F E0D2      LDI	R29,2
    0020 BFCD      OUT	0x3D,R28
    0021 BFDE      OUT	0x3E,R29
    0022 51C0      SUBI	R28,0x10
    0023 40D0      SBCI	R29,0
    0024 EA0A      LDI	R16,0xAA
    0025 8308      STD	Y+0,R16
    0026 2400      CLR	R0
    0027 E0E8      LDI	R30,0x8
    0028 E0F1      LDI	R31,1
    0029 E011      LDI	R17,1
    002A 31E0      CPI	R30,0x10
    002B 07F1      CPC	R31,R17
    002C F011      BEQ	0x002F
    002D 9201      ST	R0,Z+
    002E CFFB      RJMP	0x002A
    002F 8300      STD	Z+0,R16
    0030 E3E4      LDI	R30,0x34
    0031 E0F0      LDI	R31,0
    0032 E0A0      LDI	R26,0
    0033 E0B1      LDI	R27,1
    0034 E010      LDI	R17,0
    0035 33EC      CPI	R30,0x3C
    0036 07F1      CPC	R31,R17
    0037 F021      BEQ	0x003C
    0038 95C8      LPM
    0039 9631      ADIW	R30,1
    003A 920D      ST	R0,X+
    003B CFF9      RJMP	0x0035
    003C D0B6      RCALL	_main
_exit:
    003D CFFF      RJMP	_exit
FILE: D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
(0001) //ICC-AVR application builder : 2005-3-15 10:10:23
(0002) // Target : M48
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom48v.h>
(0006) #include <macros.h>
(0007) unsigned int adc_w;
(0008) unsigned	 int adc_old,bjz;
(0009) unsigned char ad_high,ad_low;
(0010) unsigned int adc[4]= {0x333,0x266,0x199,0xcc};
(0011) void alarm(void);
(0012) 
(0013) /*
(0014) #define adc_4 0x333;
(0015) #define	adc_3 0x266;
(0016) #define	adc_2 0x199;
(0017) #define	adc_1 0xcc;
(0018) */
(0019) void port_init(void)
(0020) {
(0021)  PORTB = 0xFF;
_port_init:
    003E EF8F      LDI	R24,0xFF
    003F B985      OUT	0x05,R24
(0022)  DDRB  = 0x07;
    0040 E087      LDI	R24,7
    0041 B984      OUT	0x04,R24
(0023)  PORTC = 0x7F; //m103 output only
    0042 E78F      LDI	R24,0x7F
    0043 B988      OUT	0x08,R24
(0024)  DDRC  = 0x00;
    0044 2422      CLR	R2
    0045 B827      OUT	0x07,R2
(0025)  PORTD = 0xFF;
    0046 EF8F      LDI	R24,0xFF
    0047 B98B      OUT	0x0B,R24
(0026)  DDRD  = 0xFF;
    0048 B98A      OUT	0x0A,R24
    0049 9508      RET
(0027) }
(0028) 
(0029) //ADC initialize
(0030) // Conversion time: 13uS
(0031) void adc_init(void)
(0032) {
(0033)  ADCSRA = 0x00; //disable adc
_adc_init:
    004A 2422      CLR	R2
    004B 9220007A  STS	0x7A,R2
(0034)  ADMUX = 0x40;  //select adc input 0
    004D E480      LDI	R24,0x40
    004E 9380007C  STS	0x7C,R24
(0035)  ACSR  = 0x80;
    0050 E880      LDI	R24,0x80
    0051 BF80      OUT	0x30,R24
(0036)  ADCSRB = 0x00;
    0052 9220007B  STS	0x7B,R2
(0037)  ADCSRA = 0xCB;
    0054 EC8B      LDI	R24,0xCB
    0055 9380007A  STS	0x7A,R24
    0057 9508      RET
_adc_isr:
    0058 922A      ST	R2,-Y
    0059 923A      ST	R3,-Y
    005A 938A      ST	R24,-Y
    005B B62F      IN	R2,0x3F
    005C 922A      ST	R2,-Y
(0038)  
(0039) }
(0040) 
(0041) #pragma interrupt_handler adc_isr:22
(0042) void adc_isr(void)
(0043) {
(0044)  adc_w = ADC;
    005D 90200078  LDS	R2,0x78
    005F 90300079  LDS	R3,0x79
    0061 9230010F  STS	adc_w+1,R3
    0063 9220010E  STS	adc_w,R2
(0045)  ADMUX = 0x40;
    0065 E480      LDI	R24,0x40
    0066 9380007C  STS	0x7C,R24
(0046)  ADCSRA = 0xCB;
    0068 EC8B      LDI	R24,0xCB
    0069 9380007A  STS	0x7A,R24
    006B 9029      LD	R2,Y+
    006C BE2F      OUT	0x3F,R2
    006D 9189      LD	R24,Y+
    006E 9039      LD	R3,Y+
    006F 9029      LD	R2,Y+
    0070 9518      RETI
(0047)  //ad_high = adch;
(0048)  //ad_low = adcl;
(0049)  //conversion complete, read value (int) using...
(0050)  // value=ADCL;            //Read 8 low bits first (important)
(0051)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0052) }
(0053) 
(0054) //call this routine to initialize all peripherals
(0055) void init_devices(void)
(0056) {
(0057)  //stop errant interrupts until set up
(0058)  CLI(); //disable all interrupts
_init_devices:
    0071 94F8      BCLR	7
(0059)  port_init();
    0072 DFCB      RCALL	_port_init
(0060)  adc_init();
    0073 DFD6      RCALL	_adc_init
(0061) 
(0062)  MCUCR = 0x00;
    0074 2422      CLR	R2
    0075 BE25      OUT	0x35,R2
(0063)  EICRA = 0x00; //extended ext ints
    0076 92200069  STS	0x69,R2
(0064)  EIMSK = 0x00;
    0078 BA2D      OUT	0x1D,R2
(0065)  
(0066)  TIMSK0 = 0x00; //timer 0 interrupt sources
    0079 9220006E  STS	0x6E,R2
(0067)  TIMSK1 = 0x00; //timer 1 interrupt sources
    007B 9220006F  STS	0x6F,R2
(0068)  TIMSK2 = 0x00; //timer 2 interrupt sources
    007D 92200070  STS	0x70,R2
(0069)  
(0070)  PCMSK0 = 0x00; //pin change mask 0 
    007F 9220006B  STS	0x6B,R2
(0071)  PCMSK1 = 0x00; //pin change mask 1 
    0081 9220006C  STS	0x6C,R2
(0072)  PCMSK2 = 0x00; //pin change mask 2
    0083 9220006D  STS	0x6D,R2
(0073)  PCICR = 0x00; //pin change enable 
    0085 92200068  STS	0x68,R2
(0074)  PRR = 0x00; //power controller
    0087 92200064  STS	0x64,R2
(0075)  SEI(); //re-enable interrupts
    0089 9478      BSET	7
    008A 9508      RET
_display:
  i                    --> R20
  com                  --> R22
    008B D088      RCALL	push_gset2
    008C 01B8      MOVW	R22,R16
(0076)  //all peripherals are now initialized
(0077) }
(0078) 
(0079) /*显示函数*/
(0080) void	display(unsigned int com)
(0081) {
    008D C02F      RJMP	0x00BD
(0082)  unsigned int i;
(0083)  while(bjz != com)
(0084)  {
(0085)   bjz = com;
    008E 9370010B  STS	bjz+1,R23
    0090 9360010A  STS	bjz,R22
(0086)  if(com > adc[1])
    0092 90200102  LDS	R2,adc+2
    0094 90300103  LDS	R3,adc+3
    0096 1626      CP	R2,R22
    0097 0637      CPC	R3,R23
    0098 F468      BCC	0x00A6
(0087)  		{
(0088) 		 i = com;
    0099 01AB      MOVW	R20,R22
(0089) 		 if(i > adc[0])
    009A 90200100  LDS	R2,adc
    009C 90300101  LDS	R3,adc+1
    009E 1626      CP	R2,R22
    009F 0637      CPC	R3,R23
    00A0 F410      BCC	0x00A3
(0090) 		 	  {alarm();}
    00A1 D039      RCALL	_alarm
    00A2 C01A      RJMP	0x00BD
(0091) 			  else
(0092) 			  	  PORTB = 0XFB;
    00A3 EF8B      LDI	R24,0xFB
    00A4 B985      OUT	0x05,R24
(0093) 		}
    00A5 C017      RJMP	0x00BD
(0094)  else
(0095)  	 {
(0096) 	  i = com;
    00A6 01AB      MOVW	R20,R22
(0097) 	  if(i > adc[2])
    00A7 90200104  LDS	R2,0x104
    00A9 90300105  LDS	R3,0x105
    00AB 1626      CP	R2,R22
    00AC 0637      CPC	R3,R23
    00AD F418      BCC	0x00B1
(0098) 	  	   PORTB = 0XFD;
    00AE EF8D      LDI	R24,0xFD
    00AF B985      OUT	0x05,R24
    00B0 C00C      RJMP	0x00BD
(0099) 		   else 
(0100) 		   		{
(0101) 				 if(i>adc[3])
    00B1 90200106  LDS	R2,0x106
    00B3 90300107  LDS	R3,0x107
    00B5 1624      CP	R2,R20
    00B6 0635      CPC	R3,R21
    00B7 F418      BCC	0x00BB
(0102) 				 	PORTB = 0XFE;
    00B8 EF8E      LDI	R24,0xFE
    00B9 B985      OUT	0x05,R24
    00BA C002      RJMP	0x00BD
(0103) 				 else 
(0104) 				 	  PORTB = 0XFF;
    00BB EF8F      LDI	R24,0xFF
    00BC B985      OUT	0x05,R24
    00BD 9020010A  LDS	R2,bjz
    00BF 9030010B  LDS	R3,bjz+1
    00C1 1626      CP	R2,R22
    00C2 0637      CPC	R3,R23
    00C3 F651      BNE	0x008E
    00C4 D047      RCALL	pop_gset2
    00C5 9508      RET
(0105) 				}
(0106) 	 }		
(0107)   }		
(0108) }
(0109) 
(0110) void delay_us(int time)
(0111) {   //微秒延时  
(0112)  do
(0113)  {
(0114)   time--;
_delay_us:
  time                 --> R16
    00C6 5001      SUBI	R16,1
    00C7 4010      SBCI	R17,0
(0115)  }	
(0116)   while (time>1);
    00C8 E081      LDI	R24,1
    00C9 E090      LDI	R25,0
    00CA 1780      CP	R24,R16
    00CB 0791      CPC	R25,R17
    00CC F3CC      BLT	0x00C6
    00CD 9508      RET
_delay_ms:
  time                 --> R20
    00CE D047      RCALL	push_gset1
    00CF 01A8      MOVW	R20,R16
(0117) }	  
(0118) 
(0119) void delay_ms(unsigned int time)
(0120) {   //毫秒延时
    00D0 C005      RJMP	0x00D6
(0121)  while(time!=0)
(0122)  {		
(0123)   delay_us(1000);
    00D1 EE08      LDI	R16,0xE8
    00D2 E013      LDI	R17,3
    00D3 DFF2      RCALL	_delay_us
(0124)   time--;
    00D4 5041      SUBI	R20,1
    00D5 4050      SBCI	R21,0
    00D6 3040      CPI	R20,0
    00D7 0745      CPC	R20,R21
    00D8 F7C1      BNE	0x00D1
    00D9 D03F      RCALL	pop_gset1
    00DA 9508      RET
(0125)  }
(0126) }
(0127) 
(0128) 
(0129) /*报警函数*/
(0130) void alarm(void)
(0131) {
_alarm:
    00DB C015      RJMP	0x00F1
(0132)  while(1){
(0133)  //i=PIND&0x04;   		  //读出PD2口状态
(0134)  if(adc_old >= adc[0])
    00DC 90200100  LDS	R2,adc
    00DE 90300101  LDS	R3,adc+1
    00E0 9040010C  LDS	R4,adc_old
    00E2 9050010D  LDS	R5,adc_old+1
    00E4 1442      CP	R4,R2
    00E5 0453      CPC	R5,R3
    00E6 F040      BCS	0x00EF
(0135)  	 {PORTD^=0x08;
    00E7 E088      LDI	R24,0x8
    00E8 B02B      IN	R2,0x0B
    00E9 2628      EOR	R2,R24
    00EA B82B      OUT	0x0B,R2
(0136) 	 delay_ms(100);
    00EB E604      LDI	R16,0x64
    00EC E010      LDI	R17,0
    00ED DFE0      RCALL	_delay_ms
(0137) 	 }
    00EE C002      RJMP	0x00F1
(0138)  else
(0139)  	 PORTD=0XFF; 
    00EF EF8F      LDI	R24,0xFF
    00F0 B98B      OUT	0x0B,R24
    00F1 CFEA      RJMP	0x00DC
    00F2 9508      RET
(0140)  }
(0141) }
(0142) 
(0143) void   main()
(0144) {
(0145)  init_devices();
_main:
    00F3 DF7D      RCALL	_init_devices
    00F4 C015      RJMP	0x010A
(0146)  while(1){
(0147)  		  if(adc_w != adc_old){
    00F5 9020010C  LDS	R2,adc_old
    00F7 9030010D  LDS	R3,adc_old+1
    00F9 9040010E  LDS	R4,adc_w
    00FB 9050010F  LDS	R5,adc_w+1
    00FD 1442      CP	R4,R2
    00FE 0453      CPC	R5,R3
    00FF F051      BEQ	0x010A
(0148) 		  		   	  		   adc_old = adc_w;
    0100 0112      MOVW	R2,R4
    0101 9230010D  STS	adc_old+1,R3
    0103 9220010C  STS	adc_old,R2
(0149) 							   display(adc_old);
FILE: <library>
    0105 9100010C  LDS	R16,adc_old
    0107 9110010D  LDS	R17,adc_old+1
    0109 DF81      RCALL	_display
    010A CFEA      RJMP	0x00F5
    010B 9508      RET
pop_gset2:
    010C E0E2      LDI	R30,2
    010D C00C      RJMP	pop
push_gset5:
    010E 92FA      ST	R15,-Y
    010F 92EA      ST	R14,-Y
push_gset4:
    0110 92DA      ST	R13,-Y
    0111 92CA      ST	R12,-Y
push_gset3:
    0112 92BA      ST	R11,-Y
    0113 92AA      ST	R10,-Y
push_gset2:
    0114 937A      ST	R23,-Y
    0115 936A      ST	R22,-Y
push_gset1:
    0116 935A      ST	R21,-Y
    0117 934A      ST	R20,-Y
    0118 9508      RET
pop_gset1:
    0119 E0E1      LDI	R30,1
pop:
    011A 9149      LD	R20,Y+
    011B 9159      LD	R21,Y+
    011C FDE0      SBRC	R30,0
    011D 9508      RET
    011E 9169      LD	R22,Y+
    011F 9179      LD	R23,Y+
    0120 FDE1      SBRC	R30,1
    0121 9508      RET
    0122 90A9      LD	R10,Y+
    0123 90B9      LD	R11,Y+
    0124 FDE2      SBRC	R30,2
    0125 9508      RET
    0126 90C9      LD	R12,Y+
    0127 90D9      LD	R13,Y+
    0128 FDE3      SBRC	R30,3
    0129 9508      RET
    012A 90E9      LD	R14,Y+
    012B 90F9      LD	R15,Y+
    012C 9508      RET

⌨️ 快捷键说明

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