Assembly Bit Tanımlama Hata , Yardım

Başlatan __TECH__, 02 Ekim 2010, 01:26:21

__TECH__

16F628 pic pinlerini şu şekilde kullanıyorum 8li bir dipsw kullanıyorum ve burdaki verilen degeri 8bitlik okumam lazım dipswdeki 8 butona bağlı uclar aşağıdaki şekildedir ve off durumu +5v çekilmiş durumdadır.

RA0 = DIPSW 5
RA1 = DIPSW 3
RA2 = DIPSW 1
RA3 = DIPSW 2
RA4 = DIPSW 4
RB7 = DIPSW 6
RB6 = DIPSW 7
RB5 = DIPSW 8

portb4 , portb3 ,portb0 çıkış olarak kullanılmıştır  RX ve TX olan portb2 ve portb1 ise giriş olarak kullanılmıştır. dipswdeki değeri aşağıdaki örnekteki gibi okumaya çalıştım fakat değeri alamadım bu kodda hatam nerdedir arkadaşlar ? pinlerdeki anlık durumu alıp deger adlı registere atamam gerekiyor.

movf    porta,w                     
andlw   b'00011111'
movwf   porta_kopya

movf    portb,w
andlw   b'11100100'
movwf   portb_kopya

iorwf   porta_kopya,w
movwf   deger

Tagli

Yanlış hatırlamıyorsam bu soruyu başka bir başlıkta daha sormuştun. Aslında, bir arkadaş cevap vermişti ama cevap hatalı, veya eksik. Bu iş için daha karışık bir kod yazman gerekiyor. Eğer yapabiliyorsan siviçlerin yerini veya bağlantılarını değiştir. Şu anda birşeyler yazmaya uğraşıyorum. Tamamlayınca bu mesajımı düzelterek eklerim.
Gökçe Tağlıoğlu

__TECH__

evet hocam bir arkadaş yardımcı olmuştu fakat hatalı olduğu için yanlış değer veriyor  1 almam gerekirken 4 veriyo vs... uğraştım biraz fakat içinden çıkamadım , switche baglı olarak kullandıgım ucların dışındaki pinlerden yazıları giriş bazılarıda çıkış olarak kullanıldı fakat okuma anında onların bir alakası varmı çözemedim karşılaştırma yapıldığı için arkadaşın verdiği şekilde sadece dipsw ile alakalı olan kısmı yazdım ama bir sonuç alamadım , ilginize tşk ederim iyi çalışmalar

Tagli

Denemedim ama şu şekilde çalışacağını umuyorum:
movf     PORTB,W
movwf     b_gecici
rlf     b_gecici,F
rrf     b0,F
rlf     b_gecici,F
rrf     b0,F
rlf     b_gecici,F
rrf     b0,F
movlw     b'11100000'
andwf     b0,F

movf     PORTA,W
movwf     a0
movwf     a1
movwf     a2
movwf     a3

rlf     a0,f
rlf     a0,f
rlf     a0,f
rlf     a0,f
movlw     b'00010000'
andwf    a0,F

rlf     a1,F
movlw     b'00000100'
andwf     a1,F

rrf     a2,F
rrf     a2,F
movlw     b'00000011'
andwf     a2,F

rrf    a3,F
movlw     b'00001000'
andwf     a3,F

movlw     d'0'
addwf     b0,W
addwf     a0,W
addwf     a1,W
addwf     a2,W
addwf     a3,W
movwf     sonuc
Burada b_gecici, b0, a0, a1, a2, a3, sonuc tanımlanması gereken hafıza alanları. Include dosyasında b0, a0, a1, a2, a3 isimleri geçiyor mu bilmiyorum, çakışma olursa farklı isimler ver.
Gökçe Tağlıoğlu

__TECH__


__TECH__

MOVWF       sonuc
COMF       sonuc,F

bu şekilde düzettim aldığım sonucu tersledim ve istediğim değerleri alabiliyorum şimdi tşk .