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

📄 e.lst

📁 用Atmega16实现中断
💻 LST
字号:
__start:
__text_start:
    0032 E5CF      LDI	R28,0x5F
    0033 E0D4      LDI	R29,4
    0034 BFCD      OUT	0x3D,R28
    0035 BFDE      OUT	0x3E,R29
    0036 51C0      SUBI	R28,0x10
    0037 40D0      SBCI	R29,0
    0038 EA0A      LDI	R16,0xAA
    0039 8308      STD	Y+0,R16
    003A 2400      CLR	R0
    003B E6E0      LDI	R30,0x60
    003C E0F0      LDI	R31,0
    003D E010      LDI	R17,0
    003E 36E1      CPI	R30,0x61
    003F 07F1      CPC	R31,R17
    0040 F011      BEQ	0x0043
    0041 9201      ST	R0,Z+
    0042 CFFB      RJMP	0x003E
    0043 8300      STD	Z+0,R16
    0044 E6E4      LDI	R30,0x64
    0045 E0F0      LDI	R31,0
    0046 E6A0      LDI	R26,0x60
    0047 E0B0      LDI	R27,0
    0048 E010      LDI	R17,0
    0049 36E4      CPI	R30,0x64
    004A 07F1      CPC	R31,R17
    004B F021      BEQ	0x0050
    004C 95C8      LPM
    004D 9631      ADIW	R30,1
    004E 920D      ST	R0,X+
    004F CFF9      RJMP	0x0049
    0050 940E0093  CALL	_main
_exit:
    0052 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\456\FF.c
(0001) //ICC-AVR application builder : 2009-5-19 13:21:53
(0002) // Target : M16
(0003) // Crystal: 4.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) flash unsigned char led_7[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
(0008)                       0x80,0x90,0x88,0x83,0xC6,0xA1,0x80,0x8E};
(0009) unsigned char counter;
(0010) void port_init(void)
(0011) {
(0012)  PORTA = 0xFF;
_port_init:
    0053 EF8F      LDI	R24,0xFF
    0054 BB8B      OUT	0x1B,R24
(0013)  DDRA  = 0xFF;
    0055 BB8A      OUT	0x1A,R24
(0014)  PORTB = 0xFF;
    0056 BB88      OUT	0x18,R24
(0015)  DDRB  = 0x00;
    0057 2422      CLR	R2
    0058 BA27      OUT	0x17,R2
(0016)  PORTC = 0xFF; //m103 output only
    0059 BB85      OUT	0x15,R24
(0017)  DDRC  = 0x00;
    005A BA24      OUT	0x14,R2
(0018)  PORTD = 0xFF;
    005B BB82      OUT	0x12,R24
(0019)  DDRD  = 0x00;
    005C BA21      OUT	0x11,R2
(0020) }
    005D 9508      RET
_int0_isr:
    005E 922A      ST	R2,-Y
    005F 938A      ST	R24,-Y
    0060 939A      ST	R25,-Y
    0061 B62F      IN	R2,0x3F
    0062 922A      ST	R2,-Y
(0021) 
(0022) #pragma interrupt_handler int0_isr:2
(0023) void int0_isr(void)
(0024) {
(0025)  //external interupt on INT0
(0026)  if (++counter>=16) counter = 0;
    0063 91800060  LDS	R24,_counter
    0065 5F8F      SUBI	R24,0xFF
    0066 2E28      MOV	R2,R24
    0067 92200060  STS	_counter,R2
    0069 3180      CPI	R24,0x10
    006A F018      BCS	0x006E
    006B 2422      CLR	R2
    006C 92200060  STS	_counter,R2
(0027) }
    006E 9029      LD	R2,Y+
    006F BE2F      OUT	0x3F,R2
    0070 9199      LD	R25,Y+
    0071 9189      LD	R24,Y+
    0072 9029      LD	R2,Y+
    0073 9518      RETI
