アプリ版:「スタンプのみでお礼する」機能のリリースについて

CLOCK 10MHz
; PORTB 0:LED緑,1:LED赤
;
LIST P=PIC16F84A ; LIST宣言で、使用するPICをPIC16F84Aと定義する
INCLUDE P16F84A.INC ; 設定ファイルp16f84a.incを読み込む

__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF


GPR_1 EQU 0Ch ; GPRの1バイト目にGPR_1と言う名前を付ける
GPR_2 EQU 0Dh ; GPRの2バイト目にGPR_2と言う名前を付ける
GPR_3 EQU 0Eh ; GPRの3バイト目にGPR_3と言う名前を付ける


ORG 0 ; リセットベクタ(0番地)を指定する。
INIT
; << PICの初期化 >>
BSF STATUS,RP0 ; ファイルレジスタSTATUSのRP0をセット(1)する → バンク1
CLRF TRISB ; ファイルレジスタTRISBをクリア(0) → PORTBは全て出力
BCF STATUS,RP0 ; STATUSのRP0をクリア(0) → バンク0

LOOP
MOVLW 03h
MOVWF PORTB ; RB0,RB1をオンにする(LED点灯)

CALL T05S ; 0.5秒待つ
CLRF PORTB ; RB0,RB1をオフにする(LED消灯)

CALL T05S ; 0.5秒待つ
GOTO LOOP ; LOOPに戻って繰り返す


; << 0.5S待つサブルーチン >>
T05S
MOVLW 05h ; ループ回数5を
MOVWF GPR_3 ; セット
T05LP CALL T100mS ; 100mS待つ
DECFSZ GPR_3,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T05LP
RETURN ; このサブルーチン呼出し元に戻る


; << 100mS待つサブルーチン >>
T100mS
MOVLW 0F9h ; F9h=249
MOVWF GPR_2 ; (ループ回数として249をセット)
T100LP CALL T04mS ; 0.4mS待つ
DECFSZ GPR_2,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T100LP ;
RETURN ; このサブルーチン呼出し元に戻る


; << 0.4mS待つサブルーチン >>
T04mS
MOVLW 0F9h ; F9h=249
MOVWF GPR_1 ; (ループ回数として249をセット)
T04LP NOP ; 何もせず1サイクル消費
DECFSZ GPR_1,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T04LP
RETURN ; このサブルーチン呼出し元に戻る

END ; プログラムの終了をアセンブラに指示する
このプログラムをスイッチを押したらランプが点灯するプログラムに変更したいのですが何処を修正すればいいのかわかりません。
初心者なのでわかりやすく教えて頂けると幸いです。宜しくお願いします。

A 回答 (2件)

質問文のサンプルプログラムはとても親切にできている。


これを見ながら勉強すればよいのですが、それすら拒否するのであれば、
自分もNo.1の回答者さん同様、「向いてない」んで諦めることを勧める。

・・・
まずはコマンドリファレンスを見る。
PIC系のコマンドは少ないから覚えようとしなくても使っているうちに覚えてしまうでしょう。
次にI/O。これは専用のレジスタを使って値を読んだり書き込んだりして行う。
データシートと睨めっこだ。

その上で分からない所を聞くようにしよう。

プログラミングも初めてで何から手を付けていいか分からないんです…という事ならプログラミングを教えてくれるスクールで勉強してください。
さすがにそこから勉強が必要な人を一問一答形式のQ&Aサイトで何とかできるようなものではありません。


・・・余談・・・
自分もPICのアッセンブラについてはほとんど知りませんが、
先ほどコマンドリファレンスとデータシートをチラ見した感じでは、
2日くらい試行錯誤すればモノになるかな…って感じ。
その後もしばらくコマンドリファレンスとデータシートは手放せないでしょうが。
それよりもエミュレータのインストールが面倒かなと思った。

ただ、他の機種のアッセンブラを体験しているのでそんなに難しい感じは受けませんでしたが、
プログラミングの初心者さんには基礎を教えてくれる人がいないと1ヶ月でも無理かなと思いました。
(Z80系のザイログニーモニックと8080系の8ビット・インテルニーモニックのアッセンブラなら今でも行けますぜ。ダンナ)

そんなわけで初心者さんなら、身近にいるプログラミング(特にアッセンブラ)を教えてくれる人を頼りましょう。
1日1時間きっちり教われば、最短なら1週間でPICプログラミングできるようになる。(ただし、教えてくれる人のスキル次第)


ちなみにサンプルプログラムはチラ見する前から内容をほぼ理解できました。(そのくらい簡単で親切な作りです)
レジスタはデータシートを見ながら1つずつ確認しなきゃダメですけどね。
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。
なんとか頑張ってみます。
勉強になりました。

お礼日時:2017/03/23 22:11

>何処を修正すればいいのか


ああそう、ならゼロから作ればいいんじゃない?

既存プログラムを見て「ここはこういう意味」というのが解ってくれば
改造もできるようになりますが
そういう段階になってないのかやる気がないのかなんでしょうね

必要性がわかりませんが、
少々のことを考えていくのもイヤならプログラム作成なんかできません。
やらなくて済むならやめちゃえば?

やる気あるなら声援くらいしてやるけど

>スイッチを押したらランプが点灯するプログラムに
ランプ点灯させるには何をすればいい?
スイッチを押した、のを検知するにはどうすればいい?

既存プログラムをよく読めばわかるとおもうんだけど
ぜーんぜんわからない、解る気もない、ならやっぱり「むいてない」んで止めて別の道を選ぶのがいいと思う
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2017/03/23 20:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!