📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 9
; //ICC-AVR application builder : 2007-5-16 5:50:45
; // Target : M16
; // Crystal: 4.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
; extern void delay_ms (int time);
; void port_init(void)
; {
.dbline 10
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 11
; DDRA = 0xFF;
ldi R24,255
out 0x1a,R24
.dbline 12
; PORTB = 0xF0;
ldi R24,240
out 0x18,R24
.dbline 13
; DDRB = 0x0F;
ldi R24,15
out 0x17,R24
.dbline 14
; PORTC = 0x80; //m103 output only
ldi R24,128
out 0x15,R24
.dbline 15
; DDRC = 0x80;
out 0x14,R24
.dbline 16
; PORTD = 0x04;
ldi R24,4
out 0x12,R24
.dbline 17
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 22
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 24
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 25
; port_init();
xcall _port_init
.dbline 27
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 28
; GICR = 0x40;
ldi R24,64
out 0x3b,R24
.dbline 29
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 30
; SEI(); //re-enable interrupts
sei
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
_table::
.byte 126,48
.byte 'm,'y
.byte 51,91
.byte 95,'p
.byte 127,123
.byte 'w,31
.byte 'N,61
.byte 'O,'G
.dbsym e table _table A[16:16]kc
.area data(ram, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
_position::
.blkb 2
.area idata
.byte 128,128
.area data(ram, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
.blkb 2
.area idata
.byte 128,128
.area data(ram, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
.dbsym e position _position A[4:4]c
.area text(rom, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 39
; //all peripherals are now initialized
; }
;
;
; const unsigned char table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
; unsigned char position[]={0x80,0x80,0x80,0x80};
; unsigned char key;
; void main(void)
; {
.dbline 41
;
; init_devices();
xcall _init_devices
xjmp L5
L4:
.dbline 43
.dbline 44
ldi R24,<_table
ldi R25,>_table
lds R30,_key
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 45
L5:
.dbline 42
xjmp L4
X0:
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 4
jmp _scan_key
.area text(rom, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
.dbfunc e scan_key _scan_key fV
.even
_scan_key::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 88
; while(1)
; {
; PORTA=table[key];
; }
; }
; /*
; void main(void)
; {
; init_devices();
; for(;;)
; {
; unsigned char i;
; for(i=0;i<4;i++)
; {PORTC|=position[i];
; PORTA=table[key];
; delay_ms(2);
; }
; }
; }
; #pragma interrupt_handler scan_key:2
; void scan_key(void)
; { CLI();
; switch(PINB)
; {
; case 0x70:key=0;break;
; case 0xb0:key=1;break;
; case 0xd0:key=2;break;
; case 0xe0:key=3;break;
; }
; PORTB=0x0F;
; DDRB=0xF0;
; delay_ms(1);
; switch(PINB&0X0F)
; {
; case 0x07:key=key+0;break;
; case 0x0b:key=key+4;break;
; case 0x0d:key=key+8;break;
; case 0x0e:key=key+12;break;
; }
; PORTB=0xF0;
; DDRB=0x0F;
; SEI();
; }
; */
; #pragma interrupt_handler scan_key:2
; void scan_key(void)
; {
.dbline 89
; NOP();
nop
.dbline 90
; NOP();
nop
.dbline 91
; PORTB=0xF0;
ldi R24,240
out 0x18,R24
.dbline 92
; DDRB=0x0F;
ldi R24,15
out 0x17,R24
.dbline 93
; NOP();
nop
.dbline 94
; if(PINB!=0xF0)
in R24,0x16
cpi R24,240
brne X3
xjmp L8
X3:
.dbline 95
; {
.dbline 96
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 97
; if(PINB!=0xF0)
in R24,0x16
cpi R24,240
brne X4
xjmp L10
X4:
.dbline 98
; {
.dbline 100
; //key=0;
; switch(PINB)
in R20,0x16
clr R21
cpi R20,176
ldi R30,0
cpc R21,R30
breq L16
ldi R24,176
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L20
L19:
cpi R20,112
ldi R30,0
cpc R21,R30
breq L15
xjmp L13
L20:
cpi R20,208
ldi R30,0
cpc R21,R30
breq L17
cpi R20,208
ldi R30,0
cpc R21,R30
brlt L13
L21:
cpi R20,224
ldi R30,0
cpc R21,R30
breq L18
xjmp L13
X1:
.dbline 101
; {
L15:
.dbline 102
; case 0x70:key=0;break;
clr R2
sts _key,R2
.dbline 102
xjmp L13
L16:
.dbline 103
; case 0xb0:key=1;break;
ldi R24,1
sts _key,R24
.dbline 103
xjmp L13
L17:
.dbline 104
; case 0xd0:key=2;break;
ldi R24,2
sts _key,R24
.dbline 104
xjmp L13
L18:
.dbline 105
; case 0xe0:key=3;break;
ldi R24,3
sts _key,R24
.dbline 105
.dbline 106
; default: break;
L13:
.dbline 108
; }
; PORTB=0x0F;
ldi R24,15
out 0x18,R24
.dbline 109
; DDRB=0xF0;
ldi R24,240
out 0x17,R24
.dbline 110
; NOP();
nop
.dbline 111
; switch(PINB&0X0F)
in R20,0x16
clr R21
andi R20,15
andi R21,0
cpi R20,7
ldi R30,0
cpc R21,R30
breq L25
cpi R20,11
ldi R30,0
cpc R21,R30
breq L26
cpi R20,13
ldi R30,0
cpc R21,R30
breq L27
cpi R20,14
ldi R30,0
cpc R21,R30
breq L28
xjmp L23
X2:
.dbline 112
; {
L25:
.dbline 113
; case 0x07:key=key+0;break;
lds R2,_key
sts _key,R2
.dbline 113
xjmp L23
L26:
.dbline 114
; case 0x0b:key=key+4;break;
lds R24,_key
subi R24,252 ; addi 4
sts _key,R24
.dbline 114
xjmp L23
L27:
.dbline 115
; case 0x0d:key=key+8;break;
lds R24,_key
subi R24,248 ; addi 8
sts _key,R24
.dbline 115
xjmp L23
L28:
.dbline 116
; case 0x0e:key=key+12;break;
lds R24,_key
subi R24,244 ; addi 12
sts _key,R24
.dbline 116
.dbline 117
; default: break;
L23:
.dbline 119
; }
; NOP();
nop
.dbline 120
; NOP();
nop
.dbline 121
; }
L10:
.dbline 122
L8:
.dbline -2
L7:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area bss(ram, con, rel)
.dbfile D:\桌面\interrupt_wake_keyboard_4-4\main.c
_key::
.blkb 1
.dbsym e key _key c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -