MPLABでシミュレーション(LED点灯) - PIC電圧計
Posted by kyosuke at 07/26 2007
>>次の記事: PIC16F877にプログラムを書き込んでみる
>>前の記事: MPLABを使ってみよう
前回の失敗の主な原因は、
PICのRP0とRPOは、MPLABのエディタ上、見分けがつかなかったこと。
リンクエラーは、.lkrのファイルを削除すると消える。
あとは適当にぼちぼち手直しして、デバックのしやすいように、カウンター値を小さくして、
Animationをする。
Animationのときに、Special Registerを表示させておくのがデバックのコツだ。
以下、そのときのコード。
LIST P=PIC16F877 INCLUDE "P16F877.INC" ORG 0CH CNT1 RES 1 CNT2 RES 1 CNT3 RES 1 ORG 0 START BSF STATUS,RP0 CLRF TRISA BCF STATUS,RP0 MOVLW 0FFH MOVWF PORTA MAIN BTFSS PORTA,0 GOTO LEDON LEDOFF BCF PORTA,0 CALL T1SEC GOTO MAIN LEDON MOVLW 0FFH MOVWF PORTA CALL T1SEC GOTO MAIN T1SEC MOVLW 01H ;10=AH MOVWF CNT3 T1SEC2 CALL T100MSEC DECFSZ CNT3,F GOTO T1SEC2 RETURN T100MSEC MOVLW 01H ;100=64H MOVWF CNT2 T100MSEC2 CALL T1MSEC DECFSZ CNT2,F GOTO T100MSEC2 RETURN T1MSEC MOVLW 01H; 256=FF MOVWF CNT1 T1MSEC2 NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT1,F GOTO T1MSEC2 RETURN END
結果。
ちゃんと動いてねぇよ。
LEDを点滅させるのに、
PORTAの出力を0と1にきりかえなきゃいけないのに、
してない。
直す。
見た感じ、下のコードがおかしい。
START BSF STATUS,RP0 CLRF TRISA BCF STATUS,RP0 MOVLW 0FFH MOVWF PORTAPORTAに0FFHが入っていない。
なんか、無視して素通りしやがる。
とりあえず、RP0とかってナンやねん。
Datasheetみろってことで、16f877のデータシートのアドレス関係の所をみる。
RP0とRP1でバンクを切り替えるらしい。
BANK1にある、PORTAの入出力を決めるのに、RP0を1にセットしなければならない。
RP0を0にすると、BANK1に戻ると。
もしかして、PORTAをすべて出力にまわすのがいけないのだろうか?
そんなこといけないとは書かれていない。
とりあえず、PORTBをすべて出力にしてみる。
START BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 MOVLW 0FFH MOVWF PORTBあ、
変わった。
うーん、
もしかして、
PORTAは5ビットしかないのに、FFを入れようとしたのが原因か?
試してみる。
うーん、
そういうわけではなさそう。
なんかいろいろ試してみたけど、
RA0-3までは出力を受け付けないようだ。
というかRA4だけ出力を受け付ける。
それ以外は無反応だ。
どうも、設定に問題があるような気分。
もういいや、PORTBを出力に使おう。
・・・・。
ちゃんと動いた。
最後に、Logic Analyzerで見る。
おー、ちゃんと動いてますよ。
以上、終了。
次回は、適当にテスト基盤に取り付けてみる。
ちなみに、最終的なLED点滅コード
RB0でLEDを1秒間隔で点滅させる。
LIST P=PIC16F877 INCLUDE "P16F877.INC" ORG 0CH CNT1 RES 1 CNT2 RES 1 CNT3 RES 1 ORG 0 START BSF STATUS,RP0 BCF STATUS,RP1 CLRF TRISB BCF STATUS,RP0 MOVLW 0FFH MOVWF PORTB MAIN BTFSS PORTB,0 GOTO LEDON LEDOFF BCF PORTB,0 CALL T1SEC GOTO MAIN LEDON MOVLW 0FFH MOVWF PORTB CALL T1SEC GOTO MAIN T1SEC MOVLW 0AH ;10=AH MOVWF CNT3 T1SEC2 CALL T100MSEC DECFSZ CNT3,F GOTO T1SEC2 RETURN T100MSEC MOVLW 064H ;100=64H MOVWF CNT2 T100MSEC2 CALL T1MSEC DECFSZ CNT2,F GOTO T100MSEC2 RETURN T1MSEC MOVLW 0FFH; 256=FF MOVWF CNT1 T1MSEC2 NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT1,F GOTO T1MSEC2 RETURN END
>>次の記事: PIC16F877にプログラムを書き込んでみる
>>前の記事: MPLABを使ってみよう
コメント (⇒ログイン)
MPLABでシミュレーション(LED点灯)へのコメント
今のところコメントはありませんー
だれか書いてー
■PIC電圧計のモノ作り記事
PIC電圧計の完成!(C言語バージョン+7セグメントLED)<br />
http://give-n-take.net/gat/user/show_diary/229
<br /...
続きを読む>>定電圧電源の製作、電圧表示付き(7セグメント3つ)
Posted by kyosuke at 04/10 2008
PICマイコンの10ビットA/Dコンバータのプログラム+回路図+LEDバー<br />
http://toolible.net/monozukuri/articles/51<br ...
続きを読む>>PIC電圧計の完成!(C言語バージョン+7セグメントLED)
Posted by kyosuke at 04/02 2008
電圧計の完成!<br />
http://toolible.net/monozukuri/articles/21<br />
<br />
とか書いてあります...
続きを読む>>PICマイコンの10ビットA/Dコンバータのプログラム+回路図+LEDバー
Posted by kyosuke at 03/30 2008
前回は、割り込み処理のデバックが終わった。<br />
<br />
いうなれば、今回のデバックが電圧計のためのものと。。<br />
<br />...
続きを読む>>PIC電圧計の完成!(アセンブラバージョン)
Posted by kyosuke at 08/11 2007
さて、デバックする。<br />
<br />
凡ミスを取り除いて、<br />
ビルトOK。<br />
<br />
RUNし...
続きを読む>>電圧計PICプログラム デバック
Posted by kyosuke at 08/09 2007

