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 ; プログラムの終了をアセンブラに指示する
このプログラムをスイッチを押したらランプが点灯するプログラムに変更したいのですが何処を修正すればいいのかわかりません。
初心者なのでわかりやすく教えて頂けると幸いです。宜しくお願いします。
No.2ベストアンサー
- 回答日時:
質問文のサンプルプログラムはとても親切にできている。
これを見ながら勉強すればよいのですが、それすら拒否するのであれば、
自分もNo.1の回答者さん同様、「向いてない」んで諦めることを勧める。
・・・
まずはコマンドリファレンスを見る。
PIC系のコマンドは少ないから覚えようとしなくても使っているうちに覚えてしまうでしょう。
次にI/O。これは専用のレジスタを使って値を読んだり書き込んだりして行う。
データシートと睨めっこだ。
その上で分からない所を聞くようにしよう。
プログラミングも初めてで何から手を付けていいか分からないんです…という事ならプログラミングを教えてくれるスクールで勉強してください。
さすがにそこから勉強が必要な人を一問一答形式のQ&Aサイトで何とかできるようなものではありません。
・・・余談・・・
自分もPICのアッセンブラについてはほとんど知りませんが、
先ほどコマンドリファレンスとデータシートをチラ見した感じでは、
2日くらい試行錯誤すればモノになるかな…って感じ。
その後もしばらくコマンドリファレンスとデータシートは手放せないでしょうが。
それよりもエミュレータのインストールが面倒かなと思った。
ただ、他の機種のアッセンブラを体験しているのでそんなに難しい感じは受けませんでしたが、
プログラミングの初心者さんには基礎を教えてくれる人がいないと1ヶ月でも無理かなと思いました。
(Z80系のザイログニーモニックと8080系の8ビット・インテルニーモニックのアッセンブラなら今でも行けますぜ。ダンナ)
そんなわけで初心者さんなら、身近にいるプログラミング(特にアッセンブラ)を教えてくれる人を頼りましょう。
1日1時間きっちり教われば、最短なら1週間でPICプログラミングできるようになる。(ただし、教えてくれる人のスキル次第)
ちなみにサンプルプログラムはチラ見する前から内容をほぼ理解できました。(そのくらい簡単で親切な作りです)
レジスタはデータシートを見ながら1つずつ確認しなきゃダメですけどね。
No.1
- 回答日時:
>何処を修正すればいいのか
ああそう、ならゼロから作ればいいんじゃない?
既存プログラムを見て「ここはこういう意味」というのが解ってくれば
改造もできるようになりますが
そういう段階になってないのかやる気がないのかなんでしょうね
必要性がわかりませんが、
少々のことを考えていくのもイヤならプログラム作成なんかできません。
やらなくて済むならやめちゃえば?
やる気あるなら声援くらいしてやるけど
>スイッチを押したらランプが点灯するプログラムに
ランプ点灯させるには何をすればいい?
スイッチを押した、のを検知するにはどうすればいい?
既存プログラムをよく読めばわかるとおもうんだけど
ぜーんぜんわからない、解る気もない、ならやっぱり「むいてない」んで止めて別の道を選ぶのがいいと思う
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- Java Java 南京錠 2 2023/02/04 11:46
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- その他(法律) 自動車の点灯義務について 6 2023/02/24 15:01
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- 環境・エネルギー資源 停車中の自動車のヘッドライト点灯 23 2023/03/01 10:14
- Perl perlのrequireの動き方についての質問 2 2022/10/30 17:27
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBのReturnの使い方
-
プロシージャとは
-
Perl実行時のメモリ不足について
-
$#{スカラー変数}とは何を意味...
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
クラスに配列を渡す方法
-
pythonでファイルのコメント行...
-
DOSコマンドのループ内のTIMEコ...
-
For文を使った九九表の作成
-
VBAで3秒だけ時間を止めたい
-
英語でのシャープとコメの呼び...
-
vbscriptでIE自動入力(途中で...
-
ループ内での条件処理
-
CSVファイルの特定の行だけを読...
-
GIFアニメをループさせたくない
-
VBA横データを縦にしたいです
-
vb.netからエクセル関数書き込み
-
VBScript 配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBのReturnの使い方
-
ExcelVBAでのデータ型変換、も...
-
COBOLの日付操作
-
プロシージャとは
-
サブルーチン(共通の処理)の...
-
RFC822形式の日付を生成するサ...
-
流れ図・・・
-
Perl実行時のメモリ不足について
-
$#{スカラー変数}とは何を意味...
-
Perl・DBIでの汎用selectサブル...
-
${str}と$strの違いとは?
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
おすすめ情報