_int1_isr:
    0074 922A      ST	R2,-Y
    0075 938A      ST	R24,-Y
    0076 B62F      IN	R2,0x3F
    0077 922A      ST	R2,-Y
(0028) 
(0029) #pragma interrupt_handler int1_isr:3
(0030) void int1_isr(void)
(0031) {
(0032)  //external interupt on INT1
(0033)  if (counter) --counter;
    0078 90200060  LDS	R2,_counter
    007A 2022      TST	R2
    007B F029      BEQ	0x0081
    007C 2D82      MOV	R24,R2
    007D 5081      SUBI	R24,1
    007E 93800060  STS	_counter,R24
    0080 C003      RJMP	0x0084
(0034) 	else counter = 15;
    0081 E08F      LDI	R24,0xF
    0082 93800060  STS	_counter,R24
(0035) }
    0084 9029      LD	R2,Y+
    0085 BE2F      OUT	0x3F,R2
    0086 9189      LD	R24,Y+
    0087 9029      LD	R2,Y+
    0088 9518      RETI
(0036) 
(0037) //call this routine to initialise all peripherals
(0038) void init_devices(void)
(0039) {
(0040)  //stop errant interrupts until set up
(0041)  CLI(); //disable all interrupts
_init_devices:
    0089 94F8      BCLR	7
(0042)  port_init();
    008A DFC8      RCALL	_port_init
(0043) 
(0044)  MCUCR = 0x0A;
    008B E08A      LDI	R24,0xA
    008C BF85      OUT	0x35,R24
(0045)  GICR  = 0xC0;
    008D EC80      LDI	R24,0xC0
    008E BF8B      OUT	0x3B,R24
(0046)  TIMSK = 0x00; //timer interrupt sources
    008F 2422      CLR	R2
    0090 BE29      OUT	0x39,R2
(0047)  SEI(); //re-enable interrupts
    0091 9478      BSET	7
(0048)  //all peripherals are now initialised
(0049) }
    0092 9508      RET
(0050) void main(void)
(0051) {
(0052)  	 PORTA=0xFF;
_main:
    0093 EF8F      LDI	R24,0xFF
    0094 BB8B      OUT	0x1B,R24
(0053)     DDRA=0xFF;
    0095 BB8A      OUT	0x1A,R24
(0054) 
(0055)     GICR|=0xC0;		// 允许INT0、INT1中断
    0096 B78B      IN	R24,0x3B
    0097 6C80      ORI	R24,0xC0
    0098 BF8B      OUT	0x3B,R24
(0056)     MCUCR=0x0A;		// INT0、INT1下降沿触发 
    0099 E08A      LDI	R24,0xA
    009A BF85      OUT	0x35,R24
(0057)     GIFR=0xC0;		// 清除INT0、INT1中断标志位
    009B EC80      LDI	R24,0xC0
    009C BF8A      OUT	0x3A,R24
(0058) 
(0059)     counter = 0;	// 计数单元初始化为0	
    009D 2422      CLR	R2
    009E 92200060  STS	_counter,R2
    00A0 C00B      RJMP	0x00AC
(0060) 
(0061)     //#asm("sei")		// 全局中断允许
(0062) 
(0063) 	
(0064)     while (1)
(0065)     {
(0066) 	 	
(0067)       	 PORTA = led_7[counter];		// 显示计数单元
    00A1 E584      LDI	R24,0x54
    00A2 E090      LDI	R25,0
    00A3 91E00060  LDS	R30,_counter
    00A5 27FF      CLR	R31
    00A6 0FE8      ADD	R30,R24
    00A7 1FF9      ADC	R31,R25
    00A8 91E4      LPM	R30,0(Z)
    00A9 BBEB      OUT	0x1B,R30
(0068) 		int0_isr();
    00AA DFB3      RCALL	_int0_isr
(0069) 		int1_isr();
    00AB DFC8      RCALL	_int1_isr
    00AC CFF4      RJMP	0x00A1
(0070)     }
(0071) }
FILE: <library>
    00AD 9508      RET

⌨️ 快捷键说明

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