Iorlw Komutu

Katılım
20 Eyl 2006
Mesajlar
440
Puanları
1
Yaş
39
Merhaba arkadaşlar plc biliyorum ayrıca birde pic e başlayayım dedim.ıorlw komutu ile ilgili bir örneği olan varmı elinde ben bir tane yaptım ama çalışmadı yardımcı olurmusunuz? programda aşağıda
list p=16f84
include "p16f84.inc"

clrf portb
bsf status,5
clrf trisb
movlw h'ff'
movwf trisa
bcf status,5

test_porta
movlw b'00000110'
iorwf porta,f
goto test_porta
yak
movlw h'01'
movwf portb
end
 
Kod:
test_porta
  movlw b'00000110'
  iorwf porta,f
  goto test_porta
yak
  movlw h'01'
  movwf portb
  end

ustam burada asıl sorun şudur. kullandığınız "iorwf" komutu burada "porta" registerinin içeriğini değil bu registerin adresini işleme sokmaktadır. yani porta nın adresi olan " h'05' " ile işlem yapmaktadır.

bunun yerine

Kod:
  movlw b'00000110' --> Movf	PORTA, w
  iorwf porta,f --> iorwf b'00000110', w
bunu yapınız

2. olarakta program bütününde hata var pic hiç bir zaman bu kıyaslamadan çıkamayacaktır. mesela "yak" isimli bölüme ulaşamayacaktır. sonsuz bir döngüye girecektir.

Saygılar
 
ilk önce yardımın için teşekkür ederim. goto test_porta dan sonra goto yak dersem eğer doğru olurmu ?
 
sanırımburda amaç porta nın 1 ve 2 nolu ayağından 1 gelirse portb nin 0. ayağını 1 yapmak diğer koşullarda da portb nin 0. ayağını "0" yapmak.

eğer amaç buysa yardımcı olayım
 
evet hocam aynen doğru amacım bu bunun mantığını anlatırmısın bir örnekle
 
Kod:
	list p=16f84
	include "p16f84.inc"

	clrf	PORTB
	bsf	STATUS, 5
	clrf	TRISB
	movlw	h'ff'
	movwf	TRISA
	bcf	STATUS, 5

test_PORTA
	BTFSS	PORTA, 1
	goto	sondur
	BTFSS	PORTA, 2
	goto	sondur
yak
	movlw	h'01'
	movwf	PORTB

	goto	test_PORTA
sondur
	bcf	PORTB, 0
	goto	test_PORTA

	end

Tamamiyle program bu şekilde olmalı, zira burada ior (or komutu kullanılamaz) fakan "and" komutu kullanılması gerekir buda portların terminal sayısı eşit olmadığı için tutarsız sonuç vermekte, ayrıca diğer girişlerin durumuda çıkışı etkilemekte, yani çıkış için porta nın "00000110" olması gerekmekte.

Fakat size gönderdiğim örnekte program sadece porta nın 1. ve 2. terminaline bakmakta diğerleri nin konumu önemli değil

(bir önceki mesajımda "iorwf" komutunu "iorlw" gibi algıladığım için düzeltme yanlıştır.)

Saygılar
 
Kod:
    list p=16f84
    include "p16f84.inc"

    clrf    PORTB
    bsf    STATUS, 5
    clrf    TRISB
    movlw    h'ff'
    movwf    TRISA
    bcf    STATUS, 5

test_PORTA
    BTFSS    PORTA, 1
    goto    sondur
    BTFSS    PORTA, 2
    goto    sondur
yak
    movlw    h'01'
    movwf    PORTB

    goto    test_PORTA
sondur
    bcf    PORTB, 0
    goto    test_PORTA

    end

Tamamiyle program bu şekilde olmalı, zira burada ior (or komutu kullanılamaz) fakan "and" komutu kullanılması gerekir buda portların terminal sayısı eşit olmadığı için tutarsız sonuç vermekte, ayrıca diğer girişlerin durumuda çıkışı etkilemekte, yani çıkış için porta nın "00000110" olması gerekmekte.

Fakat size gönderdiğim örnekte program sadece porta nın 1. ve 2. terminaline bakmakta diğerleri nin konumu önemli değil

(bir önceki mesajımda "iorwf" komutunu "iorlw" gibi algıladığım için düzeltme yanlıştır.)

Saygılar

Bence soruyu tam anlamamışınız. arkadaşta tam anlatamamış ..
0. 3. .4.5.6.7. portlara +5 volt geliyor bence. bu portlarada buton bağlanmış.
 
16F877 için Komutun Acıklamaları..
IORLW k =
verilen k sabit sayısı ile W kaydedicisindeki sayıyı bit bit Lojik OR ( VEYA) işlemine tabi tutar ve sonucu W kaydedicisine yazar.

IORWF f,d = f adresindeki sayı ile W kaydedicisindeki sayıyı bit bit Lojik OR ( VEYA ) işlemine tabi tutar ve sonucu d ile belirtilen hedefe kaydeder
 

Forum istatistikleri

Konular
128,612
Mesajlar
919,024
Kullanıcılar
450,615
Son üye
asdfghjerv mkş

Yeni konular

Geri
Üst