PIC16F876という奴で、MPLABとかいう奴を使ってます
LED点滅というのは、LEDが縦一列に8個付いてるテストボードを使って
プログラムを書き終わったPICをそのテストボードに付けて
その8個のLEDが点滅すればおkなのですが、アセンブラがよくわかりません
とりあえず、ずっと点灯させるアセンブラプログラムは出来たのですが・・・
つづく
つづき
これが点灯した時のプログラムです。これらを使って点滅させることが出来ると思うのですが
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
つづく
JP1
DECFSZ 20H,f
GOTO JP1
MOVLW 00H
MOVWF PORTB
MOVLW 0FFH
MOVWF 20H
JP2
DECFSZ 20H,f
GOTO JP2
GOTO MAINROUTINE
END
以上が、LED8個点灯(スイッチを入れると永久に)するプログラム(アセンブラ)です
8個のLEDが同時に点滅できるプログラムが出来たら
次は踏み切りのように8個のLEDを前4個、後ろ4個に分けて
点滅させるプログラムも作らなければいけないそうなのでどうか、お願いします
実はその後の課題もあるのです。●点灯しているLED○していないLED
●○○○○○○○
○●○○○○○○
○○●○○○○○
○○○●○○○○
略
○○○○○○●○
○○○○○○○●
最初に戻る の繰り返すパターン
最後はナイトライダーとかいう点滅方法です。
明日までに何とか解決しなければ・・・
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
中学生乙
RESTART:
1をポートに書く
一定時間待つを呼ぶ
2をポートに書く
一定時間待つを呼ぶ
4を....8,16,32,64...128...64..32.16......
;;; ...は自己で補完しろ
2をポートに書く
一定時間待つを呼ぶ
RESTARTラベルへ飛ぶ
>>1おまえにはシフトとか以前にこんな風に順序立てて全部ならべるコードから始めるのを勧める
回路図かなんかさえありゃ知識ない俺でも手伝ってやれるがな
TRISA〜C, PORTB, STATUS の
どれがどうつながってるのか分からんと手も足も出ない
arduinoなら簡単だよ
流れはこんな感じです
0FFH→(20H)
↓
0FFH→(21H)
↓
?→(22H)
↓
(22H)−1→(22H)
=0? NOの場合、ここの部分だけ繰り返す
YESの場合、次にいく つづく
つづき
(21H)−1→(21H)
=0? Noの場合、2つ前の命令に戻る
Yesの場合、次にいく
↓
(20H)−1→(20H)
=0? Noの場合、3つ前の命令に戻る
Yesの場合、終了
と、流れはこんな感じです。20H,21H、22Hに16進数を入れて、それを1引いた数を
同じ場所に上書きして、その値が0になったら次へ、違ったら0になるまで繰り返す
という感じです
>>10 回路図はないんです・・・ただ
>>2-3のアセンブラ言語を使えば、LEDを点滅させる
ことができるようなのですが・・・もしかしたらTRISA〜Cは使わなくても良いのですかね?
PORTBは全体的な出力の役割をしているのだと思います
>>11 高校の授業なので決められているもの以外は使えません
用語解説します
BSF f,b・・・ビットセット命令 ファイルレジスタ命令
BCF f,b・・・ビットファイルレジスタ fで指定した○bit目をクリアせよ(0にする)
MOVLW k・・・レジスタに入れたい数kを入れよ
MOVWF・・・ワーキングレジスタの中身をFで指定したレジスタに入れよ(コピー)
CLRF f・・・指定したレジスタの中身を消せ
CONF f,d・・・dがfの時、f自身へ
>>12-13 >>15 いやそれはとっくに全部調べがついてるんだ
単純に TRISA〜C, PORTB, STATUS のどれがなんのために使われているのかが知りたい
一見 PORTB が LED に繋がってるように見えるが
もしそうなら
>>2-3 のプログラムであれば点滅しそうなものだ
しかし君は点灯という
ということは 20h回の待機じゃあまりに早すぎて点滅しているように見えないのだろうか
>>16 え!?このプログラムでも実は点滅してるんですか!?
点滅速度が早すぎて点灯しているように見える・・・ということですか?
0FFHとはご存知だと思いますが2進数にすると256です。
ここの部分を違う値にすれば点滅して見えるようになるのでしょうか?
そんなことで解決できればいいのですが・・・
最初らへんのプログラムにあるIOSETでPORTCとPORTAを入力してPORTBを出力と
あって、電源がONの時に入力と書いてあるのですが、これだけじゃ分かりませんよね?
あ、多分こうです
POTRTA・・・Aの中に数字を入れる為の箱みたいなもの
このAの中身をwへ
PORTB・・・PORTAと同様に数字を入れる為の箱
このBとwを足して、再びwへ
PORTC・・・これらを計算して出た結果wをCへ入れる
という役割のような気がします。推測ですが、20H,21H,22Hと同じような感じなので
もしかしたらPORTはいらないように思えました
>>18 ・・・PORTではなくTRISA〜Cのことを言ったかもしれませんorz
というより、やはりPORTはいらないと思いました。
STATUS は謎ですね・・・これももしかしたらいらないのかもしれません
ループカウンタ レジスタ
ループ1のカウンタ 20H
ループ2のカウンタ 21H
ループ3のカウンタ 22H
ループ1×ループ2×ループ3
256 × 256 × 256 (MAX)・・・ もう何のことやら
他の方どうぞ
22 :
デフォルトの名無しさん:2011/01/04(火) 15:55:25
あけましておめでとうございます
ここってまだ生きてるのかい?
よかったら相談に乗るよ
時期的に、もう解決しているだろうけど・・・
16進数の 0FFH は2進数にすると 11111111B で
10進数にすると 255 というふうに突っ込んではダメ?
24 :
デフォルトの名無しさん:2011/05/18(水) 23:01:57.31
その通りです。
あってます。
25 :
デフォルトの名無しさん:
あってたか