MYマイコンを作る(12) 
    ポートON/OFFプログラム


 MYマイコンComet2eをプログラムで動かしてみましょう。
 本来はちゃんとデバッグを済ましてからアプリケーションを実行するのですが、待ち遠しいので実行しました。





  上:実験の状況写真です。
    デザインウエーブマガジン 2003-10 付属の
    基板に4MHzのクロックを接続しています。


  左:シンクロスコープで確認した出力波形










 コードと解説を纏めてここに置きます。

 ・Comet2e用プログラム Soft31_LedOnOff1.casl
 ・PrgLenOnOffWaveシミュレーション波形
 ・PrgLenOnOffWaveシミュレーション波形拡大
 ・シンクロスコープの波形
 
 QuartusHDLUコードは修正がありますので修正しからにします。


●ポートON/OFFプログラムのコード

 LED点滅でお馴染みのプログラムです。
 小ループカウンタと大ループカウンタカウントします。それぞれのループカウンタは、それぞれのループマスク用定数と比較してループを抜けます。ループを抜けると出力レジスタを更新します。

********************************************************
; MYマイコン Comet2e 動作確認プログラム
;Soft31_LedOnOff1
;

KAISI START

;汎用レジスタに数値を設定
    NOP         ;no operation:これは実行されない
    NOP         ;no operation:これは実行されない
    NOP         ;no operation:これは実行されない
    NOP         ;no operation:これは実行されない

;ここから実行
    XOR GR1,GR1     ;GR1←0:出力ポートデータ
    XOR GR4,GR4     ;GR4←0:0の定数
    LAD GR5,1      ;GR5←1:1の定数
    LAD GR6,4      ;GR6←4:小ループマスク用定数
    LAD GR7,4      ;GR6←4:大ループマスク用定数

LOOP1  XOR GR2,GR2     ;GR2←0:小ループカウンタ 約65ms
    XOR GR3,GR3     ;GR3←1:大ループカウンタ

LOOP2  ADDL GR2,GR5    ;GR2+1:小ループカウンタ+1
    CPL GR2,GR6     ;GR2とループマスク用定数を比べる
    JNZ LOOP2      ;小ループマスク用定数と不一致で jump

    XOR GR2,GR2     ;GR2←0:小ループカウンタをクリア
    ADDL GR3,GR5     ;GR3+1:大ループカウンタ+1
    CPL GR3,GR7     ;GR3とループマスク用定数を比べる
    JNZ LOOP2      ;大ループマスク用定数と不一致で jump

    SVC #0052
    ADDL GR1,GR5    ;GR1+1:出力ポートデータ+1

    JUMP LOOP1     ;unconditional jump

END


●ポートON/OFFプログラムの実行と確認

 プログラムの実行と確認は、ModelSim と実機で行い正常動作を確認しました。
 実は、問題点を解決しながらの動作確認でした。コーディングして基本的な命令の確認だけでアプリケーションの実行とは大胆ですね。四苦八苦するのは当たり前ですね。コーディング抜けが有ったり考え間違いがありました。しかし基本的な問題は無かったので一安心です。

  文章でプログラムの実行と確認の説明では出来ないので上記の「PrgLenOnOffWaveシミュレーション波形」「PrgLenOnOffWaveシミュレーション波形拡大」「シンクロスコープの波形」を参照ください。


ホームへ戻る