regファイルについて
投稿者: 金太郎
|
2021/05/27(木) 17:06 No. 14712 引用 |
|
AVR初心者の金太郎と申します。
ATtiny84のPCINTを使用しようと思い、PCINT8を使用したところコンパイルエラーが出ました。reg84.DATを見たところ、PCINTは0と1しか定義されていない様に見えますが0と1以外は使用してはいけないのでしょうか? 因みにPCINT1をPCINT8に書き換えたらエラーは出なくなりましたが正しくコンパイルできたかは思うように動作しないので今の所は確認できていません。 PCINTxのサンプルプログラム例が有ると助かります。初めてPCINTを使う悩める初心者です。宜しくお願いします。
|
|
Re:regファイルについて |
引用 |
投稿者: O-Family ..2021/05/27(木) 18:41 No.14713 |
|
これは、よく間違いがある質問で、掲示板でも何度か回答しています。
AVRマニュアルのピン変化割り込みの所を読み込んでもらうと理解してもらえると思いますが、ピン変化割り込みは、1ポートごとに割り込みの許可をするのでは無く、割り込みを有効にするピンがグループごとに割り当てられていて、例えば8ポートをひとまとめにして、ENABLE PCINTやENABLE PCINT0、ENABLE PCINT1などのようにグループに対してENABLE命令で許可します。 それぞれのポートは、PCMSKレジスターで割り込みを有効にするかしないかを設定します。
例えば、ATtiny84の場合、PCINT0〜PCINT7を[PCMSK0]レジスターでON/OFFして、[GIMSK]レジスターの[PCIE0]を[1]にすると初めて割り込みが発生する状態になります。 この[GIMSK]レジスターの[PCIE0]を[1]にする命令が「ENABLE PCINT0」命令です。
初期のAVRではピン割り込みが少なく「ENABLE PCINT0」という名称でプログラムが記述されていて、その後ピン変化割り込みが増えてPCINT0〜PCINT7の様にBASIC命令とピン名が同じになって混乱の原因になっています。 古いプログラムと互換性を持たせるため仕方の無い方法なので、なんとか理解してもらうしかありません。
ご質問のPCINT8を有効にするには、 Pcmsk1 = &B0000_0001 'PCINT8のピン変化割り込みを許可する。 Enable Pcint1 'PCINT8〜11のグループを許可する。 Enable Interrupts 'すべての割り込みを許可する。
AVRによってこの割り込みの構成が大きく違うため、サンプルプログラムで一律に表現するが難しく、質問に対する説明で理解してもらうしかないですね。
|
|
|
Re:regファイルについて |
引用 |
投稿者: 金太郎 ..2021/05/27(木) 21:46 No.14714 |
|
O-Family様
確かにPCINTについては、グループがどうのこうの記載が有りましたがピン名が同じなので、個別に設定出来る物だとばかり思い込んでおりました。 記載頂きました内容を理解してやってみたいと思います。有り難う御座いました。
|
|
|