📄 ps2_lcm1602.lss
字号:
ps2_lcm1602.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000011a2 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000126 00800060 000011a2 00001236 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000052 00800186 00800186 0000135c 2**0
ALLOC
3 .noinit 00000000 008001d8 008001d8 0000135c 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000135c 2**0
CONTENTS
5 .stab 00001eb4 00000000 00000000 0000135c 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000c5f 00000000 00000000 00003210 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 <__ctors_end>
4: 0c 94 9f 00 jmp 0x13e <__vector_1>
8: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
34: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
38: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 11 e0 ldi r17, 0x01 ; 1
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: e2 ea ldi r30, 0xA2 ; 162
68: f1 e1 ldi r31, 0x11 ; 17
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: a6 38 cpi r26, 0x86 ; 134
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 11 e0 ldi r17, 0x01 ; 1
78: a6 e8 ldi r26, 0x86 ; 134
7a: b1 e0 ldi r27, 0x01 ; 1
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a8 3d cpi r26, 0xD8 ; 216
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 47 00 jmp 0x8e <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <main>:
#include "kb.h"
#include "type.h"
int main(void)
{
8e: ca e5 ldi r28, 0x5A ; 90
90: d4 e0 ldi r29, 0x04 ; 4
92: de bf out 0x3e, r29 ; 62
94: cd bf out 0x3d, r28 ; 61
char *str1,*str2;
str1="TQT input words!";
96: 80 e6 ldi r24, 0x60 ; 96
98: 90 e0 ldi r25, 0x00 ; 0
9a: 9a 83 std Y+2, r25 ; 0x02
9c: 89 83 std Y+1, r24 ; 0x01
str2="ken:";
9e: 81 e7 ldi r24, 0x71 ; 113
a0: 90 e0 ldi r25, 0x00 ; 0
a2: 9c 83 std Y+4, r25 ; 0x04
a4: 8b 83 std Y+3, r24 ; 0x03
GICR= (1<<INT0); // 使能外部中断INT0,GICR通用中断控制寄存器,0x40
a6: 80 e4 ldi r24, 0x40 ; 64
a8: 80 93 5b 00 sts 0x005B, r24
InitKeyBoard(); // 键盘初始化
ac: 0e 94 81 00 call 0x102 <InitKeyBoard>
LCM1602Init(); // lcm1602初始化
b0: 0e 94 a4 02 call 0x548 <LCM1602Init>
LCM1602Write_String(0,0,str1);
b4: 49 81 ldd r20, Y+1 ; 0x01
b6: 5a 81 ldd r21, Y+2 ; 0x02
b8: 60 e0 ldi r22, 0x00 ; 0
ba: 80 e0 ldi r24, 0x00 ; 0
bc: 0e 94 d0 04 call 0x9a0 <LCM1602Write_String>
LCM1602Write_String(0,1,str2);
c0: 4b 81 ldd r20, Y+3 ; 0x03
c2: 5c 81 ldd r21, Y+4 ; 0x04
c4: 61 e0 ldi r22, 0x01 ; 1
c6: 80 e0 ldi r24, 0x00 ; 0
c8: 0e 94 d0 04 call 0x9a0 <LCM1602Write_String>
while(1)
{
uchar key = getchar_kb();
cc: 0e 94 33 02 call 0x466 <getchar_kb>
d0: 8d 83 std Y+5, r24 ; 0x05
if(key=='*')
d2: 8d 81 ldd r24, Y+5 ; 0x05
d4: 8a 32 cpi r24, 0x2A ; 42
d6: 89 f4 brne .+34 ; 0xfa <main+0x6c>
{
LCM1602WriteCommand(0x01,1); //如果键盘输入*,清屏
d8: 61 e0 ldi r22, 0x01 ; 1
da: 81 e0 ldi r24, 0x01 ; 1
dc: 0e 94 4b 04 call 0x896 <LCM1602WriteCommand>
LCM1602Write_String(0,0,str1);
e0: 49 81 ldd r20, Y+1 ; 0x01
e2: 5a 81 ldd r21, Y+2 ; 0x02
e4: 60 e0 ldi r22, 0x00 ; 0
e6: 80 e0 ldi r24, 0x00 ; 0
e8: 0e 94 d0 04 call 0x9a0 <LCM1602Write_String>
LCM1602Write_String(0,1,str2);
ec: 4b 81 ldd r20, Y+3 ; 0x03
ee: 5c 81 ldd r21, Y+4 ; 0x04
f0: 61 e0 ldi r22, 0x01 ; 1
f2: 80 e0 ldi r24, 0x00 ; 0
f4: 0e 94 d0 04 call 0x9a0 <LCM1602Write_String>
f8: e9 cf rjmp .-46 ; 0xcc <main+0x3e>
}
else LCM1602WriteData(key);
fa: 8d 81 ldd r24, Y+5 ; 0x05
fc: 0e 94 7d 04 call 0x8fa <LCM1602WriteData>
100: e5 cf rjmp .-54 ; 0xcc <main+0x3e>
00000102 <InitKeyBoard>:
作者 :ken
日期 :2007-8-18
------------------------------------------------------------*/
void InitKeyBoard(void)
{
102: cf 93 push r28
104: df 93 push r29
106: cd b7 in r28, 0x3d ; 61
108: de b7 in r29, 0x3e ; 62
inpt = kb_buffer; // 初始化键盘缓冲区
10a: 87 e9 ldi r24, 0x97 ; 151
10c: 91 e0 ldi r25, 0x01 ; 1
10e: 90 93 92 01 sts 0x0192, r25
112: 80 93 91 01 sts 0x0191, r24
outpt = kb_buffer;
116: 87 e9 ldi r24, 0x97 ; 151
118: 91 e0 ldi r25, 0x01 ; 1
11a: 90 93 95 01 sts 0x0195, r25
11e: 80 93 94 01 sts 0x0194, r24
buffcnt = 0;
122: 10 92 d7 01 sts 0x01D7, r1
MCUCR = (1<<ISC01); // INT0下降沿有效
126: 82 e0 ldi r24, 0x02 ; 2
128: 80 93 55 00 sts 0x0055, r24
edge = 0; // 0 = 下降沿 1 = 上升沿
12c: 10 92 96 01 sts 0x0196, r1
bitcount = 11; // PS2传输一帧数据是11位,一个起始位,一个奇偶校验位,一个停止位。
130: 8b e0 ldi r24, 0x0B ; 11
132: 80 93 93 01 sts 0x0193, r24
sei(); // 开全局中断
136: 78 94 sei
138: df 91 pop r29
13a: cf 91 pop r28
13c: 08 95 ret
0000013e <__vector_1>:
}
/*-----------------------------------------------------------
INT0_interrupt:处理键盘中断服务程序
输入参数 :无
输出参数 :无
作者 :ken
日期 :2007-8-18
------------------------------------------------------------*/
SIGNAL(SIG_INTERRUPT0) //PSCLK与PD2即INT0连接,下降沿读取PSDAT的数据
{
13e: 1f 92 push r1
140: 0f 92 push r0
142: 0f b6 in r0, 0x3f ; 63
144: 0f 92 push r0
146: 11 24 eor r1, r1
148: 2f 93 push r18
14a: 3f 93 push r19
14c: 4f 93 push r20
14e: 5f 93 push r21
150: 6f 93 push r22
152: 7f 93 push r23
154: 8f 93 push r24
156: 9f 93 push r25
158: af 93 push r26
15a: bf 93 push r27
15c: ef 93 push r30
15e: ff 93 push r31
160: cf 93 push r28
162: df 93 push r29
164: cd b7 in r28, 0x3d ; 61
166: de b7 in r29, 0x3e ; 62
static unsigned char data; // data用来保存接收到的数据。
if(bitcount < 11 && bitcount > 2) // 3-10位是数据位. 忽略起始位,校验位,停止位
168: 80 91 93 01 lds r24, 0x0193
16c: 8b 30 cpi r24, 0x0B ; 11
16e: a8 f4 brcc .+42 ; 0x19a <__vector_1+0x5c>
170: 80 91 93 01 lds r24, 0x0193
174: 83 30 cpi r24, 0x03 ; 3
176: 88 f0 brcs .+34 ; 0x19a <__vector_1+0x5c>
{
data = (data >> 1); //因为PS2协议是低位在前的,所以要右移
178: 80 91 86 01 lds r24, 0x0186
17c: 86 95 lsr r24
17e: 80 93 86 01 sts 0x0186, r24
if(PIND & (1<<PSDAT))
182: 80 91 30 00 lds r24, 0x0030
186: 99 27 eor r25, r25
188: 80 74 andi r24, 0x40 ; 64
18a: 90 70 andi r25, 0x00 ; 0
18c: 00 97 sbiw r24, 0x00 ; 0
18e: 29 f0 breq .+10 ; 0x19a <__vector_1+0x5c>
data = data | 0x80;
190: 80 91 86 01 lds r24, 0x0186
194: 80 68 ori r24, 0x80 ; 128
196: 80 93 86 01 sts 0x0186, r24
}
if(--bitcount == 0) // 11位数据都接收完,进入解码程序
19a: 80 91 93 01 lds r24, 0x0193
19e: 81 50 subi r24, 0x01 ; 1
1a0: 80 93 93 01 sts 0x0193, r24
1a4: 88 23 and r24, r24
1a6: 39 f4 brne .+14 ; 0x1b6 <__vector_1+0x78>
{
decode(data);
1a8: 80 91 86 01 lds r24, 0x0186
1ac: 0e 94 ee 00 call 0x1dc <decode>
bitcount = 11;
1b0: 8b e0 ldi r24, 0x0B ; 11
1b2: 80 93 93 01 sts 0x0193, r24
1b6: df 91 pop r29
1b8: cf 91 pop r28
1ba: ff 91 pop r31
1bc: ef 91 pop r30
1be: bf 91 pop r27
1c0: af 91 pop r26
1c2: 9f 91 pop r25
1c4: 8f 91 pop r24
1c6: 7f 91 pop r23
1c8: 6f 91 pop r22
1ca: 5f 91 pop r21
1cc: 4f 91 pop r20
1ce: 3f 91 pop r19
1d0: 2f 91 pop r18
1d2: 0f 90 pop r0
1d4: 0f be out 0x3f, r0 ; 63
1d6: 0f 90 pop r0
1d8: 1f 90 pop r1
1da: 18 95 reti
000001dc <decode>:
}
}
/*-----------------------------------------------------------
decode :解码键码程序
输入参数 sc :8bit原始代码数据
输出参数 :无
作者 :ken
日期 :2007-8-18
------------------------------------------------------------*/
void decode(unsigned char sc)
{
1dc: cf 93 push r28
1de: df 93 push r29
1e0: cd b7 in r28, 0x3d ; 61
1e2: de b7 in r29, 0x3e ; 62
1e4: 26 97 sbiw r28, 0x06 ; 6
1e6: 0f b6 in r0, 0x3f ; 63
1e8: f8 94 cli
1ea: de bf out 0x3e, r29 ; 62
1ec: 0f be out 0x3f, r0 ; 63
1ee: cd bf out 0x3d, r28 ; 61
1f0: 89 83 std Y+1, r24 ; 0x01
static unsigned char is_up=0, shift = 0, mode = 0;
unsigned char i;
if (!is_up) // Last data received was the up-key identifier
1f2: 80 91 87 01 lds r24, 0x0187
1f6: 88 23 and r24, r24
1f8: 09 f0 breq .+2 ; 0x1fc <decode+0x20>
1fa: c2 c0 rjmp .+388 ; 0x380 <decode+0x1a4>
{
switch (sc)
1fc: 89 81 ldd r24, Y+1 ; 0x01
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -