○ リセットと割込み
mega88には26種類の割り込みが有る。これらの割り込みとリセットのベクタは、プログラムメモリの初めの19ワードの空間に存在する。(データ-シートP27参照)
優先順位はベクタ番号の順番(リセット、INT0、INT1…)
1. リセット発生要因 → データシートP33
2. 割り込みの許可
ステータスレジスタSREGの全割り込み許可ビット(I)
I=0 のとき、割り込み不許可 ( CLI 命令 )
I=1 のとき、割り込み許可 ( SEI 命令 )
2. 外部割込み → データシートP38~
端子
INT0(4pin PD2)
INT1(5pin PD3)
外部割り込みの許可・不許可
一般割り込みマスクレジスタ EIMSK のビット1(INT1)、ビット0(INT0)
ビット1(INT1)=1 で INT1 割り込み許可
ビット0(INT0)=1 で INT0 割り込み許可
ピン変化割り込み制御レジスタ PCICR、ビット0-2(PCIE0,PCIE1,PCIE2)
ビット0(PCIE0)=1 で PCINT0-7 ピン変化 割り込み許可
PCMSK0 の PCINT0-7の各ビット =1 で 対応するピンの変化割り込み許可
ビット1(PCIE1)=1 で PCINT8-14 ピン変化 割り込み許可
PCMSK1 の PCINT8-14の各ビット =1 で 対応するピンの変化割り込み許可
ビット2(PCIE2)=1 で PCINT16-23 ピン変化 割り込み許可
PCMSK2 の PCINT16-23の各ビット =1 で 対応するピンの変化割り込み許可
割り込み条件制御
外部割込み制御レジスタ EICRA のビット3,2(INT1)、ビット1,0(INT0)
INT1
ビット3(ISC11)、ビット2(ISC10) 割り込み発生条件
0 0 INT1がlowレベル
0 1 論理変化
1 0 立ち下りエッジ ↓
1 1 立ち上りエッジ ↑
INT0
ビット1(ISC01)、ビット0(ISC00) 割り込み発生条件
0 0 INT0がlowレベル
0 1 論理変化
1 0 立ち下りエッジ ↓
1 1 立ち上りエッジ ↑
[例題] 外部割込み(INT1)を使用し、7セグメント2桁のカウントアップカウンタを作る。
PD3(INT1)端子にタクトスイッチを接続し、割り込み信号とする。(端子は内部でプルアップする)
タクトスイッチが「ON]となる立下りエッジで割り込みを受け付ける。チャタリングを考慮する。
7セグメントLEDは2桁表示。表示の切り替えは、PD3,PD4に接続したPNPトランジスタ(2SA950)で制御する。
カウンターは”00”からスタートし、スイッチを押す毎に1つカウントアップする。
”99”の次は、”00”に戻る。
プログラムは int1.asm ,int1sram.asm
7セグ表示用データをテーブルとして汎用レジスタ あるいは SRAM上に用意し,X,Y および Z レジスタを
ポインタとして使い,表示データを取り出す。
AVRの命令セットの解説のP4のアドレッシングモードの「データ間接アドレス指定」を見よう。
[ ヒント ] データ-の持ち方
例題でも使っている7セグメントLEDの表示用データや、ステッピングモーターの励磁パターン等の制
御用データなど各種のデータをどのように用意して利用するかには決して決まったやり方があるわけではないが、いくつかの手法を知っているとプログラムの見
通しが良くなったり、データの変更が容易になったりと便利なので紹介しておこう。
ここでは、テーブルを用意して利用する方法
(1) 汎用レジスタの r0 ~ r15 を利用する方法
プログラムの初め(reset処理など) で汎用レジスタの初めの16個にデータを書き込み
X,Y,Zをインデックスレジスタとして間接アドレッシングモードでデータを取り出す。
例 int1.asm
(2) SRAMを利用する方法
プログラムの初め(reset処理など) でSRAMの初めの16個にデータを書き込み
X,Y,Zをインデックスレジスタとして間接アドレッシングモードでデータを取り出す。
例 int1sram.asm
回路図
[ 課題3 ]