LEDを点滅させるアセンブラのプログラム
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/11/17(水) 20:13:46LED点滅というのは、LEDが縦一列に8個付いてるテストボードを使って
プログラムを書き終わったPICをそのテストボードに付けて
その8個のLEDが点滅すればおkなのですが、アセンブラがよくわかりません
とりあえず、ずっと点灯させるアセンブラプログラムは出来たのですが・・・
つづく
0002デフォルトの名無しさん
2010/11/17(水) 20:16:26これが点灯した時のプログラムです。これらを使って点滅させることが出来ると思うのですが
INCLUDE PIC16F876.inc
IOSET
BSF STATUS,RP0
MOVLW 0FFH
MOVWF TRISA
MOVWF TRISC
CLRF TRISB
BCF STATUS,RP0
MAINROUTINE
MOVLW 0FFH
MOVWF PORTB
MOVLW 0FFH
MOVWF 20H
つづく
0003デフォルトの名無しさん
2010/11/17(水) 20:17:59DECFSZ 20H,f
GOTO JP1
MOVLW 00H
MOVWF PORTB
MOVLW 0FFH
MOVWF 20H
JP2
DECFSZ 20H,f
GOTO JP2
GOTO MAINROUTINE
END
以上が、LED8個点灯(スイッチを入れると永久に)するプログラム(アセンブラ)です
0004デフォルトの名無しさん
2010/11/17(水) 20:21:22次は踏み切りのように8個のLEDを前4個、後ろ4個に分けて
点滅させるプログラムも作らなければいけないそうなのでどうか、お願いします
0005デフォルトの名無しさん
2010/11/17(水) 20:26:47●○○○○○○○
○●○○○○○○
○○●○○○○○
○○○●○○○○
略
○○○○○○●○
○○○○○○○●
最初に戻る の繰り返すパターン
0006デフォルトの名無しさん
2010/11/17(水) 20:31:34明日までに何とか解決しなければ・・・
0007デフォルトの名無しさん
2010/11/17(水) 21:04:49言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0008デフォルトの名無しさん
2010/11/17(水) 21:34:150009デフォルトの名無しさん
2010/11/17(水) 21:46:141をポートに書く
一定時間待つを呼ぶ
2をポートに書く
一定時間待つを呼ぶ
4を....8,16,32,64...128...64..32.16......
;;; ...は自己で補完しろ
2をポートに書く
一定時間待つを呼ぶ
RESTARTラベルへ飛ぶ
>>1おまえにはシフトとか以前にこんな風に順序立てて全部ならべるコードから始めるのを勧める
0010デフォルトの名無しさん
2010/11/18(木) 16:09:55TRISA〜C, PORTB, STATUS の
どれがどうつながってるのか分からんと手も足も出ない
0011デフォルトの名無しさん
2010/11/18(木) 18:38:320012デフォルトの名無しさん
2010/11/18(木) 18:52:040FFH→(20H)
↓
0FFH→(21H)
↓
?→(22H)
↓
(22H)−1→(22H)
=0? NOの場合、ここの部分だけ繰り返す
YESの場合、次にいく つづく
0013デフォルトの名無しさん
2010/11/18(木) 18:58:21(21H)−1→(21H)
=0? Noの場合、2つ前の命令に戻る
Yesの場合、次にいく
↓
(20H)−1→(20H)
=0? Noの場合、3つ前の命令に戻る
Yesの場合、終了
と、流れはこんな感じです。20H,21H、22Hに16進数を入れて、それを1引いた数を
同じ場所に上書きして、その値が0になったら次へ、違ったら0になるまで繰り返す
という感じです
0014デフォルトの名無しさん
2010/11/18(木) 19:46:43回路図はないんです・・・ただ>>2-3のアセンブラ言語を使えば、LEDを点滅させる
ことができるようなのですが・・・もしかしたらTRISA〜Cは使わなくても良いのですかね?
PORTBは全体的な出力の役割をしているのだと思います
>>11
高校の授業なので決められているもの以外は使えません
0015デフォルトの名無しさん
2010/11/18(木) 20:04:54BSF f,b・・・ビットセット命令 ファイルレジスタ命令
BCF f,b・・・ビットファイルレジスタ fで指定した○bit目をクリアせよ(0にする)
MOVLW k・・・レジスタに入れたい数kを入れよ
MOVWF・・・ワーキングレジスタの中身をFで指定したレジスタに入れよ(コピー)
CLRF f・・・指定したレジスタの中身を消せ
CONF f,d・・・dがfの時、f自身へ
0016デフォルトの名無しさん
2010/11/18(木) 21:12:40いやそれはとっくに全部調べがついてるんだ
単純に TRISA〜C, PORTB, STATUS のどれがなんのために使われているのかが知りたい
一見 PORTB が LED に繋がってるように見えるが
もしそうなら >>2-3 のプログラムであれば点滅しそうなものだ
しかし君は点灯という
ということは 20h回の待機じゃあまりに早すぎて点滅しているように見えないのだろうか
0017デフォルトの名無しさん
2010/11/18(木) 21:37:39え!?このプログラムでも実は点滅してるんですか!?
点滅速度が早すぎて点灯しているように見える・・・ということですか?
0FFHとはご存知だと思いますが2進数にすると256です。
ここの部分を違う値にすれば点滅して見えるようになるのでしょうか?
そんなことで解決できればいいのですが・・・
最初らへんのプログラムにあるIOSETでPORTCとPORTAを入力してPORTBを出力と
あって、電源がONの時に入力と書いてあるのですが、これだけじゃ分かりませんよね?
0018デフォルトの名無しさん
2010/11/18(木) 21:49:00POTRTA・・・Aの中に数字を入れる為の箱みたいなもの
このAの中身をwへ
PORTB・・・PORTAと同様に数字を入れる為の箱
このBとwを足して、再びwへ
PORTC・・・これらを計算して出た結果wをCへ入れる
という役割のような気がします。推測ですが、20H,21H,22Hと同じような感じなので
もしかしたらPORTはいらないように思えました
0019デフォルトの名無しさん
2010/11/18(木) 21:56:12・・・PORTではなくTRISA〜Cのことを言ったかもしれませんorz
というより、やはりPORTはいらないと思いました。
STATUS は謎ですね・・・これももしかしたらいらないのかもしれません
0020デフォルトの名無しさん
2010/11/18(木) 22:03:00ループ1のカウンタ 20H
ループ2のカウンタ 21H
ループ3のカウンタ 22H
ループ1×ループ2×ループ3
256 × 256 × 256 (MAX)・・・ もう何のことやら
0021デフォルトの名無しさん
2010/11/19(金) 15:19:500022デフォルトの名無しさん
2011/01/04(火) 15:55:25ここってまだ生きてるのかい?
よかったら相談に乗るよ
0023デフォルトの名無しさん
2011/05/18(水) 16:02:08.6516進数の 0FFH は2進数にすると 11111111B で
10進数にすると 255 というふうに突っ込んではダメ?
0024デフォルトの名無しさん
2011/05/18(水) 23:01:57.31あってます。
0025デフォルトの名無しさん
2011/11/20(日) 11:27:32.79■ このスレッドは過去ログ倉庫に格納されています