?? key.s
字號:
.module key.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
.dbfunc e delay_us _delay_us fV
; i -> R20
; n -> R16
.even
_delay_us::
xcall push_gset1
.dbline -1
.dbline 17
; //帶中斷的4×4鍵盤
; //IDD-AVR application builCer : 2007-6-2 15:38:00
; // Target : M16
; // Crystal: 1.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
; #include "config.h"
; #include "nrf905.h"
;
; typedef unsigned char uint8; //可移植的8位無符號變量
; typedef unsigned int uint16; //可移植的16位無符號變量
;
;
;
; void delay_us(uint8 n)
; {
.dbline 19
; uint8 i;
; for(i=n;i>0;i--)
mov R20,R16
xjmp L5
L2:
.dbline 20
L3:
.dbline 19
dec R20
L5:
.dbline 19
clr R2
cp R2,R20
brlo L2
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 16 c
.dbend
.area vector(rom, abs)
.org 4
jmp _int0_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
.dbfunc e int0_isr _int0_isr fV
; i -> <dead>
; key_buf -> R20
.even
_int0_isr::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 26
; ;
; }
;
; #pragma interrupt_handler int0_isr:iv_INT0
;
; void int0_isr(void)
; {
.dbline 28
; uint8 key_buf,i;
; GICR=0x00; //關閉中斷使能
clr R2
out 0x3b,R2
.dbline 30
; //GIFR=0x40; //清除中斷標識位
; DDRC=0xf0; //行列反轉讀取鍵盤的值
ldi R24,240
out 0x14,R24
.dbline 31
; PORTC=0x0f;
ldi R24,15
out 0x15,R24
.dbline 32
; if((~PINC)&0x01)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,0
rjmp L7
.dbline 33
; key_buf=0;
clr R20
xjmp L8
L7:
.dbline 34
; else if((~PINC)&0x02)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,1
rjmp L9
.dbline 35
; key_buf=1;
ldi R20,1
xjmp L10
L9:
.dbline 36
; else if((~PINC)&0x04)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,2
rjmp L11
.dbline 37
; key_buf=2;
ldi R20,2
xjmp L12
L11:
.dbline 38
; else if((~PINC)&0x08)
in R2,0x13
clr R3
com R2
com R3
sbrc R2,3
.dbline 39
; key_buf=3;
ldi R20,3
L13:
L12:
L10:
L8:
.dbline 40
; DDRC=0x0f;
ldi R24,15
out 0x14,R24
.dbline 41
; PORTC=0xf0;
ldi R24,240
out 0x15,R24
.dbline 42
; delay_us(30);
ldi R16,30
xcall _delay_us
.dbline 43
; if((~PINC)&0x10)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,4
rjmp L15
.dbline 44
; key_buf+=0;
xjmp L16
L15:
.dbline 45
; else if((~PINC)&0x20)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,5
rjmp L17
.dbline 46
; key_buf+=4;
subi R20,252 ; addi 4
xjmp L18
L17:
.dbline 47
; else if((~PINC)&0x40)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,6
rjmp L19
.dbline 48
; key_buf+=8;
subi R20,248 ; addi 8
xjmp L20
L19:
.dbline 49
; else if((~PINC)&0x80)
in R2,0x13
clr R3
com R2
com R3
sbrs R2,7
rjmp L21
.dbline 50
; key_buf+=12;
subi R20,244 ; addi 12
xjmp L22
L21:
.dbline 52
; else
; key_buf=16;
ldi R20,16
L22:
L20:
L18:
L16:
.dbline 53
; if(key_buf!=16)
cpi R20,16
breq L23
.dbline 54
; {
.dbline 55
; key=key_buf;
sts _key,R20
.dbline 56
; RfSendProc();
xcall _RfSendProc
.dbline 57
; key_buf=16;
ldi R20,16
L25:
.dbline 59
L26:
.dbline 59
;
; while((~PINC)&0xf0) ;//檢測按鍵是否釋放,若沒有釋放就一直循環
in R24,0x13
com R24
andi R24,240
brne L25
.dbline 60
; }
L23:
.dbline 62
;
; DDRC=0xf0;
ldi R24,240
out 0x14,R24
.dbline 63
; PORTC=0x0f;
ldi R24,15
out 0x15,R24
.dbline 64
; GICR=0x40; //中斷復位
ldi R24,64
out 0x3b,R24
.dbline -2
L6:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym l i 1 c
.dbsym r key_buf 20 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
_key:
.blkb 1
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905/config.h
.dbsym s key _key c
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -