PIC24Fについて
こんにちわ PIC24Fの勉強をしています。
使っているPICはPIC24FJ64GA002で、コンパイラは MPLAB IDE,C30 です。
現在LEDを2つ使って、異なるタイミングで点滅させるプログラムを作りたいと思っています。
参考書に載っていたプログラムを参考にして、1つのLEDを点滅させることはできました。
下にそのプログラムを書きます。
#include "p24FJ64GA002.h"
/// コンフィギュレーション ビットの設定
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF
& COE_OFF & ICS_PGx1& FWDTEN_OFF )
/// 8MHz*PLL4=32MHz (Full Speed)
_CONFIG2( IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD
& OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)
int main(void)
{
CLKDIV = 0;// クロックの分周1:1に設定
AD1PCFG = 0xFFFF; // ポートA全ディジタルに指定
/// ポートの入出力モード設定
TRISB = 0;// ポートB を出力に設定
/// タイマ1の設定 FOSC=16MHz,プリスケーラ 1:256, 200msec=5Hz
PR1 = 12500-1;// 16000000/5/256=12500
T1CON = 0b1000000000110000;
/// メイン ループ
while(1)
{
if(IFS0bits.T1IF)// タイマ割り込みチェック
{
IFS0bits.T1IF = 0;// 割り込みフラグクリア
/// LEDの反転制御
LATBbits.LATB15 = !LATBbits.LATB15;
}
}
}
2つの点滅のタイミングをずらすために、またさらにPRレジスタ(PR2)を付け加え、適当な値にします。
すると、割り込みフラグT2IFビットがセットされると思います。
そこでさらにもう一つif文をつけ、同様の書式で異なるピンにLATを割り振ってやれば異なるタイミングで割り込みが起きるというやり方でやろうと思っています。(まずこれで正しいのかどうかもわかりませんが・・・。)
ですがそれ以降がよくわかりません。
まず
if文の中に入っている(IFS0bits.T1IF)とはどういう意味を持っているのでしょうか?
C言語にも疎く、if文に=や不等号などの条件が入っていないものを見るのも初めてです。
この他、○○bits.○○ というような書き方が手持ちの参考書に頻出している上に、まだ読んでいる途中ですので何とも言えませんが、どこにも詳しく書いてありません。
LATBbits.LATB15 = !LATBbits.LATB15 くらいならなんとなく想像はつきますが書式もいまいちわかりません
また、
同様にif文を使ってやる場合、IFSxレジスタは何を使えばいいのでしょうか?
割り込みベクタテーブル表を見ると、使っているタイマ1の割り込みフラグがIFS0<3>となっていましたので、PR2によりセットされたT2IFと合わせて
if(IFS0bits.T2IF)~
と適当に入力してみましたが、シミュレータでもうまくいきません。
分かりづらい文章かと思いますが、よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
えーと、まず「Cにおける論理値」と構造体、特に「ビットフィールド」をきっちり勉強されるのが良いかと思います。
一応解説すると、
> if文の中に入っている(IFS0bits.T1IF)とは
IFS0bits.T1F != 0
と同じ意味を持ちます。
> ○○bits.○○ というような書き方
これは前述の通りビットフィールドのことを理解すればわかります。
PICやMPLABは使ったことがないのでどのレジスタを使うかと言った話には答えられませんが、そこより先に上記の理解を進めたほうがいいかと思います。
No.2
- 回答日時:
私もPIC24FJ64GA002と、PIC24FJ64GA004を使用しております。
さて、LED2個の時間差点滅プログラムのサンプルが、後閑氏の書籍に載っておりましたので、引用しておきます。MPLAB C30です。
*** 引用開始 ***
/**********************************************
* PIC24F標準基板(PIC24FJ64GA002)
* Timer1 : タイマテスト 割り込みでLEDを点滅制御
* タイマ1=500msec タイマ2=250msec
* スイッチによりCPUの割り込みレベル変更 LED高速点滅停止
***********************************************/
#include "p24FJ64GA002.h"
/// コンフィギュレーション ビットの設定
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF &BKBUG_OFF
& COE_OFF & ICS_PGx1& FWDTEN_OFF )
/// 8MHz*PLL4=32MHz (Full Speed)
_CONFIG2( IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD
& OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)
/************************
* メイン関数
************************/
int main(void){
CLKDIV = 0;// クロック分周 1:1
AD1PCFG = 0xFFFF; // 全ポートをディジタルに指定
/// ポートの入出力モード設定
TRISB = 0xF0A0;// ポートB RB15-12,7,5 input
CNPU2bits.CN23PUE = 1;// CN23 スイッチ用プルアップ
/// タイマ1設定
/// 500msec周期 内部クロック,1/256,FOSC=16MHz
T1CON = 0b1000000000110000;//
PR1 = 31249;// 500msec
IPC0bits.T1IP = 5;// 割り込みレベル5に設定
IEC0bits.T1IE = 1;// 割り込み許可
/// タイマ2設定
/// 250msec周期 内部クロック、1/256、FOSC=16MHz
T2CON = 0b1000000000110000;
PR2 = 15624;// 250msec
IPC1bits.T2IP = 3;// 割り込みレベル3
IEC0bits.T2IE = 1;// 割り込み許可
/// メインループ
while(1) {
/// CPU割り込みレベル設定
if(PORTBbits.RB7)// スイッチの入力チェック
SRbits.IPL = 2;// CPUの割り込みレベル2
else
SRbits.IPL = 4;// CPUの割り込みレベル4
}
}
/*********************
* タイマ1割り込み処理
**********************/
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void){
IFS0bits.T1IF = 0;// 割り込みフラグクリア
/// 2個のLEDの反転制御
LATBbits.LATB11 = !LATBbits.LATB11;
LATBbits.LATB10 = !LATBbits.LATB10;
}
/**********************
* タイマ2割り込み処理
**********************/
void __attribute__((interrupt, no_auto_psv)) _T2Interrupt(void){
IFS0bits.T2IF = 0;// 割り込みフラグクリア
/// 2個のLEDの反転制御
LATBbits.LATB9 = !LATBbits.LATB9;
LATBbits.LATB8 = !LATBbits.LATB8;
}
*** 引用 終わり ***
引用した書籍は、
C言語ではじめる PIC24F活用ガイドブック [大型本]
後閑 哲也 (著)
価格:¥ 3,360
大型本: 472ページ
出版社: 技術評論社 (2007/10/18)
ISBN-10: 4774132470
ISBN-13: 978-4774132471
発売日: 2007/10/18
商品の寸法: 23 x 18 x 3.2 cm
CDが添付されていて、全てのサンプルプログラムが公開されています。
この書籍はアマゾンなどで入手可能です。
頑張ってくださいね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Excel(エクセル) エクセルの数式について教えて下さい。 8 2023/05/27 12:17
- Excel(エクセル) EXCELのif文をifs文に変換したい 1 2022/09/22 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
irqbalance って
-
AKI-H8/3048Fでのタイマ割り込み
-
アトメル社製ATtiny2313マイコ...
-
pic 複数の割り込み関数 切り分...
-
アセンブラのタイマー割り込み
-
picタイマ0割り込みについて
-
[コンピュータアーキテクチャ]...
-
インバウンドで迷惑している人...
-
マイコンの割り込みについて教...
-
一定時間操作がなかったら、と...
-
H8/3052F/IRQを使った割り込み
-
電車で待機列の割り込みについ...
-
USB機器からのデータ受信による...
-
PIC16F84AのRBポート変化割り込...
-
割り込み処理から引数を取得す...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
なんかC言語でプログラム書いて...
-
VBSの処理中一旦処理を止めて再...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インバウンドで迷惑している人...
-
pic 複数の割り込み関数 切り分...
-
スーパーのレジで並んでいたら...
-
ショッピング
-
Excelでタイマーの一時停止する...
-
電車で待機列の割り込みについ...
-
CPUの処理量を減らすコーデ...
-
C言語でPICマイコン開発
-
【組込み】割り込み中のstatic...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
VB.net 割り込みの禁止
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
PICでのプログラムによるチャタ...
-
割り込み中に例外異常
おすすめ情報