Jag Tror att det är lss filen han syftar på...
Jag tog mig friheten att kompilera din code och jag kan inte se några knepigheter i assembler koden som gcc genererar...
Kod: Markera allt
key_test.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000148 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .stab 00000378 00000000 00000000 0000019c 2**2
CONTENTS, READONLY, DEBUGGING
2 .stabstr 00000071 00000000 00000000 00000514 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_aranges 00000020 00000000 00000000 00000585 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 00000024 00000000 00000000 000005a5 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 000000b3 00000000 00000000 000005c9 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 00000074 00000000 00000000 0000067c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 000001bf 00000000 00000000 000006f0 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000030 00000000 00000000 000008b0 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 00000099 00000000 00000000 000008e0 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 000000a2 00000000 00000000 00000979 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 38 00 jmp 0x70 ; 0x70 <__ctors_end>
4: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
8: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
10: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
14: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
18: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
1c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
20: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
24: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
28: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
2c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
30: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
34: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
38: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
3c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
40: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
44: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
48: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
4c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
50: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
54: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
58: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
5c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
60: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
64: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
68: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
6c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
00000070 <__ctors_end>:
70: 11 24 eor r1, r1
72: 1f be out 0x3f, r1 ; 63
74: cf ef ldi r28, 0xFF ; 255
76: d4 e0 ldi r29, 0x04 ; 4
78: de bf out 0x3e, r29 ; 62
7a: cd bf out 0x3d, r28 ; 61
0000007c <__do_copy_data>:
7c: 11 e0 ldi r17, 0x01 ; 1
7e: a0 e0 ldi r26, 0x00 ; 0
80: b1 e0 ldi r27, 0x01 ; 1
82: e8 e4 ldi r30, 0x48 ; 72
84: f1 e0 ldi r31, 0x01 ; 1
86: 02 c0 rjmp .+4 ; 0x8c <.do_copy_data_start>
00000088 <.do_copy_data_loop>:
88: 05 90 lpm r0, Z+
8a: 0d 92 st X+, r0
0000008c <.do_copy_data_start>:
8c: a0 30 cpi r26, 0x00 ; 0
8e: b1 07 cpc r27, r17
90: d9 f7 brne .-10 ; 0x88 <.do_copy_data_loop>
00000092 <__do_clear_bss>:
92: 11 e0 ldi r17, 0x01 ; 1
94: a0 e0 ldi r26, 0x00 ; 0
96: b1 e0 ldi r27, 0x01 ; 1
98: 01 c0 rjmp .+2 ; 0x9c <.do_clear_bss_start>
0000009a <.do_clear_bss_loop>:
9a: 1d 92 st X+, r1
0000009c <.do_clear_bss_start>:
9c: a0 30 cpi r26, 0x00 ; 0
9e: b1 07 cpc r27, r17
a0: e1 f7 brne .-8 ; 0x9a <.do_clear_bss_loop>
a2: 0e 94 9d 00 call 0x13a ; 0x13a <main>
a6: 0c 94 a3 00 jmp 0x146 ; 0x146 <_exit>
000000aa <__bad_interrupt>:
aa: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000ae <Test>:
}
char Test()
{
ae: 9f e0 ldi r25, 0x0F ; 15
b0: 97 bb out 0x17, r25 ; 23
char KeyBoardValue,CharValue;
/*Läser av fyra ben*/
DDRB=0x0f;
PORTB=0xf0;
b2: 80 ef ldi r24, 0xF0 ; 240
b4: 88 bb out 0x18, r24 ; 24
KeyBoardValue=PINB;
b6: 26 b3 in r18, 0x16 ; 22
/*-----------------*/
//_delay_ms (80);
/*Läser av de andra fyra benen och lägger ihop värdet med hjälp av maskning*/
DDRB=0xf0;
b8: 87 bb out 0x17, r24 ; 23
PORTB=0x0f;
ba: 98 bb out 0x18, r25 ; 24
KeyBoardValue=(KeyBoardValue&0xf0)|(PINB&0x0f); //Maskar ut värdet
bc: 86 b3 in r24, 0x16 ; 22
be: 20 7f andi r18, 0xF0 ; 240
c0: 8f 70 andi r24, 0x0F ; 15
c2: 28 2b or r18, r24
/*-------------------------------------------------------------------------*/
if (KeyBoardValue==one) {CharValue='1';}
c4: 28 38 cpi r18, 0x88 ; 136
c6: b1 f1 breq .+108 ; 0x134 <Test+0x86>
else if (KeyBoardValue==two) {CharValue='2';}
c8: 28 34 cpi r18, 0x48 ; 72
ca: 11 f4 brne .+4 ; 0xd0 <Test+0x22>
cc: 82 e3 ldi r24, 0x32 ; 50
ce: 33 c0 rjmp .+102 ; 0x136 <Test+0x88>
else if (KeyBoardValue==three) {CharValue='3';}
d0: 28 32 cpi r18, 0x28 ; 40
d2: 11 f4 brne .+4 ; 0xd8 <Test+0x2a>
d4: 83 e3 ldi r24, 0x33 ; 51
d6: 2f c0 rjmp .+94 ; 0x136 <Test+0x88>
else if (KeyBoardValue==four) {CharValue='4';}
d8: 24 38 cpi r18, 0x84 ; 132
da: 11 f4 brne .+4 ; 0xe0 <Test+0x32>
dc: 84 e3 ldi r24, 0x34 ; 52
de: 2b c0 rjmp .+86 ; 0x136 <Test+0x88>
else if (KeyBoardValue==five) {CharValue='5';}
e0: 24 34 cpi r18, 0x44 ; 68
e2: 11 f4 brne .+4 ; 0xe8 <Test+0x3a>
e4: 85 e3 ldi r24, 0x35 ; 53
e6: 27 c0 rjmp .+78 ; 0x136 <Test+0x88>
else if (KeyBoardValue==six) {CharValue='6';}
e8: 24 32 cpi r18, 0x24 ; 36
ea: 11 f4 brne .+4 ; 0xf0 <Test+0x42>
ec: 86 e3 ldi r24, 0x36 ; 54
ee: 23 c0 rjmp .+70 ; 0x136 <Test+0x88>
else if (KeyBoardValue==seven) {CharValue='7';}
f0: 22 38 cpi r18, 0x82 ; 130
f2: 11 f4 brne .+4 ; 0xf8 <Test+0x4a>
f4: 87 e3 ldi r24, 0x37 ; 55
f6: 1f c0 rjmp .+62 ; 0x136 <Test+0x88>
else if (KeyBoardValue==eight) {CharValue='8';}
f8: 22 34 cpi r18, 0x42 ; 66
fa: 11 f4 brne .+4 ; 0x100 <Test+0x52>
fc: 88 e3 ldi r24, 0x38 ; 56
fe: 1b c0 rjmp .+54 ; 0x136 <Test+0x88>
else if (KeyBoardValue==nine) {CharValue='9';}
100: 22 32 cpi r18, 0x22 ; 34
102: 11 f4 brne .+4 ; 0x108 <Test+0x5a>
104: 89 e3 ldi r24, 0x39 ; 57
106: 17 c0 rjmp .+46 ; 0x136 <Test+0x88>
else if (KeyBoardValue==letterA){CharValue='A';}
108: 28 31 cpi r18, 0x18 ; 24
10a: 11 f4 brne .+4 ; 0x110 <Test+0x62>
10c: 81 e4 ldi r24, 0x41 ; 65
10e: 13 c0 rjmp .+38 ; 0x136 <Test+0x88>
else if (KeyBoardValue==letterB){CharValue='B';}
110: 2c 30 cpi r18, 0x0C ; 12
112: 11 f4 brne .+4 ; 0x118 <Test+0x6a>
114: 82 e4 ldi r24, 0x42 ; 66
116: 0f c0 rjmp .+30 ; 0x136 <Test+0x88>
else if (KeyBoardValue==letterC){CharValue='C';}
118: 22 31 cpi r18, 0x12 ; 18
11a: 11 f4 brne .+4 ; 0x120 <Test+0x72>
11c: 83 e4 ldi r24, 0x43 ; 67
11e: 0b c0 rjmp .+22 ; 0x136 <Test+0x88>
else if (KeyBoardValue==letterD){CharValue='D';}
120: 21 31 cpi r18, 0x11 ; 17
122: 11 f4 brne .+4 ; 0x128 <Test+0x7a>
124: 84 e4 ldi r24, 0x44 ; 68
126: 07 c0 rjmp .+14 ; 0x136 <Test+0x88>
else if (KeyBoardValue==star) {CharValue=0x31;}
128: 21 38 cpi r18, 0x81 ; 129
12a: 21 f0 breq .+8 ; 0x134 <Test+0x86>
else if (KeyBoardValue==square) {CharValue=0x31;}
12c: 21 32 cpi r18, 0x21 ; 33
12e: 11 f0 breq .+4 ; 0x134 <Test+0x86>
130: 85 e4 ldi r24, 0x45 ; 69
132: 01 c0 rjmp .+2 ; 0x136 <Test+0x88>
134: 81 e3 ldi r24, 0x31 ; 49
else {CharValue='E';}
return CharValue;
}
136: 99 27 eor r25, r25
138: 08 95 ret
0000013a <main>:
13a: 8f ef ldi r24, 0xFF ; 255
13c: 84 bb out 0x14, r24 ; 20
13e: 0e 94 57 00 call 0xae ; 0xae <Test>
142: 85 bb out 0x15, r24 ; 21
144: fc cf rjmp .-8 ; 0x13e <main+0x4>
00000146 <_exit>:
146: ff cf rjmp .-2 ; 0x146 <_exit>
Om du har pull-up och du läser av en rad som är nedtryckt borde det inte bli typ 0b1110 0000, 0b1101 0000, 0b1011 0000 och 0b0111 0000.
Och samma med kolumnen, fast de fyra bitarna har bytt plats...
Jag kan tyvärr inte komma på något mer för tillfället......