プロが教えるわが家の防犯対策術!

PICマイコン初心者です。時間を正確に測定して表示させたいのですが、時間を正確に測定する方法が分からず苦慮しています。教えてください。
 デバイスはPIC16F877、プログラミング言語はMPLABに付属していた
 Cコンパイラ(HI-TECH PICC Lite)です。
現在、考えてうまく動作していない記述を下記に示します。ご指摘頂きたく。
 Buildは成功するのですが動作せず????
私が考えていたのはRC0がLOWのときにdelay(100ms)をカウントしていき、
それをバイナリでPORTBに表示する方法です。
測定レンジは0.1 - 60secぐらいまでです。
*****************************************************************************
#include <pic.h>
#define _XTAL_FREQ 16000000
__CONFIG(HS & DEBUGDIS & LVPDIS & BORDIS & PWRTEN & WDTDIS );

int main(void){
unsigned long T1 = 0 ; // iの変数設定
TRISC = 0b00000001 ; // RC0入力 その他は出力設定
TRISB = 0x00 ; // PORT B 出力
PORTC = 0xff    ; // PORTCをall 1を設定
PORTB = 0x00 ; // PORTBを"0"Resetする

if ( RC0 == 1 ) {

}
else {
__delay_ms(100) ; // 100ms wait
T1++ ; // T1 = T1 + 1
PORTB = T1 ;
}
}

A 回答 (2件)

while(1){.......} でくくると無限ループになり、括弧内を繰り返します



T1がlongで宣言されてますが、PORTBは8ビットなので、何らかの変換が必要では?

タイマ0を使用する場合
プリスケーラ8ビット + タイマ0 8ビット = 16ビット
基本クロック 16/4=4MHz 1Ф=250ns 250ns * 65536 = 16.384ms までしか計測できないので
オーバーフローフラグによるタイマの拡張が必要です

RC0=1 に成るまで待つ
RC0=0 でタイマクリア タイマカウントスタート
RC0=1 でタイマカウント停止
PORRTB データ出力
    • good
    • 0

if文の後にループ命令が無い為、一回実行しただけで終了する気がしますが?


正確な時間測定には、タイマ機能を使用して下さい。

この回答への補足

回答ありがとうございます。ループ命令とは例えばどのようになるのでしょうか?
教えて頂きたく。お願いします。
 また、タイマー機能とはタイマーを動作させて、割り込み回数をカウントするとかでしょうか?

補足日時:2013/04/19 08:19
    • good
    • 0

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