例題4.4 MOTOR2
モータを正転→ブレーキ→逆転→ストップ→ブレーキさせます. |
.CPU 300HA ;---------シンボルの定義---------- P1DR .EQU H'FFFFC2 ;ポート1データレジスタ 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 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のカウントを始める BSET #0,@P1DR ;下の行とセットで BCLR #1,@P1DR ;モータを正回転に設定 JSR @TIME20 ;サブルーチンTIME20にとぶ JSR @TIME20 ;サブルーチンTIME20にとぶ 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 ;モータをブレーキに設定 TIME21: SUB.L #1,ER0 ;H'1ずつ減算 BNE TIME21 ;ゼロになるまでTIME20を繰り返す RTS ;元のルーチンに戻る GRA0_UP: .DATA.W H'1800 ;GRA0,CH0波形立ち上げタイミングデータ GRB0_DW: .DATA.W H'3000 ;GRB0,CH0波形立ち下げタイミングデータ
.END |
課題 4.4の説明
モータの回転速度を変化させる課題 4.5を作成します. |