アプリ版:「スタンプのみでお礼する」機能のリリースについて

pic 12F1822で、
割り込みを、
IOCAN3 = 1;
IOCIE = 1;
GIE = 1;
のようにして下の関数を呼び出して、正常に動作していますが、、呼び出す側にisr()をターゲットにする記述はみあたりません。
void __interrupt() isr(void)
{
// 割込み処理プログラム内容を記述する
// 割込み処理の最後に割り込みフラグをクリアする
}
割り込みをRA3だけでなく、RA0,1,2などをトリガとして、複数の割り込み関数を切り分けることはできるでしょうか。
出来ないわけはないと思うのですが、web上を探しても、簡略な方法はありませんでした。
picの入門レベルでも解説されていませんでした。
どうぞよろしくおねがいします。

A 回答 (2件)

特に組み込み系の質問をする場合、必ず使用する開発環境も教えてください。


同じC言語の環境であってもA社の開発環境とB社の開発環境では組み込み関数や割り込みの取り扱いが全く異なります。同じ会社のプログラムであってもバージョンで異なることもあります。

使用する関数から見て質問者の環境はMPLAB XC8 Cコンパイラーと思われますがどうでしょうか。
もしそうだとすると、
>割り込みをRA3だけでなく、RA0,1,2などをトリガとして、複数の割り込み関数を切り分けることはできるでしょうか。
に対する答えは"PIC 12F1822に対しては不可"となります。
MPLAB XC8 Cコンパイラーでは割り込みベクタに対応してそれぞれ関数を割り当てます。PIC12F1822には割り込みベクタは一つしかありませんから関数を一つしか作ることができません。

複数の割り込みを有効にしている場合は、その関数が呼び出される際に割り込みフラグを読み取りどの割り込みかを判断して処理を行います。

具体的な例としては
http://www.picfun.com/xc/xc06.html
あたりをご覧ください。

上記のサイトは#1の方の示す1個目のサイトと同じドメインとなっていますね。でも書いてある内容はかなり違うと感じるでしょう。これは初めに書いた開発環境の違いによるものです。
#1に示される1個目のサイトで取り上げられている開発環境はCCS-Cという古のコンパイラーだと思われます。このコンパイラーであれば割り込み要因ごとに関数を割り当てることになります。
ですがMPLAB XC8 Cコンパイラーでは割り込みベクタごとにしか関数を割り当てることはできません。(なお、割り込みベクタを複数設定可能なPIC18シリーズでは割り込みベクタごとに関数を割り当てます)

Webで検索する場合でも開発環境を明示しておいてそれ以外の検索条件を緩やかにしておけばいくらでも情報は手に入るでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
データシートの表を一見したところ、4つのピンから割り込みがかけられ、基本的な機能で、コンパイラなどには無関係と思いました。
お世話になりました。

お礼日時:2020/12/27 00:10

>web上を探しても、・・・ありませんでした



割り込み処理関数
http://www.picfun.com/ctech09.html
割り込み
http://www.coins.tsukuba.ac.jp/~yas/coins/os2-20 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お示しいただいたURLチェックしてみましたが、私には高レベルすぎて、最初から勉強しなくてはなりません。お手数かけました。

お礼日時:2020/12/27 12:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています