例題4.4 MOTOR2


モータを正転→ブレーキ→逆転→ストップ→ブレーキさせます.
;MOTOR2.SRC            yas@e-sys

;------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   @GRA0_UP,R0            ;立ち上げタイミングデータを読み込む
        MOV.W   R0,@GRA0               ;それをGRA0に書き込む
        MOV.W   @GRB0_DW,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,@P1DR               ;下の行とセットで
        BSET    #1,@P1DR               ;モータを逆回転に設定 

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

       
BCLR    #0,@P1DR               ;下の行とセットで
        BCLR    #1,@P1DR               ;モータをストップに設定       

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

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

PWM:    BRA     PWM                    ;PWMにジャンプする
TIME20: MOV.L   #H'FFFFF,ER0   ;R0にH'FFFFを書き込み
TIME21: SUB.L   #1,ER0         ;H'1ずつ減算
        BNE     TIME21         ;ゼロになるまでTIME20を繰り返す
        RTS                            ;元のルーチンに戻る
        .SECTION RAM,DATA,LOCATE=H'000B00     ;DATA SECTION 宣言
GRA0_UP:       .DATA.W H'1800         ;GRA0,CH0波形立ち上げタイミングデータ
GRB0_DW:       .DATA.W H'3000         ;GRB0,CH0波形立ち下げタイミングデータ

                  .END 

課題 4.4の説明

  • 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)で使用するように選択されています.
  • 61〜63行目:41行目ではデータセクションを宣言し,データ領域を確保します.そして,ここにはGRA0,GRB0に書き込むタイミング数値をデータとして書き込んでおきます.
  • 25〜33行目:データセクションの数値をGRA0,GRB0,GRA1,GRB1に書き込んでいきます.TMDRのPWM0に1を書き込み,CH0をPWMモードに設定し,TSTRのSTR0に1を書き込みカウントをスタートさせます.
  • 25〜33行目:P1DRのbit0に1をセットし,P1DRのbit2に0をクリアしています.(正転) →WAIT→P1DRのbit0に1をセットし,P1DRのbit2に1をクリアしています.(ブレーキ)→WAIT→P1DRのbit0に0をセットし,P1DRのbit2に1をクリアしています.(逆転)→WAIT→P1DRのbit0に0をセットし,P1DRのbit2に0をクリアしています.(ストップ) →WAIT→P1DRのbit0に1をセットし,P1DRのbit2に1をクリアしています.(ブレーキ)
  • 56〜59行目:WAITルーチン

モータの回転速度を変化させる課題 4.5を作成します.



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