楽天市場
[無料でホームページを作成] [通報・削除依頼]

続PIC10F200 電子サイコロ

skyriverさんから出目のLEDパターンに関するアイデイアをご提案いただいたので実装してみました。
skyriverさんどうもありがとうございます。ホームページいつも拝見させていただいています。

skyriverさんのホームページ
「PICマイコンは面白い」
http://piclabo.blog.so-net.ne.jp/


結局、最初にご提案いただいた時分割の点灯制御は行わず、2度目の投稿のLED回路を実装しました。
プログラムの変更も前回と比べてわずかな変更に留めています。
中央のLED(1の出目)は前回と異なりRA0のレベルが1のとき点灯します。
質問のページに記載しましたがPIC10とPIC12の価格差が5円になってしまいましたので、
PIC10を使用するメリットが無くなってしまいました。


<前回からの変更点>
①出目の検出方法
前回のプログラムではGPIOポートの値を毎回読んで出目の検出を行っていましたが、
今回はLATという名称のレジスタを新たに定義し、これを使用して出目の検出を行います。
②LATレジスタの仕様
LEDパターンに対応するGPIOポート情報を左に1ビットシフトしたデータをLATに保存します。
LATレジスタのLSBにはRA0のTRISの情報を保存。(0で出力1で入力(ハイインピーダンス状態Zに相当))
LATレジスタの値を"RRF LAT,W"命令で右ローテートするとWレジスタにLEDパターンが、キャリーにTRISの情報がセットされます。
RRF命令でWレジスタのMSBに直前のキャリーの値がセットされますが、この状態でmovwf命令を使用してGPIOに書き込んでも、PIC10FのGPIOは4ビットしかありませんのでGPIOの動作に影響はありません。

<実際のプログラム>
    rrf         LAT,w
    movlw    b'00001000'    ;RA0を出力に設定
    btfsc      STATUS,C
    movlw    b'00001001'    ;RA0を入力に設定
    tris        GPIO                ;入出力切り替え
    rrf         LAT,w
    movwf    GPIO               ;LEDパターンを出力

img_20150806-003517.jpg



<回路図> RA3の内部プルアップを有効にすれば10kの抵抗も不要となり回路がより簡単になります。
img_20150806-010358.png

ダウンロードはこちらから


https://drive.google.com/file/d/1HrC9dzpD25OEeVfI1TD3LLbSH9_0IFFv/view?usp=sharing