📄 main.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 + -