PIC_質問_アセンブリ言語_キャリー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
parapara

PIC_質問_アセンブリ言語_キャリー

#1

投稿記事 by parapara » 14年前

アセンブリ言語について質問です。Bポートに繋いだ8個のLEDを左から右(0pin→7pin)に光らせてキャリーに入ったら、今度は右から左に光らせてキャリーに入ったら、また最初に戻って処理を続けるプログラムを書いたつもりなのですが、思いどうりの動作をしません。どこが間違っているでしょうか?アセンブリ言語を習い始めたばっかなのですが、なるべくC言語っぽく書こうと努力した結果、次のソースが出来上がったのです。よろしくお願いいたします。
==ソース==

コード:

list	p=16f628
#include<p16f628.inc>

	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF

w_temp		EQU		0x70
status_temp	EQU		0x71
CNT1		EQU		0x20
CNT2		EQU 		0x21
O_DATA	EQU		0x22
DIRECT	EQU		0x22

;2行に分けて大丈夫か?*上は名前に数を与えただけ*下は本体*
		ORG	0x000
		goto	main

		ORG	0x004
		movwf	w_temp
		movf	STATUS,w
		movwf	status_temp

; ISR Codes

		movf	status_temp,w
		movwf	STATUS
		swapf	w_temp,f
		swapf	w_temp,w
		retfie

main
		bcf	STATUS,RP0
		bcf	STATUS,RP1

		clrf	INTCON
		clrf	PORTA
		movlw	0x07
		movwf	CMCON

		bsf	STATUS,RP0

		bsf	PCON,OSCF
		clrf	TRISA
		clrf	TRISB

		bcf	STATUS,RP0

		clrf	PORTA
		clrf	PORTB

main_loop
	bcf	STATUS,C
	clrf	DIRECT
	movlw	0x01;
	movwf	O_DATA
loop_if;if
	btfss	DIRECT,0;set=1の時スキップ
	goto	sub_loop1;//bitの計算の時分かれ道は二つだけ
	btfsc	DIRECT,0;set=0の時スキップ//この行不要だが分かりやすさのために入れておく。
	goto	sub_loop2;//
sub_loop1;左から右へ//DIRECT,0=0
	movf	O_DATA,w;movf	O_DATA,PORTBとしては駄目か?
	;movf	w,PORTB;下と入れ替え可能か
	movwf	PORTB
	call	DLY_100;関数呼び出し			
	rlf	O_DATA,f
	btfss	STATUS,C;BiTFileregisterSkiptoSet	;**ココと真下の合わせて3行消しても平気か?
	goto	sub_loop1				;**
	;rlf	O_DATA,f				;**
	bsf	DIRECT,0
	bsf	STATUS,DC
	goto	loop_if

sub_loop2;右から左へ//DIRECT,0=1
	movf	O_DATA,w;movf	O_DATA,PORTBとしては駄目か?
	;movf	w,PORTB;下と入れ替え可能か
	movwf	PORTB
	call	DLY_100;関数呼び出し			
	rrf	O_DATA,f
	btfss	STATUS,C;BiTFileregisterSkiptoSet	;**ココと真下の合わせて3行消しても平気か?
	goto	sub_loop2				;**
	;rrf	O_DATA,f				;**
	bcf	DIRECT,0
	bcf	STATUS,DC
	goto	loop_if



;Delay Routine
DLY_100			
	movlw	0x64;ラベルと同じ行に書いて平気か?→平気
	movwf	CNT1
DLY_1
	movlw	0xf0  ;0xfa  ;0xf0=240  ;0xfa=250
	movwf	CNT2
DLY
	nop
	nop
	decfsz	CNT2,f
	goto	DLY
	decfsz	CNT1,f
	goto	DLY_1
	return

	END
返事が少し遅れるかもしれませんが、どうかよろしくお願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PIC_質問_アセンブリ言語_キャリー

#2

投稿記事 by softya(ソフト屋) » 14年前

PICのアセンブラを大分忘れているのとテストする環境がないのでお聞きします。
どううまく行かないのでしょうか?
今おきている問題の詳細を説明してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

parapara

Re: PIC_質問_アセンブリ言語_キャリー

#3

投稿記事 by parapara » 14年前

ソフト屋様すいません、説明不足でした。
[youtube][/youtube]
ご覧の様に一番左が2回ほど点滅したあとに左から右に一番右まで行くと、端と端が交互に光るようです。分かる方居ましたらよろしくお願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PIC_質問_アセンブリ言語_キャリー

#4

投稿記事 by softya(ソフト屋) » 14年前

MPLABのシミュレータでトレースしてみて気づきましたが、
O_DATA EQU 0x22
DIRECT EQU 0x22
と2つが同じアドレスなのが原因ではないでしょうか?

バグの原因を探すのにシミュレータを使われることをお勧めします。
Debugger→Select Tool→MPASM SIM
です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

parapara

Re: PIC_質問_アセンブリ言語_キャリー

#5

投稿記事 by parapara » 14年前

ソフト屋様、真にありがとうございます。多分それです。まだ試してないので、締め切りませんが、今日調べてみます。まずは、お礼を述べたいので、今書きます。本当にありがとうございます。途方にくれていました。本当に困っていました。
もう一つ質問なのですが、よろしいでしょうか?すいません。シミュレーターの起動方法とステップ実行の方法はソフト屋様のご指摘どうり、本にも書いてあったのです。やり方はvisualstudioと似ていたので、ブレークポイントとか分かったつもりだったのですが、いざステップ実行をしてみると、ただ単に命令が下に一つずつずれていくだけで、goto文やcall文などで命令のアドレスが飛んでる様子が分からないようなのです。なにか操作が間違っているでしょうか?シミュレーターの使い方を教えていただければ、嬉しいです。よろしくお願いいたします。

===追記==
動画が直接、投稿できないのは、サーバーの負担を軽くするためでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PIC_質問_アセンブリ言語_キャリー

#6

投稿記事 by softya(ソフト屋) » 14年前

たぶん、ビルドを行っていないのではないでしょうか?
ビルド後にシミュレーションしてみてください。
すんごくmplabは、ここら辺が分かりづらいのですよ。

>動画が直接、投稿できないのは、サーバーの負担を軽くするためでしょうか?
そうです。Dixq (管理人) さんの個人サーバーで運営されていますので、企業のようには出来ませんね。

[追記]
変数の記述ですが、mplabのアセンブラなら

コード:

    CBLOCK 0x20
        CNT1
        CNT2
        O_DATA
        DIRECT
    ENDC
と言う記法が使えるので試してみてください。
http://www4.zero.ad.jp/electronics/pic/cblock.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

parapara

Re: PIC_質問_アセンブリ言語_キャリー

#7

投稿記事 by parapara » 14年前

ソフト屋様なにからなにまでありがとうございます。家族のごたごたで今日は色々忙しく、明日も出来るかどうか分からなくて申し訳ないですが、結果は必ずご報告致しますので暫しお待ちください。ソフト屋様の御記載いただいたことは、自分の努力の範囲内では見つけることが出来ませんでした。重ね重ね感謝いたします。ありがとうございます。

parapara

Re: PIC_質問_アセンブリ言語_キャリー

#8

投稿記事 by parapara » 14年前

期待した通りの結果でした。
[youtube][/youtube]
遅くなってすみませんでした。
昔はC言語でPICのPWMとかやってたんですけど、アセンブリ遣ってみたくて、やってしまいました^^。本当にありがとうございました。感謝。

閉鎖

“C言語何でも質問掲示板” へ戻る