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

📄 main.lis

📁 一个关于AVR单片机的例程
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //ICC-AVR application builder : 2007-5-16 5:50:45
 0000           ; // Target : M16
 0000           ; // Crystal: 4.0000Mhz
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; extern void delay_ms (int time);
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 10
 0000           ;  PORTA = 0x00;
 0000 2224              clr R2
 0002 2BBA              out 0x1b,R2
 0004                   .dbline 11
 0004           ;  DDRA  = 0xFF;
 0004 8FEF              ldi R24,255
 0006 8ABB              out 0x1a,R24
 0008                   .dbline 12
 0008           ;  PORTB = 0xF0;
 0008 80EF              ldi R24,240
 000A 88BB              out 0x18,R24
 000C                   .dbline 13
 000C           ;  DDRB  = 0x0F;
 000C 8FE0              ldi R24,15
 000E 87BB              out 0x17,R24
 0010                   .dbline 14
 0010           ;  PORTC = 0x80; //m103 output only
 0010 80E8              ldi R24,128
 0012 85BB              out 0x15,R24
 0014                   .dbline 15
 0014           ;  DDRC  = 0x80;
 0014 84BB              out 0x14,R24
 0016                   .dbline 16
 0016           ;  PORTD = 0x04;
 0016 84E0              ldi R24,4
 0018 82BB              out 0x12,R24
 001A                   .dbline 17
 001A           ;  DDRD  = 0x00;
 001A 21BA              out 0x11,R2
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e init_devices _init_devices fV
                        .even
 001E           _init_devices::
 001E                   .dbline -1
 001E                   .dbline 22
 001E           ; }
 001E           ; 
 001E           ; //call this routine to initialize all peripherals
 001E           ; void init_devices(void)
 001E           ; {
 001E                   .dbline 24
 001E           ;  //stop errant interrupts until set up
 001E           ;  CLI(); //disable all interrupts
 001E F894              cli
 0020                   .dbline 25
 0020           ;  port_init();
 0020 EFDF              xcall _port_init
 0022                   .dbline 27
 0022           ; 
 0022           ;  MCUCR = 0x00;
 0022 2224              clr R2
 0024 25BE              out 0x35,R2
 0026                   .dbline 28
 0026           ;  GICR  = 0x40;
 0026 80E4              ldi R24,64
 0028 8BBF              out 0x3b,R24
 002A                   .dbline 29
 002A           ;  TIMSK = 0x00; //timer interrupt sources
 002A 29BE              out 0x39,R2
 002C                   .dbline 30
 002C           ;  SEI(); //re-enable interrupts
 002C 7894              sei
 002E                   .dbline -2
 002E           L2:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
                        .area lit(rom, con, rel)
 0000           _table::
 0000 7E30              .byte 126,48
 0002 6D79              .byte 'm,'y
 0004 335B              .byte 51,91
 0006 5F70              .byte 95,'p
 0008 7F7B              .byte 127,123
 000A 771F              .byte 'w,31
 000C 4E3D              .byte 'N,61
 000E 4F47              .byte 'O,'G
 0010                   .dbsym e table _table A[16:16]kc
                        .area data(ram, con, rel)
 0000                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0000           _position::
 0000                   .blkb 2
                        .area idata
 0000 8080              .byte 128,128
                        .area data(ram, con, rel)
 0002                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0002                   .blkb 2
                        .area idata
 0002 8080              .byte 128,128
                        .area data(ram, con, rel)
 0004                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0004                   .dbsym e position _position A[4:4]c
                        .area text(rom, con, rel)
 0030                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0030                   .dbfunc e main _main fV
                        .even
 0030           _main::
 0030                   .dbline -1
 0030                   .dbline 39
 0030           ;  //all peripherals are now initialized
 0030           ; }
 0030           ; 
 0030           ; 
 0030           ; const unsigned char table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
 0030           ; unsigned char position[]={0x80,0x80,0x80,0x80};
 0030           ; unsigned char key;
 0030           ; void main(void)
 0030           ; {
 0030                   .dbline 41
 0030           ; 
 0030           ; init_devices();
 0030 F6DF              xcall _init_devices
 0032 09C0              xjmp L5
 0034           L4:
 0034                   .dbline 43
 0034                   .dbline 44
 0034 80E0              ldi R24,<_table
 0036 90E0              ldi R25,>_table
 0038 E0910000          lds R30,_key
 003C FF27              clr R31
 003E E80F              add R30,R24
 0040 F91F              adc R31,R25
 0042 E491              lpm R30,Z
 0044 EBBB              out 0x1b,R30
 0046                   .dbline 45
 0046           L5:
 0046                   .dbline 42
 0046 F6CF              xjmp L4
 0048           X0:
 0048                   .dbline -2
 0048           L3:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C942500          jmp _scan_key
                        .area text(rom, con, rel)
 004A                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 004A                   .dbfunc e scan_key _scan_key fV
                        .even
 004A           _scan_key::
 004A 0E940000          xcall push_lset
 004E 0E940000          xcall push_gset1
 0052                   .dbline -1
 0052                   .dbline 88
 0052           ; while(1)
 0052           ; {
 0052           ;  PORTA=table[key];
 0052           ;  }
 0052           ; }
 0052           ; /*
 0052           ; void main(void)
 0052           ; {
 0052           ; init_devices();
 0052           ;  for(;;)
 0052           ;  {
 0052           ;   unsigned char i;
 0052           ;   for(i=0;i<4;i++)
 0052           ;   {PORTC|=position[i];
 0052           ;    PORTA=table[key];
 0052           ;    delay_ms(2); 
 0052           ;   }
 0052           ;  }
 0052           ; } 
 0052           ; #pragma interrupt_handler scan_key:2
 0052           ;  void scan_key(void)
 0052           ;  { CLI();
 0052           ;   switch(PINB)
 0052           ;    {
 0052           ;     case 0x70:key=0;break;
 0052           ;     case 0xb0:key=1;break;
 0052           ;     case 0xd0:key=2;break;
 0052           ;     case 0xe0:key=3;break;
 0052           ;    }
 0052           ;   PORTB=0x0F;
 0052           ;   DDRB=0xF0;
 0052           ;   delay_ms(1);
 0052           ;   switch(PINB&0X0F)
 0052           ;     {
 0052           ;       case 0x07:key=key+0;break;
 0052           ;       case 0x0b:key=key+4;break;
 0052           ;       case 0x0d:key=key+8;break;
 0052           ;       case 0x0e:key=key+12;break;
 0052           ;       }
 0052           ;       PORTB=0xF0;
 0052           ;     DDRB=0x0F;
 0052           ;       SEI();
 0052           ;  }
 0052           ; */
 0052           ; #pragma interrupt_handler scan_key:2
 0052           ;  void scan_key(void)
 0052           ; {
 0052                   .dbline 89
 0052           ; NOP();
 0052 0000              nop
 0054                   .dbline 90
 0054           ;  NOP();
 0054 0000              nop
 0056                   .dbline 91
 0056           ;       PORTB=0xF0;
 0056 80EF              ldi R24,240
 0058 88BB              out 0x18,R24
 005A                   .dbline 92
 005A           ;     DDRB=0x0F;
 005A 8FE0              ldi R24,15
 005C 87BB              out 0x17,R24
 005E                   .dbline 93
 005E           ;   NOP();
 005E 0000              nop
 0060                   .dbline 94
 0060           ;   if(PINB!=0xF0)
 0060 86B3              in R24,0x16
 0062 803F              cpi R24,240
 0064 09F4              brne X3
 0066 66C0              xjmp L8
 0068           X3:
 0068                   .dbline 95
 0068           ;   {
 0068                   .dbline 96
 0068           ;   delay_ms(10);
 0068 0AE0              ldi R16,10
 006A 10E0              ldi R17,0
 006C 0E940000          xcall _delay_ms
 0070                   .dbline 97
 0070           ;   if(PINB!=0xF0)
 0070 86B3              in R24,0x16
 0072 803F              cpi R24,240
 0074 09F4              brne X4
 0076 5EC0              xjmp L10
 0078           X4:
 0078                   .dbline 98
 0078           ;   {
 0078                   .dbline 100
 0078           ;   //key=0;
 0078           ;    switch(PINB)
 0078 46B3              in R20,0x16
 007A 5527              clr R21
 007C 403B              cpi R20,176
 007E E0E0              ldi R30,0
 0080 5E07              cpc R21,R30
 0082 D9F0              breq L16
 0084 80EB              ldi R24,176
 0086 90E0              ldi R25,0
 0088 8417              cp R24,R20
 008A 9507              cpc R25,R21
 008C 2CF0              brlt L20
 008E           L19:
 008E 4037              cpi R20,112
 0090 E0E0              ldi R30,0
 0092 5E07              cpc R21,R30
 0094 71F0              breq L15
 0096 1CC0              xjmp L13
 0098           L20:
 0098 403D              cpi R20,208
 009A E0E0              ldi R30,0
 009C 5E07              cpc R21,R30
 009E 89F0              breq L17
 00A0 403D              cpi R20,208
 00A2 E0E0              ldi R30,0
 00A4 5E07              cpc R21,R30
 00A6 A4F0              brlt L13
 00A8           L21:
 00A8 403E              cpi R20,224
 00AA E0E0              ldi R30,0
 00AC 5E07              cpc R21,R30
 00AE 69F0              breq L18
 00B0 0FC0              xjmp L13
 00B2           X1:
 00B2                   .dbline 101
 00B2           ;    {
 00B2           L15:
 00B2                   .dbline 102
 00B2           ;     case 0x70:key=0;break;
 00B2 2224              clr R2
 00B4 20920000          sts _key,R2
 00B8                   .dbline 102
 00B8 0BC0              xjmp L13
 00BA           L16:
 00BA                   .dbline 103
 00BA           ;     case 0xb0:key=1;break;
 00BA 81E0              ldi R24,1
 00BC 80930000          sts _key,R24
 00C0                   .dbline 103
 00C0 07C0              xjmp L13
 00C2           L17:
 00C2                   .dbline 104
 00C2           ;     case 0xd0:key=2;break;
 00C2 82E0              ldi R24,2
 00C4 80930000          sts _key,R24
 00C8                   .dbline 104
 00C8 03C0              xjmp L13
 00CA           L18:
 00CA                   .dbline 105
 00CA           ;     case 0xe0:key=3;break;
 00CA 83E0              ldi R24,3
 00CC 80930000          sts _key,R24
 00D0                   .dbline 105
 00D0                   .dbline 106
 00D0           ;       default: break;
 00D0           L13:
 00D0                   .dbline 108
 00D0           ;    }
 00D0           ;   PORTB=0x0F;
 00D0 8FE0              ldi R24,15
 00D2 88BB              out 0x18,R24
 00D4                   .dbline 109
 00D4           ;   DDRB=0xF0;
 00D4 80EF              ldi R24,240
 00D6 87BB              out 0x17,R24
 00D8                   .dbline 110
 00D8           ;   NOP();
 00D8 0000              nop
 00DA                   .dbline 111
 00DA           ;   switch(PINB&0X0F)
 00DA 46B3              in R20,0x16
 00DC 5527              clr R21
 00DE 4F70              andi R20,15
 00E0 5070              andi R21,0
 00E2 4730              cpi R20,7
 00E4 E0E0              ldi R30,0
 00E6 5E07              cpc R21,R30
 00E8 69F0              breq L25
 00EA 4B30              cpi R20,11
 00EC E0E0              ldi R30,0
 00EE 5E07              cpc R21,R30
 00F0 71F0              breq L26
 00F2 4D30              cpi R20,13
 00F4 E0E0              ldi R30,0
 00F6 5E07              cpc R21,R30
 00F8 81F0              breq L27
 00FA 4E30              cpi R20,14
 00FC E0E0              ldi R30,0
 00FE 5E07              cpc R21,R30
 0100 91F0              breq L28
 0102 16C0              xjmp L23
 0104           X2:
 0104                   .dbline 112
 0104           ;     {
 0104           L25:
 0104                   .dbline 113
 0104           ;       case 0x07:key=key+0;break;
 0104 20900000          lds R2,_key
 0108 20920000          sts _key,R2
 010C                   .dbline 113
 010C 11C0              xjmp L23
 010E           L26:
 010E                   .dbline 114
 010E           ;       case 0x0b:key=key+4;break;
 010E 80910000          lds R24,_key
 0112 8C5F              subi R24,252    ; addi 4
 0114 80930000          sts _key,R24
 0118                   .dbline 114
 0118 0BC0              xjmp L23
 011A           L27:
 011A                   .dbline 115
 011A           ;       case 0x0d:key=key+8;break;
 011A 80910000          lds R24,_key
 011E 885F              subi R24,248    ; addi 8
 0120 80930000          sts _key,R24
 0124                   .dbline 115
 0124 05C0              xjmp L23
 0126           L28:
 0126                   .dbline 116
 0126           ;       case 0x0e:key=key+12;break;
 0126 80910000          lds R24,_key
 012A 845F              subi R24,244    ; addi 12
 012C 80930000          sts _key,R24
 0130                   .dbline 116
 0130                   .dbline 117
 0130           ;       default: break;
 0130           L23:
 0130                   .dbline 119
 0130           ;       }
 0130           ;   NOP();
 0130 0000              nop
 0132                   .dbline 120
 0132           ;   NOP();
 0132 0000              nop
 0134                   .dbline 121
 0134           ;   }
 0134           L10:
 0134                   .dbline 122
 0134           L8:
 0134                   .dbline -2
 0134           L7:
 0134 0E940000          xcall pop_gset1
 0138 0E940000          xcall pop_lset
 013C                   .dbline 0 ; func end
 013C 1895              reti
 013E                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
 0000           _key::
 0000                   .blkb 1
 0001                   .dbsym e key _key c

⌨️ 快捷键说明

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