CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

プログラムをC言語化

ハードが大体正常動作しているようなので、プログラムをCで書き換えました

現状の問題点は電池の消耗が激しいこと。
そこで画面操作などのキー入力がしばらくないときCPUをSLEEPさせるようにCで記述してみました。
GPSのデータをLCDに表示する処理を1回するごとにカウンタを減算し0になったらSLEEP。
キー入力があったら割込みでwakeup、カウンタを再セットしています。


void isr(void)      // INT0割込み関数(キー押下で起動)
{
 if(INTCONbits.INT0IF){ // INT0状態変化割り込み?
  INTCONbits.INT0IF=0; // INT0割り込みフラグを0にする
  tm=100;         // タイマをセットし直す
 }
}

void main(void)
{
 init();
 while(1){
  proc();       //メインの処理(GPSユニットのメッセージをLCDへ表示)
  tm--;
  if(tm<0){      //タイムアウトしたらsleepする
   Sleep();
  }
 }
}

失敗だったのは4つのタクトキーをRB0-RB3に接続していることです。このため割込みに有効なキーは
RB0(INT0)に接続された1個のキーのみになってます。
これをRB4-RB7につないでいればPORTB状態変化割込みで4個のキーがトリガに使えました。

動作させてみると通常RUN中は約160mA、SLEEP中でもまだ110mA程度流れていて劇的には減っていません