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

📄 ff.lis

📁 用Atmega16实现中断
💻 LIS
字号:
                        .module FF.c
                        .area lit(rom, con, rel)
 0000           _led_7::
 0000 C0F9              .byte 192,249
 0002 A4B0              .byte 164,176
 0004 9992              .byte 153,146
 0006 82F8              .byte 130,248
 0008 8090              .byte 128,144
 000A 8883              .byte 136,131
 000C C6A1              .byte 198,161
 000E 808E              .byte 128,142
 0010                   .dbfile C:\DOCUME~1\Administrator\桌面\456\FF.c
 0010                   .dbsym e led_7 _led_7 A[16:16]kc
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\456\FF.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 11
 0000           ; //ICC-AVR application builder : 2009-5-19 13:21:53
 0000           ; // Target : M16
 0000           ; // Crystal: 4.0000Mhz
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; flash unsigned char led_7[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
 0000           ;                       0x80,0x90,0x88,0x83,0xC6,0xA1,0x80,0x8E};
 0000           ; unsigned char counter;
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 12
 0000           ;  PORTA = 0xFF;
 0000 8FEF              ldi R24,255
 0002 8BBB              out 0x1b,R24
 0004                   .dbline 13
 0004           ;  DDRA  = 0xFF;
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 14
 0006           ;  PORTB = 0xFF;
 0006 88BB              out 0x18,R24
 0008                   .dbline 15
 0008           ;  DDRB  = 0x00;
 0008 2224              clr R2
 000A 27BA              out 0x17,R2
 000C                   .dbline 16
 000C           ;  PORTC = 0xFF; //m103 output only
 000C 85BB              out 0x15,R24
 000E                   .dbline 17
 000E           ;  DDRC  = 0x00;
 000E 24BA              out 0x14,R2
 0010                   .dbline 18
 0010           ;  PORTD = 0xFF;
 0010 82BB              out 0x12,R24
 0012                   .dbline 19
 0012           ;  DDRD  = 0x00;
 0012 21BA              out 0x11,R2
 0014                   .dbline -2
 0014                   .dbline 20
 0014           ; }
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C940B00          jmp _int0_isr
                        .area text(rom, con, rel)
 0016                   .dbfile C:\DOCUME~1\Administrator\桌面\456\FF.c
 0016                   .dbfunc e int0_isr _int0_isr fV
                        .even
 0016           _int0_isr::
 0016 2A92              st -y,R2
 0018 8A93              st -y,R24
 001A 9A93              st -y,R25
 001C 2FB6              in R2,0x3f
 001E 2A92              st -y,R2
 0020                   .dbline -1
 0020                   .dbline 24
 0020                   .dbline 26
 0020 80910000          lds R24,_counter
 0024 8F5F              subi R24,255    ; addi 1
 0026 282E              mov R2,R24
 0028 20920000          sts _counter,R2
 002C 8031              cpi R24,16
 002E 18F0              brlo L3
 0030                   .dbline 26
 0030 2224              clr R2
 0032 20920000          sts _counter,R2
 0036           L3:
 0036                   .dbline -2
 0036                   .dbline 27
 0036           ; 
 0036           ; #pragma interrupt_handler int0_isr:2
 0036           ; void int0_isr(void)
 0036           ; {
 0036           ;  //external interupt on INT0
 0036           ;  if (++counter>=16) counter = 0;
 0036           ; }
 0036           L2:
 0036 2990              ld R2,y+
 0038 2FBE              out 0x3f,R2
 003A 9991              ld R25,y+
 003C 8991              ld R24,y+
 003E 2990              ld R2,y+
 0040                   .dbline 0 ; func end
 0040 1895              reti
 0042                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 0C942100          jmp _int1_isr
                        .area text(rom, con, rel)
 0042                   .dbfile C:\DOCUME~1\Administrator\桌面\456\FF.c
 0042                   .dbfunc e int1_isr _int1_isr fV
                        .even
 0042           _int1_isr::
 0042 2A92              st -y,R2
 0044 8A93              st -y,R24
 0046 2FB6              in R2,0x3f
 0048 2A92              st -y,R2
 004A                   .dbline -1
 004A                   .dbline 31
 004A           ; 
 004A           ; #pragma interrupt_handler int1_isr:3
 004A           ; void int1_isr(void)
 004A           ; {
 004A                   .dbline 33
 004A           ;  //external interupt on INT1
 004A           ;  if (counter) --counter;
 004A 20900000          lds R2,_counter
 004E 2220              tst R2
 0050 29F0              breq L6
 0052                   .dbline 33
 0052 822D              mov R24,R2
 0054 8150              subi R24,1
 0056 80930000          sts _counter,R24
 005A 03C0              xjmp L7
 005C           L6:
 005C                   .dbline 34
 005C 8FE0              ldi R24,15
 005E 80930000          sts _counter,R24
 0062           L7:
 0062                   .dbline -2
 0062                   .dbline 35
 0062           ;       else counter = 15;
 0062           ; }
 0062           L5:
 0062 2990              ld R2,y+
 0064 2FBE              out 0x3f,R2
 0066 8991              ld R24,y+
 0068 2990              ld R2,y+
 006A                   .dbline 0 ; func end
 006A 1895              reti
 006C                   .dbend
 006C                   .dbfunc e init_devices _init_devices fV
                        .even
 006C           _init_devices::
 006C                   .dbline -1
 006C                   .dbline 39
 006C           ; 
 006C           ; //call this routine to initialise all peripherals
 006C           ; void init_devices(void)
 006C           ; {
 006C                   .dbline 41
 006C           ;  //stop errant interrupts until set up
 006C           ;  CLI(); //disable all interrupts
 006C F894              cli
 006E                   .dbline 42
 006E           ;  port_init();
 006E C8DF              xcall _port_init
 0070                   .dbline 44
 0070           ; 
 0070           ;  MCUCR = 0x0A;
 0070 8AE0              ldi R24,10
 0072 85BF              out 0x35,R24
 0074                   .dbline 45
 0074           ;  GICR  = 0xC0;
 0074 80EC              ldi R24,192
 0076 8BBF              out 0x3b,R24
 0078                   .dbline 46
 0078           ;  TIMSK = 0x00; //timer interrupt sources
 0078 2224              clr R2
 007A 29BE              out 0x39,R2
 007C                   .dbline 47
 007C           ;  SEI(); //re-enable interrupts
 007C 7894              sei
 007E                   .dbline -2
 007E                   .dbline 49
 007E           ;  //all peripherals are now initialised
 007E           ; }
 007E           L8:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbend
 0080                   .dbfunc e main _main fV
                        .even
 0080           _main::
 0080                   .dbline -1
 0080                   .dbline 51
 0080           ; void main(void)
 0080           ; {
 0080                   .dbline 52
 0080           ;        PORTA=0xFF;
 0080 8FEF              ldi R24,255
 0082 8BBB              out 0x1b,R24
 0084                   .dbline 53
 0084           ;     DDRA=0xFF;
 0084 8ABB              out 0x1a,R24
 0086                   .dbline 55
 0086           ; 
 0086           ;     GICR|=0xC0;               // 允许INT0、INT1中断
 0086 8BB7              in R24,0x3b
 0088 806C              ori R24,192
 008A 8BBF              out 0x3b,R24
 008C                   .dbline 56
 008C           ;     MCUCR=0x0A;               // INT0、INT1下降沿触发 
 008C 8AE0              ldi R24,10
 008E 85BF              out 0x35,R24
 0090                   .dbline 57
 0090           ;     GIFR=0xC0;                // 清除INT0、INT1中断标志位
 0090 80EC              ldi R24,192
 0092 8ABF              out 0x3a,R24
 0094                   .dbline 59
 0094           ; 
 0094           ;     counter = 0;      // 计数单元初始化为0    
 0094 2224              clr R2
 0096 20920000          sts _counter,R2
 009A 0BC0              xjmp L11
 009C           L10:
 009C                   .dbline 65
 009C                   .dbline 67
 009C 80E0              ldi R24,<_led_7
 009E 90E0              ldi R25,>_led_7
 00A0 E0910000          lds R30,_counter
 00A4 FF27              clr R31
 00A6 E80F              add R30,R24
 00A8 F91F              adc R31,R25
 00AA E491              lpm R30,Z
 00AC EBBB              out 0x1b,R30
 00AE                   .dbline 68
 00AE B3DF              xcall _int0_isr
 00B0                   .dbline 69
 00B0 C8DF              xcall _int1_isr
 00B2                   .dbline 70
 00B2           L11:
 00B2                   .dbline 64
 00B2 F4CF              xjmp L10
 00B4           X0:
 00B4                   .dbline -2
 00B4                   .dbline 71
 00B4           ; 
 00B4           ;     //#asm("sei")             // 全局中断允许
 00B4           ; 
 00B4           ;       
 00B4           ;     while (1)
 00B4           ;     {
 00B4           ;               
 00B4           ;                PORTA = led_7[counter];                // 显示计数单元
 00B4           ;               int0_isr();
 00B4           ;               int1_isr();
 00B4           ;     }
 00B4           ; }
 00B4           L9:
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\456\FF.c
 0000           _counter::
 0000                   .blkb 1
 0001                   .dbsym e counter _counter c

⌨️ 快捷键说明

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