例題4.5 MOTOR3


モータを正転→ブレーキ→正転(回転速度が遅くなります)させます.
;MOTOR3.SRC            yas@e-sy

;------CPUの指定---------
        .CPU    300HA

;---------シンボルの定義----------

P1DR    .EQU    H'FFFFC2               ;ポート1データレジスタ
TSTR    .EQU    H'FFFF60               ;タイマスタートレジスタ
TSNC    .EQU    H'FFFF61               ;タイマシンクロレジスタ
TMDR    .EQU    H'FFFF62               ;タイマモードレジスタ
TCR0    .EQU    H'FFFF64               ;CH0タイマコントロールレジスタ
GRA0    .EQU    H'FFFF6A               ;CH0ジェネラルレジスタA
GRB0    .EQU    H'FFFF6C               ;CH0ジェネラルレジスタB
        .SECTION ROM,CODE,LOCATE=H'000100     ;コードセクションの宣言

;------初期化--------

INIT:   MOV.L   #H'FFF10,ER7           ;スタックポインタ
        MOV.B   #H'FF,R0L              ;ポート1を           
        MOV.B   R0L,@H'FFFFC0  ;出力用ポートに設定する       
        MOV.B   #B'11000011,R0L ;GRB0コンペアマッチ
        MOV.B   R0L,@TCR0              ;カウンタクリア

;-----数値設定-------

        MOV.W   #H'0000,R0             ;立ち上げタイミングデータを
        MOV.W   R0,@GRA0               ;GRA0に書き込む
        MOV.W   #H'3000,R0             ;立下げタイミングデータを
        MOV.W   R0,@GRB0               ;GRB0に書き込む
        MOV.B   #B'10000001,R0L ;TMDRに"10000001"
        MOV.B   R0L,@TMDR              ;CH0のみPWMモードに設定する
        MOV.B   #B'11100001,R0L ;TSTRに書き込み
        MOV.B   R0L,@TSTR              ;CH0のカウントを始める

;----MAIN-------

        BSET    #0,@P1DR               ;下の行とセットで
        BCLR    #1,@P1DR               ;モータを正回転に設定 

        JSR     @TIME20        ;TIME20にとぶ
        JSR     @TIME20        ;TIME20にとぶ
        JSR     @TIME20        ;TIME20にとぶ

        BSET    #0,@P1DR               ;下の行とセットで
        BSET    #1,@P1DR               ;モータをブレーキに設定

        JSR     @TIME20        ;サブルーチンTIME20にとぶ
        JSR     @TIME20        ;サブルーチンTIME20にとぶ
        JSR     @TIME20        ;サブルーチンTIME20にとぶ

        BCLR    #0,@TSTR               ;TSTRのbit0に「0」をビットクリアする

        MOV.W   #H'2500,R0             ;立ち上げタイミングデータを
        MOV.W   R0,@GRA0               ;GRA0に書き込む

        BSET    #0,@TSTR               ;TSTRのbit0に「1」をビットセットする

        BSET    #0,@P1DR               ;下の行とセットで
        BCLR    #1,@P1DR               ;モータを正回転に設定 

 PWM:    BRA     PWM                    ;無限ループ
TIME20: MOV.L   #H'FFFFF,ER1   ;ER1にH'FFFFFを書き込み
TIME21: SUB.L   #1,ER1         ;H'1ずつ減算
        BNE     TIME21         ;ゼロになるまでTIME20を繰り返す
        RTS                            ;元のルーチンに戻る

                  .END 

課題 4.5の説明

  • 4行目:CPUの指定をしています.
  • 6〜13行目:シンボルの定義をしています.ほとんどがコントロールレジスタの番地です.P1DRをモータドライバ制御信号出力用に使用します,
  • 15行目:CODEセクションの宣言をしています.
  • 18〜22行目:初期化.スタックポインタにH'FFF10を書き込んでいます.ポート1を出力用ポートに設定しています.TCR(タイマコントロールレジスタ)のCCLR1,CCLR0に1,0,CKEG1,CKEG0に0,0,TPSC2〜TPSC0に0,1,1を書き込みGRB0のコンペアマッチ(一致)でTCNT0がクリアされ,クロックの立ち上がりエッジでカウント動作が行われるように設定しています.また,クロックは内部クロックをプリスケーリングあり(2MHz)で使用するように選択されています.
  • 25〜33行目:立ち上げ,立ち下げタイミングの数値をGRA0,GRB0に書き込んでいきます.TMDRのPWM0に1を書き込み,CH0をPWMモードに設定し,TSTRのSTR0に1を書き込みカウントをスタートさせます.
  • 36〜50行目:P1DRのbit0に1をセットし,P1DRのbit2に0をクリアしています.(正転) →WAIT×3→TSTRのbit0に0をビットクリアしてTCNT(カウント)を停止する→GRA0に新しい立ち上げタイミングデータを書き込む→TSTRのbit0に1をビットセットしてTCNT(カウント)を開始する.
  • 56〜59行目:WAITルーチン

課題: 2つのモータを動作させて下さい.時間がある人はモータに色々な動きを付けてください.



[山口研究室] <back | index | next >