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

初めに、カテゴリー間違ってたら、ごめんなさい。
大学の授業でライントレースロボットのアセンブラプログラムをやっています。
「以下のプログラムをセンサ入力をPORTA、モータドライブをPORTBとしプログラムを完成させよ(本講義で用いる装置はそのような回路になっていないので実行できない)。」
という問題なんですが分かる方居ますでしょうか?

;改造するプログラム
ーーーーLIST P=PIC16F628A
ーーーーinclude "P16F628A.inc"
ーーーー__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _CP_OFF


STATUS EQU3
RP0EQU5
PORTA EQUH'05'
PORTBEQUH'06'
TRISA EQUH'85'
TRISBEQUH'86'
LREQUD'7'
LLEQUD'0'
FRONTEQUB'00011000'
RIGHTEQUB'00001000'
LEFTEQUB'00010000'

ーーBSFSTATUS,RP0
ーーCLRFTRISA
ーーMOVLWB'11000011'
ーーMOVWFTRISB
ーーBCFSTATUS,RP0
ーーCLRFPORTA
ーーCLRFPORTB

LINEBTFSCPORTB,LL
ーーGOTOMIGI
ーーBTFSCPORTB,LR
ーーGOTOHIDARI
ーーGOTOMAE

MAEMOVLWFRONT
ーーIORWFPORTB,1
ーーMOVLWB'11011011'
ーーANDWFPORTB,1
ーーGOTOLINE

MIGIMOVLWRIGHT
ーーIORWFPORTB,1
ーーMOVLWB'11001011'
ーーANDWFPORTB,1
ーーGOTOLINE

HIDARIMOVLWLEFT
ーーIORWFPORTB,1
ーーMOVLWB'11010011'
ーーANDWFPORTB,1
ーーGOTOLINE
ーーEND

私が今、予想しているのは
MOVLWB'11111111'
MOVWFTRISA
CLRFTRISB
とするのではないかな、くらいです。(合ってるか分かりませんが)
この問題を解ける方、いましたらお願いします。

(注)プログラムがスペースが分かりにくくなっていますが、本当のプログラムはちゃんとスペースが空いて、列も揃っています。行の先頭に付いているーは強制的に左寄せになるのを、すこしでも見やすくするための物で、意味はありません。

A 回答 (3件)

M_STOP EQU B'11000011'



ORG 0
GOTO MAIN
ORG 4
RETFIE

MAIN

BANKSEL PORTB
MOVLW M_STOP
ANDWF PORTB,F
BANKSEL TRISA
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'11000011'
MOVWF TRISB
BANKSEL PORTA

LINE

BTFSC PORTA,LL
GOTO MIGI
BTFSC PORTA,LR
GOTO HIDARI

MAE

MOVF PORTB,W
ANDLW M_STOP
IORLW FRONT
MOVWF PORTB
GOTO LINE

MIGI

MOVF PORTB,W
ANDLW M_STOP
IORLW RIGHT
MOVWF PORTB
GOTO LINE

HIDARI

MOVF PORTB,W
ANDLW M_SIOP
IORLW LEFT
MOVWF PORTB
GOTO LINE

END
動くかわかりませんが、参考にして下さい。
    • good
    • 0
この回答へのお礼

なんども、ありがとうございました!

お礼日時:2012/05/28 08:24

勘違いしてました IORWF PORTB,1 は IORWF PORTB,F のことですね、失礼しました。

    • good
    • 0

センサー構成ビット モーター制御ビット がわかりません


ORG文が無く RP1の初期設定は? 
STATUS - TRISB までは、P16F628A.inc ファイルで設定されています
IORW PORTB,1 の意味が不明です ビット0に何の意味がありますか?

この回答への補足

回答ありがとうございます。少し補足させていただきます。 0(左),7(右)ビット目がラインセンサで、1(左),6(右)ビット目がフォトセンサです。残りの2(左),3(左),4(右),5(右)ビットがモーターの制御となっています。

;改造するプログラム
ーーーLIST P=PIC16F628A
ーーーinclude "P16F628A.inc"
ーーー__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _CP_OFF

; 各ステータスの宣言
STATUS ーEQUー3; ステータスレジスタのアドレス
RP0 ー EQUー5; ページ(Bank)設定のアドレス
PORTA ーEQUーH'05'; ポートAのアドレス(05H)
PORTBーEQUーH'06'; ポートBのアドレス(06H)
TRISA ー EQUーH'85' ; ポートAの入出力設定のアドレス(85H)
TRISBーEQUーH'86'; ポートBの入出力設定のアドレス(86H)
LRーEQUーD'7'; LRの値
LLーEQUーD'0'; LLの値
FRONTーEQUーB'00011000'; FORNTの値
RIGHTーEQUーB'00001000'; RIGHTの値
LEFTーEQUーB'00010000'; LEFTの値
; ポートの設定
ーーBSFーSTATUS,RP0; STATUSレジスタのPR0ビットを1にして、
; ページ1(Bank1)を選択
ーーCLRFーTRISA; ポートAの設定を全て00H(出力)にする
ーーMOVLWーB'11000011'; ワーキングレジスタの値を書き込む
; 入力:0,1,6,7ビット目、出力:2,3,4,5ビット目
ーーMOVWFーTRISB; TRISBレジスタに値を書き込む
ーーBCFーSTATUS,RP0; STATUSレジスタのRP0ビットを0にして
; ページ0(Bank0)を選択
ーーCLRFーPORTA; PORTAのデータを全てクリア(00H)する
ーーCLRFーPORTB; PORTBのデータを全てクリア(00H)する

LINEーBTFSCーPORTB,LL
ーーGOTOーMIGI
ーーBTFSCーPORTB,LR
ーーGOTOーHIDARI
ーーGOTOーMAE

MAEーMOVLWーFRONT
ーーIORWFーPORTB,1
ーーMOVLWーB'11011011'
ーーANDWFーPORTB,1
ーーGOTOーLINE

MIGIーMOVLWーRIGHT
ーーIORWFPORTB,1
ーーMOVLWB'11001011'
ーーANDWFPORTB,1
ーーGOTOLINE

HIDARIーMOVLWーLEFT
ーーIORWFーPORTB,1
ーーMOVLWーB'11010011'
ーーANDWFーPORTB,1
ーーGOTOーLINE
ーーEND
見やすくなったか分かりませんが、ー増やしました。コメントも少し入れて分かりやすくしました。

補足日時:2012/05/27 09:41
    • good
    • 0

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