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

📄 main.lst

📁 一个关于AVR单片机的例程
💻 LST
字号:
__start:
__text_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 940E007C  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: D:\桌面\教程\外部中断\main.c
(0001) //ICC-AVR application builder : 2007-2-17 7:56:49
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) // www.avrvi.com AVR与虚拟仪器
(0005) 
(0006) // 硬件连接:
(0007) // PA0—————LED0
(0008) // PA1—————LED1
(0009) // PD2—————独立按键A
(0010) // PD3—————独立按键B
(0011) 
(0012) // 实验效果:
(0013) // 按A时,LED0亮与灭交替变换
(0014) // 按B时,LED1亮与灭交替变换
(0015) 
(0016) #include <iom16v.h>
(0017) #include <macros.h>
(0018) 
(0019) void port_init(void)
(0020) {
(0021)  PORTA = 0x00;
_port_init:
    004B 2422      CLR	R2
    004C BA2B      OUT	0x1B,R2
(0022)  DDRA  = 0x03; //PORTA.0 PORTA.1 输出,LED指示
    004D E083      LDI	R24,3
    004E BB8A      OUT	0x1A,R24
(0023)  PORTB = 0x00;
    004F BA28      OUT	0x18,R2
(0024)  DDRB  = 0x00;
    0050 BA27      OUT	0x17,R2
(0025)  PORTC = 0x00; //m103 output only
    0051 BA25      OUT	0x15,R2
(0026)  DDRC  = 0x00;
    0052 BA24      OUT	0x14,R2
(0027)  PORTD |= (1<<2)|(1<<3); //使能内部上拉
    0053 B382      IN	R24,0x12
    0054 608C      ORI	R24,0xC
    0055 BB82      OUT	0x12,R24
(0028)  DDRD = 0x00; //PD2,PD3 对应INT0,INT1 一定要设置为输入
    0056 BA21      OUT	0x11,R2
    0057 9508      RET
_int0_isr:
    0058 922A      ST	R2,-Y
    0059 938A      ST	R24,-Y
    005A B62F      IN	R2,0x3F
    005B 922A      ST	R2,-Y
(0029) }
(0030) 
(0031) #pragma interrupt_handler int0_isr:2
(0032) void int0_isr(void)
(0033) {
(0034)  //external interupt on INT0
(0035)  PORTA ^= 0x01;  //PA0取反
    005C E081      LDI	R24,1
    005D B22B      IN	R2,0x1B
    005E 2628      EOR	R2,R24
    005F BA2B      OUT	0x1B,R2
    0060 9029      LD	R2,Y+
    0061 BE2F      OUT	0x3F,R2
    0062 9189      LD	R24,Y+
    0063 9029      LD	R2,Y+
    0064 9518      RETI
_int1_isr:
    0065 922A      ST	R2,-Y
    0066 938A      ST	R24,-Y
    0067 B62F      IN	R2,0x3F
    0068 922A      ST	R2,-Y
(0036) }
(0037) 
(0038) #pragma interrupt_handler int1_isr:3
(0039) void int1_isr(void)
(0040) {
(0041)  //external interupt on INT1
(0042)  PORTA ^= 0x02;  //PA1取反
    0069 E082      LDI	R24,2
    006A B22B      IN	R2,0x1B
    006B 2628      EOR	R2,R24
    006C BA2B      OUT	0x1B,R2
    006D 9029      LD	R2,Y+
    006E BE2F      OUT	0x3F,R2
    006F 9189      LD	R24,Y+
    0070 9029      LD	R2,Y+
    0071 9518      RETI
(0043) }
(0044) 
(0045) //call this routine to initialize all peripherals
(0046) void init_devices(void)
(0047) {
(0048)  //stop errant interrupts until set up
(0049)  CLI(); //disable all interrupts
_init_devices:
    0072 94F8      BCLR	7
(0050)  port_init();
    0073 DFD7      RCALL	_port_init
(0051) 
(0052)  MCUCR = 0x0A; //允许INT0和INT1外部中断
    0074 E08A      LDI	R24,0xA
    0075 BF85      OUT	0x35,R24
(0053)  GICR  = 0xC0;
    0076 EC80      LDI	R24,0xC0
    0077 BF8B      OUT	0x3B,R24
(0054)  TIMSK = 0x00; //timer interrupt sources
    0078 2422      CLR	R2
    0079 BE29      OUT	0x39,R2
(0055)  SEI(); //re-enable interrupts
    007A 9478      BSET	7
    007B 9508      RET
(0056)  //all peripherals are now initialized
(0057) }
(0058) 
(0059) void main(void)
(0060) {
(0061)  init_devices();
_main:
    007C DFF5      RCALL	_init_devices
(0062)  while(1)
FILE: <library>
    007D CFFF      RJMP	0x007D
    007E 9508      RET

⌨️ 快捷键说明

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