какой контроллер то?
ATtiny2313
Код: Выделить всё
12 0x000B PCINT Pin Change InterruptКод: Выделить всё
ISR(PCINT_vect)
{
led[0]=r;
}Код: Выделить всё
$ avr-objdump -S test
test: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2a c0 rjmp .+84 ; 0x58 <__bad_interrupt>
4: 29 c0 rjmp .+82 ; 0x58 <__bad_interrupt>
6: 28 c0 rjmp .+80 ; 0x58 <__bad_interrupt>
8: 27 c0 rjmp .+78 ; 0x58 <__bad_interrupt>
a: 26 c0 rjmp .+76 ; 0x58 <__bad_interrupt>
c: 25 c0 rjmp .+74 ; 0x58 <__bad_interrupt>
e: 24 c0 rjmp .+72 ; 0x58 <__bad_interrupt>
10: 23 c0 rjmp .+70 ; 0x58 <__bad_interrupt>
12: 22 c0 rjmp .+68 ; 0x58 <__bad_interrupt>
14: 21 c0 rjmp .+66 ; 0x58 <__bad_interrupt>
16: 20 c0 rjmp .+64 ; 0x58 <__bad_interrupt>
18: 1f c0 rjmp .+62 ; 0x58 <__bad_interrupt>
1a: 1e c0 rjmp .+60 ; 0x58 <__bad_interrupt>
1c: 1d c0 rjmp .+58 ; 0x58 <__bad_interrupt>
1e: 1c c0 rjmp .+56 ; 0x58 <__bad_interrupt>
20: 1b c0 rjmp .+54 ; 0x58 <__bad_interrupt>
22: 1a c0 rjmp .+52 ; 0x58 <__bad_interrupt>
24: 19 c0 rjmp .+50 ; 0x58 <__bad_interrupt>
Код: Выделить всё
$ avr-gcc -std=c99 -g -O -mmcu=attiny2313 -c test.c -o test.o
test.c: В функции ‘main’:
test.c:33: предупреждение: неявное приведение большого целого значения к беззнаковому типу
test.c: В функции ‘PCINT0_vect’:
test.c:13: предупреждение: ‘PCINT0_vect’ возможно некорректно называнный обработчик сигнала
Код: Выделить всё
$ avr-objdump -S test
test: file format elf32-avr
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2a c0 rjmp .+84 ; 0x58 <__bad_interrupt>
4: 29 c0 rjmp .+82 ; 0x58 <__bad_interrupt>
6: 28 c0 rjmp .+80 ; 0x58 <__bad_interrupt>
8: 27 c0 rjmp .+78 ; 0x58 <__bad_interrupt>
a: 26 c0 rjmp .+76 ; 0x58 <__bad_interrupt>
c: 25 c0 rjmp .+74 ; 0x58 <__bad_interrupt>
e: 24 c0 rjmp .+72 ; 0x58 <__bad_interrupt>
10: 23 c0 rjmp .+70 ; 0x58 <__bad_interrupt>
12: 22 c0 rjmp .+68 ; 0x58 <__bad_interrupt>
14: 21 c0 rjmp .+66 ; 0x58 <__bad_interrupt>
16: 21 c0 rjmp .+66 ; 0x5a <__vector_11>
18: 1f c0 rjmp .+62 ; 0x58 <__bad_interrupt>
1a: 1e c0 rjmp .+60 ; 0x58 <__bad_interrupt>
1c: 1d c0 rjmp .+58 ; 0x58 <__bad_interrupt>
1e: 1c c0 rjmp .+56 ; 0x58 <__bad_interrupt>
20: 1b c0 rjmp .+54 ; 0x58 <__bad_interrupt>
22: 1a c0 rjmp .+52 ; 0x58 <__bad_interrupt>
24: 19 c0 rjmp .+50 ; 0x58 <__bad_interrupt>
Код: Выделить всё
16: 21 c0 rjmp .+66 ; 0x5a <__vector_11>
Vergilium писал(а):Я так понимаю чтобы привязатся к конкретной клавише на входе нужно проверять в самой функции прерывания какая клавиша нажата.
Vergilium писал(а):Мне нужно в соответствии нажатой клавише выполнить определенное действие. Может у кого есть примерчик какой либо.
Код: Выделить всё
static uint8_t pred;
ISR(PCINT_vect)
{
uint8_t change = (PINB & 0x1F) ^ pred;
if(change & _BV(PB0))
led[0]=r;
else if(change & _BV(PB1))
led[0]=b;
pred = PINB & 0x1F;
}