p.341
今度はピン変化割り込みを試す。入力信号のロジックが変化するたびに割り込みがかかる。ピン変化割り込みは外部割り込み(INT0、INT1)と違ってすべてのGPIOで利用できる。
; スタックポインタの初期化マクロ .MACRO INITSTACK LDI R20, HIGH(RAMEND) OUT SPH, R20 LDI R20, LOW(RAMEND) OUT SPL, R20 .ENDMACRO ; 割り込みベクターテーブルを侵さないようにするため、マイコンのリセット後はただちに別の番地へ飛ぶことにする。 .ORG 0 JMP MAIN ; PCINT2割り込み(PORTDピン変化割り込み)がかかると制御が0x0A番地に飛んでくるので、そこからさらに別の番地へ飛んで何かを実行する。 .ORG PCI2addr ; 0x0A JMP PCINT2_ISR .ORG 0x100 MAIN: INITSTACK ; PB1のIOをOUTにして、 SBI DDRB, 1 ; PB1の出力を最初は0にして、 CBI PORTB, 1 ; PD4からピン変化割り込みをかけることにして、 LDI R20, 1 << 4 STS PCMSK2, R20 ; PCINT2割り込みを有効化して、 LDI R20, 1 << PCIE2 STS PCICR, R20 ; グローバル割り込みを有効化して、 SEI HERE: RJMP HERE .ORG 0x200 PCINT2_ISR: ; PCINT2割り込みがかかったらPB1の出力をトグルする。 IN R16, PORTB LDI R17, 1 << PB1 EOR R16, R17 OUT PORTB, R16 RETI