#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を受信に設定。 //コンパレータとADCを切るためにレジスタを操作します。とりあえずアドレスを割り当て。 #byte CMCON=0x19 //COMPARATOR CONTROL REGISTER #byte GPIO=0x05 //GPIOREGISTER #byte ANSEL=0x9F //ANALOG SELECT REGISTER void main(void){ //GPIOの入出力方向の設定 set_tris_a(0x03); //GP0,GP1を入力に設定(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){ //無限ループ //X軸測定 while (input(PIN_A0)); //パルス立ち下がりまで待つ while (!(input(PIN_A0))); //パルス立ち上がりまで待つ set_timer0(0); //タイマーをリセット(カウント開始) while (input(PIN_A0)); //パルスの立下りまで待つ printf("X=%u\r\n",get_timer0()); //結果表示 //Y軸測定 while (input(PIN_A1)); //パルス立ち下がりまで待つ while (!(input(PIN_A1))); //パルス立ち上がりまで待つ set_timer0(0); //タイマーをリセット(カウント開始) while (input(PIN_A1)); //パルスの立下りまで待つ //結果表示 printf("Y=%u\r\n\r\n",get_timer0()); delay_ms(500); //0.5mSウェイト } }