ストップウォッチ作成のヒント

インターバルタイマによる割り込みを用いて,グローバル変数カウンタを1ずつ増やして,
これを時計にする。
インターバルタイマを止めたり,動かしたりしてもよいが,インターバルタイマを動作させ
たまま,コントロール変数を使って,割り込みルーチンにカウントアップを許可したり,
禁止したりする方法で作る。

ストップウォッチの骨組み
long int time=0; /*時刻(1/100secでカウント)を保存する変数*/
int countup=0;   /*時計を動かすか止めるかをコントロールする変数*/
                 /*動け:1 とまれ:0*/

main()
{
    long int time1;
    インターバルタイマで10msecごとのタイマ割り込みを設定
        :
    while(1) {

        ch=SCI1_chkgetChar(); /*すぐに戻ってくる*/
        if (ch=='A') countup=1;
        else if (ch=='B') countup=0;
        else if (ch=='C') time=0;
        time1=time; /*表示の途中で変数timeが変更されたときの対策*/
        SCI1_printf("%4ld.%02ld \r",time1/100,time1%100);
    }

}

10msecごとの割り込み関数()
{
    time+=countup; /*if (countup==1) time++;と同じ意味*/

    割り込みフラッグクリア;
}


SCI1_printf("%4ld.%02ld \r",time1/100,time1%100);
                       ↑
ここの空白はキーボードからA,B,Cを入力した文字が
表示されるのを隠す目的


ストップウォッチの中にはあるボタンを押すと,時計は動作しているが,表示はボタンを押したときの時刻表示を
つづけ,一定時間ののち,現在時刻の表示に戻るものがある。この機能はラップタイム機能といって,
陸上競技選手などが使う。この機能も実装してみよう。
A,B,Cのキーに加え「D」のキーを使うこととし,「D」が押されたら3秒間ラップタイム表示するようにする。


ラップタイム機能の追加
long int time=0; /*時刻(1/100secでカウント)を保存する変数*/
int countup=0;   /*時計を動かすか止めるかをコントロールする変数*/
                 /*動け:1 とまれ:0*/
int laptimecount=0; /*0でない時,表示のみ止めるカウンタ*/

main()
{
    long int time1;
    インターバルタイマで10msecごとのタイマ割り込みを設定
        :
    while(1) {

        ch=SCI1_chkgetChar(); /*すぐに戻ってくる*/
        if (ch=='A') countup=1;
        else if (ch=='B') countup=0;
        else if (ch=='C') time=0;
        else if (ch=='D') laptimecount=300;
        time1=time; /*表示の途中で変数timeが変更されたときの対策*/
        if (laptimecount==0) {
            SCI1_printf("%4ld.%02ld \r",time1/100,time1%100);

        }
    }

}

10msecごとの割り込み関数()
{
    time+=countup;
    if (laptimecount!=0) laptimecount--;

    割り込みフラッグクリア;
}