SVX日記
2004-08-15(Sun) アナログメータ基本動作確認
今日は、とりあえず、アナログメータの針が動くところまで。昨日書いたコードには、バンクを0に戻すつもりで、戻していないというバグがあったので、ちょっと悩んでしまった。気づいてチョイと直したところアッサリ動いたのだが、CCPR1Lに値を書き込むだけという簡単なコードでPWM制御ができることには、改めて驚いた。今後は自製でPWM制御ルーチンを書くなんてやってられませんな。
とりあえず、PCのシリアルポートに接続し、CPU使用率を表示させたりしてみたい……のだが、WindowsだとCPU使用率を得るだけでもひと苦労のようだ。なんとかググッて、Win2k上でCPU使用率を表示するGPL印のソースコードを見つけたところで、今日はおやすみである。ホントにGPL万歳である。
; ################################################################################
; #
; # メイン処理
; #
MAIN ; MAIN
; ;1. PWM周期をPR2レジスタに書き込む
bsf STATUS, RP0 ; SET RP0, (STATUS) ; バンク1へ
movlw 0FFh ; LD A, 0FFh
movwf PR2 ; LD (PR2), A ; PWM周期をFFに
bcf STATUS, RP0 ; RES RP0, (STATUS) ; バンク0へ
; ;2. PWM有効期間をCCPR1LとCCP1CON<5:4>に書き込む
movlw 0h ; LD A, 0h
movwf CCPR1L ; LD (CCPR1L), A ; PWM有効期間に0をセット
; ; RES 4, (CCP1CON)
; ; RES 5, (CCP1CON) ; どうせ5.で0クリアしてしまう
; ;3. TRISBをクリアし、CCP1を出力に設定
bsf STATUS, RP0 ; SET RP0, (STATUS) ; バンク1へ
bcf TRISB, 2 ; RES 2, (TRISB) ; 今回はPORTBの2番をPWMする
bcf STATUS, RP0 ; RES RP0, (STATUS) ; バンク0へ
; ;4. T2CONに書き込み、TMR2プリスケーラを設定、Timer2を有効化する
movlw 00000100b ; LD A, 00000100b
movwf T2CON ; LD (T2CON), A ; TMR2 ON & PRESCALER x 1
; ;5. CCP1CONをPWMモードに設定する
movlw 0Ch ; LD A, 0Ch
movwf CCP1CON ; LD (CCP1CON), A ; PWMモードに設定(分解能の下位2ビットを0固定)
; ;Note: TRISBの2か3かは、コンフィギュレーションビットの12ビット目(CCPMX)による
;
MAIN1 ; MAIN1
bsf PORTB, monitorLED ; SET monitorLED, (PORTB) ; モニタLED ON
movlw 010h ; LD A, 010h
addwf CCPR1L ; ADD (CCPR1L), A ; PWM有効期間を16(6%)加算
movlw 10 ; LD A, 10
call WAITnx01sm25us ; CALL WAITnx01sm25us ; 1秒待つ
;
bcf PORTB, monitorLED ; RES monitorLED, (PORTB) ; モニタLED OFF
movlw 010h ; LD A, 010h
addwf CCPR1L ; ADD (CCPR1L), A ; PWM有効期間を16(6%)加算
movlw 10 ; LD A, 10
call WAITnx01sm25us ; CALL WAITnx01sm25us ; 1秒待つ
;
goto MAIN1 ; JP MAIN1
;