📄 key.lis
字号:
.module key.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; i -> R20
0000 ; n -> R16
.even
0000 _delay_us::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 17
0004 ; //带中断的4×4键盘
0004 ; //IDD-AVR application builCer : 2007-6-2 15:38:00
0004 ; // Target : M16
0004 ; // Crystal: 1.0000Mhz
0004 ;
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #include "config.h"
0004 ; #include "nrf905.h"
0004 ;
0004 ; typedef unsigned char uint8; //可移植的8位无符号变量
0004 ; typedef unsigned int uint16; //可移植的16位无符号变量
0004 ;
0004 ;
0004 ;
0004 ; void delay_us(uint8 n)
0004 ; {
0004 .dbline 19
0004 ; uint8 i;
0004 ; for(i=n;i>0;i--)
0004 402F mov R20,R16
0006 01C0 xjmp L5
0008 L2:
0008 .dbline 20
0008 L3:
0008 .dbline 19
0008 4A95 dec R20
000A L5:
000A .dbline 19
000A 2224 clr R2
000C 2416 cp R2,R20
000E E0F3 brlo L2
0010 .dbline -2
0010 L1:
0010 0E940000 xcall pop_gset1
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbsym r i 20 c
0016 .dbsym r n 16 c
0016 .dbend
.area vector(rom, abs)
.org 4
0004 0C940B00 jmp _int0_isr
.area text(rom, con, rel)
0016 .dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
0016 .dbfunc e int0_isr _int0_isr fV
0016 ; i -> <dead>
0016 ; key_buf -> R20
.even
0016 _int0_isr::
0016 0E940000 xcall push_lset
001A 0E940000 xcall push_gset1
001E .dbline -1
001E .dbline 26
001E ; ;
001E ; }
001E ;
001E ; #pragma interrupt_handler int0_isr:iv_INT0
001E ;
001E ; void int0_isr(void)
001E ; {
001E .dbline 28
001E ; uint8 key_buf,i;
001E ; GICR=0x00; //关闭中断使能
001E 2224 clr R2
0020 2BBE out 0x3b,R2
0022 .dbline 30
0022 ; //GIFR=0x40; //清除中断标识位
0022 ; DDRC=0xf0; //行列反转读取键盘的值
0022 80EF ldi R24,240
0024 84BB out 0x14,R24
0026 .dbline 31
0026 ; PORTC=0x0f;
0026 8FE0 ldi R24,15
0028 85BB out 0x15,R24
002A .dbline 32
002A ; if((~PINC)&0x01)
002A 23B2 in R2,0x13
002C 3324 clr R3
002E 2094 com R2
0030 3094 com R3
0032 20FE sbrs R2,0
0034 02C0 rjmp L7
0036 .dbline 33
0036 ; key_buf=0;
0036 4427 clr R20
0038 16C0 xjmp L8
003A L7:
003A .dbline 34
003A ; else if((~PINC)&0x02)
003A 23B2 in R2,0x13
003C 3324 clr R3
003E 2094 com R2
0040 3094 com R3
0042 21FE sbrs R2,1
0044 02C0 rjmp L9
0046 .dbline 35
0046 ; key_buf=1;
0046 41E0 ldi R20,1
0048 0EC0 xjmp L10
004A L9:
004A .dbline 36
004A ; else if((~PINC)&0x04)
004A 23B2 in R2,0x13
004C 3324 clr R3
004E 2094 com R2
0050 3094 com R3
0052 22FE sbrs R2,2
0054 02C0 rjmp L11
0056 .dbline 37
0056 ; key_buf=2;
0056 42E0 ldi R20,2
0058 06C0 xjmp L12
005A L11:
005A .dbline 38
005A ; else if((~PINC)&0x08)
005A 23B2 in R2,0x13
005C 3324 clr R3
005E 2094 com R2
0060 3094 com R3
0062 23FC sbrc R2,3
0064 .dbline 39
0064 ; key_buf=3;
0064 43E0 ldi R20,3
0066 L13:
0066 L12:
0066 L10:
0066 L8:
0066 .dbline 40
0066 ; DDRC=0x0f;
0066 8FE0 ldi R24,15
0068 84BB out 0x14,R24
006A .dbline 41
006A ; PORTC=0xf0;
006A 80EF ldi R24,240
006C 85BB out 0x15,R24
006E .dbline 42
006E ; delay_us(30);
006E 0EE1 ldi R16,30
0070 C7DF xcall _delay_us
0072 .dbline 43
0072 ; if((~PINC)&0x10)
0072 23B2 in R2,0x13
0074 3324 clr R3
0076 2094 com R2
0078 3094 com R3
007A 24FE sbrs R2,4
007C 01C0 rjmp L15
007E .dbline 44
007E ; key_buf+=0;
007E 19C0 xjmp L16
0080 L15:
0080 .dbline 45
0080 ; else if((~PINC)&0x20)
0080 23B2 in R2,0x13
0082 3324 clr R3
0084 2094 com R2
0086 3094 com R3
0088 25FE sbrs R2,5
008A 02C0 rjmp L17
008C .dbline 46
008C ; key_buf+=4;
008C 4C5F subi R20,252 ; addi 4
008E 11C0 xjmp L18
0090 L17:
0090 .dbline 47
0090 ; else if((~PINC)&0x40)
0090 23B2 in R2,0x13
0092 3324 clr R3
0094 2094 com R2
0096 3094 com R3
0098 26FE sbrs R2,6
009A 02C0 rjmp L19
009C .dbline 48
009C ; key_buf+=8;
009C 485F subi R20,248 ; addi 8
009E 09C0 xjmp L20
00A0 L19:
00A0 .dbline 49
00A0 ; else if((~PINC)&0x80)
00A0 23B2 in R2,0x13
00A2 3324 clr R3
00A4 2094 com R2
00A6 3094 com R3
00A8 27FE sbrs R2,7
00AA 02C0 rjmp L21
00AC .dbline 50
00AC ; key_buf+=12;
00AC 445F subi R20,244 ; addi 12
00AE 01C0 xjmp L22
00B0 L21:
00B0 .dbline 52
00B0 ; else
00B0 ; key_buf=16;
00B0 40E1 ldi R20,16
00B2 L22:
00B2 L20:
00B2 L18:
00B2 L16:
00B2 .dbline 53
00B2 ; if(key_buf!=16)
00B2 4031 cpi R20,16
00B4 49F0 breq L23
00B6 .dbline 54
00B6 ; {
00B6 .dbline 55
00B6 ; key=key_buf;
00B6 40930000 sts _key,R20
00BA .dbline 56
00BA ; RfSendProc();
00BA 0E940000 xcall _RfSendProc
00BE .dbline 57
00BE ; key_buf=16;
00BE 40E1 ldi R20,16
00C0 L25:
00C0 .dbline 59
00C0 L26:
00C0 .dbline 59
00C0 ;
00C0 ; while((~PINC)&0xf0) ;//检测按键是否释放,若没有释放就一直循环
00C0 83B3 in R24,0x13
00C2 8095 com R24
00C4 807F andi R24,240
00C6 E1F7 brne L25
00C8 .dbline 60
00C8 ; }
00C8 L23:
00C8 .dbline 62
00C8 ;
00C8 ; DDRC=0xf0;
00C8 80EF ldi R24,240
00CA 84BB out 0x14,R24
00CC .dbline 63
00CC ; PORTC=0x0f;
00CC 8FE0 ldi R24,15
00CE 85BB out 0x15,R24
00D0 .dbline 64
00D0 ; GICR=0x40; //中断复位
00D0 80E4 ldi R24,64
00D2 8BBF out 0x3b,R24
00D4 .dbline -2
00D4 L6:
00D4 0E940000 xcall pop_gset1
00D8 0E940000 xcall pop_lset
00DC .dbline 0 ; func end
00DC 1895 reti
00DE .dbsym l i 1 c
00DE .dbsym r key_buf 20 c
00DE .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\key.c
0000 _key:
0000 .blkb 1
0001 .dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905/config.h
0001 .dbsym s key _key c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -