[ 課題3 ] アップダウンカウンタを作る。
カウントアップ する条件: INT1 の立下りエッジ
カウントダウン する条件: INT0 の立下りエッジ
ともにチャタリングを考慮する。
カウントアップ時は、”99” の次は ”00”
カウントダウン時は、”00” の次は ”99”
今日は簡単なので、次の課題もやりましょう!
[ 課題4 」 ぐるぐる回る7セグメント表示の回転方向をINT0で変える。
右側1桁7セグメントLEDを回転する八の字(a→f→g→c→d→e→g→b→a→f→g→c→…)表示させる。
1セグメントの表示時間は約0.5秒とする。
INT0の立下りエッジでの割り込みにより7セグメント回転方向を逆転させる。
チャタリングを考慮すること。
[ ヒント ] データ-の持ち方
例題でも使っている7セグメントLEDの表示用データや、ステッピングモーターの励磁パターン等の制
御用データなど各種のデータをどのように用意して利用するかには決して決まったやり方があるわけではないが、いくつかの手法を知っているとプログラムの見
通しが良くなったり、データの変更が容易になったりと便利なので紹介しておこう。
ここでは、テーブルを用意して利用する方法
(1) 汎用レジスタの r0 ~ r15 やSRAM を利用する方法
プログラムの初め(reset処理など) で汎用レジスタの初めの16個にデータを書き込み
X,Y,Zをインデックスレジスタとして間接アドレッシングモードでデータを取り出す。
例 int1.asm ,int1sram.asm
(2) プログラムメモリ(フラッシュメモリー)にデータの格納場所を用意し、プログラム中の定数として
予め書き込んでおく方法
.db 等 でデータを書き込んでおき、Zレジスタを利用する ”LPM” 命令で読み出す。
この時、データは汎用レジスタ "r0" に格納される。
例 disp8w.asm , disp8m.asm