#include <12F675.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT //内部4MHzクロック指定 #use delay(clock=4000000) //delayを使えるようにする #use rs232(baud=9600,xmit=PIN_A5,rcv=PIN_A3,parity=N,bits=8) //シリアル設定 //(上の行説明)GP5を送信、GP3を受信に設定。 //#use standard_io(A) //(上の行説明)いちいちset_tris...しなくても入出力を切り替えてくれるモード。下で設定してるので不要 //コンパレータとADCを切るためにレジスタを操作します。とりあえずアドレスを割り当て。 #byte CMCON=0x19 //COMPARATOR CONTROL REGISTER #byte GPIO=0x05 //GPIOREGISTER #byte ANSEL=0x9F //ANALOG SELECT REGISTER void main(void){ //GPIOの入出力方向の設定 set_tris_a(0x01); //GP0を入力に設定(12F675の場合はGP3は強制的に入力に設定される。) //コンパレータなどを切って、デジタルIOピンにする処理 GPIO=0x00; //以下3行はデジタルIOに切り替える手順(データシートに書いてあった手順通り) CMCON=0x07; ANSEL=0x00; //タイマ0を設定(内部クロック使用の場合は4クロックで1カウントなので注意) setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32); printf("START\r\n"); while(1){ //無限ループ while (input(PIN_A0)); //パルス立ち下がりまで待つ while (!(input(PIN_A0))); //パルス立ち上がりまで待つ set_timer0(0); //タイマーをリセット(カウント開始) while (input(PIN_A0)); //パルスの立下りまで待つ printf("VALUE=%d\r\n",get_timer0()); //結果表示 delay_ms(500); //0.5mSウェイト } }