p16 da toplama islemi yardim

Başlatan mabool, 07 Ocak 2011, 14:30:54

mabool

simdiden yardimci olmaya calisacak arkadaslara tesekkurler,
kitaptaki kendiniz uygulayiniz bolumundeki soru su sekilde idi
h'33' sayisi ile port a dan girilen 8bitlik sayiyi toplayn toplami portb deki ledlerde gosteren programi yaziniz.ben denemeyi hazir deneme kartinda yaptigim icin port a nin ra0,4 ve 7. bitlerina butonlar baglidir digerlerinde led ve potlar vardir yani kulanilmicak olan butonlari maskelenmesi gerektigi yaziyoyor ip ucu olarak vede basili olan bitlerin degerini 1  olarak degerlendirmek icin (ra0,4,7) xorlw veya xorwf mantiksal komutlariyla terslenmelidir diyor yani butonlara basilmadiginda b'00000000' olur.
son olarakta meydana gelebilecek arklar nedeniyle verinin yanlis algilanmasini onlemek icin gecikme altprogrami muhakkak yazilmalidir diyor, ben simdi kafamdan bi program yazdim tabiki calismadi sadece ledlerde h33 sayisini aliyorum calistirdigimda butonlara basmam sayiyiyi etkilemiyor vede gecikme kodlarini hangi satir araligina koyacagimi bulamadim program asagidaki gibidir.hatalari ve eksiklerim nerelerde?

LIST            P=16F628A
INCLUDE            "P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

DEPO2   EQU      H'21'
ORG            H'00'
CLRF         PORTB
BANKSEL         TRISB
CLRF         TRISB
MOVLW         H'FF'
MOVWF         TRISA
BANKSEL         PORTB
MOVLW         H'07'
MOVWF         CMCON
BASLA
MOVLW         H'33'
MOVWF         PORTB
MOVF         PORTA,W
ANDLW         B'10010001'
MOVWF         DEPO2
MOVLW         B'10010001'
XORWF         DEPO2,W
BTFSS         STATUS,2
CALL         BASLA
MOVF         PORTA,W
ADDLW         H'33'
MOVWF         PORTB
DONGU      
GOTO         DONGU
END         

Tagli

Ben bu sayının girilmesi olaynı anlamadım. Döngü içinde PORTA okunur, maskelemek için AND işlemi yapılır, h'33' ile toplanıp PORTB'ye atılır. XOR işlemi neden kullanılıyor?

Ayrıca "CALL BASLA" ifadesi programını çökertir. Kodda RETURN yok, donanımsal yığın şişer ve taşar, akma kokma yapar :) Ondan sonrasını ben de bilmiyorum. Ama aslında çok da birşey olmaz, programda zaten başka RETURN de olmadığından o arada döner durursun, GOTO yazmışsın gibi ama sen yine de değiştir onu, bunlar tehlikeli şeyler.

En alttaki kısma ise zaten şu durumda hiç ulaşamıyorsun ama ulaşsan bile sadece bir kez çalışırdı. Sonra sonsuz döngüye girip orada kalır program.
Gökçe Tağlıoğlu

eseneren

Buton basılı mı tutacaksın yoksa basıp cekınce o bıtın degerı mı degısecek?
eger basılı tutacaksan asagıdakı gıbı ıkı satırı degıstırıp denermısın.

CALL         BASLA ;goto basla
MOVF         PORTA,W
ADDLW         H'33'
MOVWF         PORTB
DONGU     
GOTO         DONGU ;goto basla
END 
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

mabool

#3
butonlar basili değilken ledlerde h'33' sayisi okunacak (110011) misal ra0 a basip cektik ledelrdeki durum 110100 olacak. o yukarda goto yazicam yerde call yazmisim daha yeni farkettim simdi tekrar basliyorum uzerinde kafa patlatmaya :) xor komutu misal ra0 a bastigimizda girisin 1 okunmasi icin tersliyoruz yoksa dogru degil mi?

eseneren

xor terlıyor evet port okuyup xorda yapabılırsın de takla atarak, comf portb.0 gıbı komut calısırsa onunlada yapabılırsın.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk