LOOKUP TABLE da sorun :(

Başlatan kostebek, 06 Şubat 2008, 22:38:58

kostebek

Arkadaşlar bi program yapıyorum 7segment kullanıyorum iki tane. İki basamaklı sayı yapıp bu değeri ilerde butonla ayarlayacağım. Ama işin enteresanı çevrim tablosundan değer almıyor. Her ne şekilde olursa olursun . "0" değeri önüme geliyor. Sizce kodlarda bir problem görünüyor mu?

;====Çevrim Tablosu Örneği===04.02.2008======
;==================================
   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
;==================================      	
      		ORG  	h'00'
#DEFINE		DIS1	PORTA,0		;1.display
#DEFINE		DIS10	PORTA,1		;2.display
SAY1	EQU	h'0F'			;GECİKMEDE kullanılacak
SAY2	EQU	h'10'
SAY3	EQU	h'11'
SAY4	EQU	h'13'
DIG1	EQU	h'14'			;1 'ler basamağı hafızası
DIG10	EQU	h'15'			;10'lar basamağı hafızası

	ORG	h'00'	
	GOTO	BASLA
	ORG	h'04'			;kesme registeri
	RETFIE				;kullanmıyoruz bu programda
GECIK
		MOVLW	d'4'		;gecikme esnasında ekran da çağırılıyor ;)
		MOVWF	SAY3
		CALL 	EKRANGOSTER
		DECFSZ	SAY3
		GOTO	$-2
		RETURN
DISGEC					;displaydeki gecikme için
		NOP	
		NOP
		MOVLW	D'203'
		MOVWF	SAY1
		NOP	
		DECFSZ	SAY1		;sayaç içerisini 1 azalt sonuç 0 mı
		GOTO	$-2		;DEĞİL 2 SATIR YUKARI ZIPLA
		RETURN			;ALT PROGRAMDAN ÇIK
		
DONUSUM  						
		ADDWF	PCL;F
		RETLW	b'01111110'	;0
		RETLW	b'01001000'  	;1
		RETLW	b'00111101'  	;2
		RETLW	b'01101101'  	;3
		RETLW	b'01001011'  	;4
		RETLW	b'01100111'  	;5
		RETLW	b'01110111'  	;6
		RETLW	b'01001100'  	;7
		RETLW	b'01111111'  	;8
		RETLW	b'01101111'	;9

		RETURN
EKRANGOSTER	
		MOVFW	DIG1
		CALL	DONUSUM
		BCF	DIS10
		MOVWF	PORTB
		BSF	DIS1
		CALL 	DISGEC
		
		MOVFW	DIG10
		CALL 	DONUSUM
		BCF	DIS1
		MOVWF	PORTB
		BSF	DIS10
		CALL	DISGEC

		RETURN

BASLA		
		BSF	STATUS,RP0	;bank1 e geç
		MOVLW	b'0001000'	,giriş çıkış tanımlamaları
		MOVWF	TRISA
		MOVLW	b'1000000'
		MOVWF	TRISB
		BCF	STATUS,RP0
		MOVLW	d'9'		;iki registere de 9 değeri yükleniyor
		MOVWF	DIG1
		MOVWF	DIG10
		CALL	EKRANGOSTER
YAZDIR					;EKRANDA 67 yazdıracak program 
		MOVLW	d'7'		
		MOVWF	DIS1		
		MOVLW	d'6'			
		MOVWF	DIS10		
		
DONGU
		GOTO 	DONGU		
		END

XX_CİHAN_XX

Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

buiba

ADDWF   PCL;F  ----- komutunda sorun var(;)
ADDWF   PCL,F  ------ seklinde olacak

kostebek

Alıntı yapılan: "XX_CİHAN_XX"şema ?
Kusuruma bakmayın ya şema üzerinde değilde okulda Board'a kurdum sistemi Proteus da çizmedim şimdi ama RB6-RB5-----RB0 uçları aynı şekilde ortak katodlu 7 seg. disp. lerin üstten 1-2-4-5 ... şeklinde bacaklarına bağlı.

Transistörler yardımıyla da displayleri sırayla enable ediyorum. Şekilde benzeri ama orda 100ler basamağıda var ben sadece 10lar ve 1ler şeklinde yapağağım



kostebek

Alıntı yapılan: "buiba"ADDWF   PCL;F  ----- komutunda sorun var(;)
ADDWF   PCL,F  ------ seklinde olacak

Onları düzelttim ama hala sorun var :((

edit: mesela

EKRANGOSTER   
      MOVLW  B'01000011'
      ;CALL   DONUSUM
      BCF   DIS10
      MOVWF   PORTB
      BSF   DIS1
      CALL    DISGEC
      
      MOVLW  B'011110111'
      ;CALL    DONUSUM
      BCF   DIS1
      MOVWF   PORTB
      BSF   DIS10
      CALL   DISGEC

      RETURN



bu şekilde lookup tabe olmadan mesela 24-54 gibi önceden belli sayıları yazdırabiliroyrum rahatlıkla lookuptable da sorun var gibi ama :(

Logan

Bazen ADDWF PCL,F komutu, Call içerisinde tekrar Call ile çağırıldığı zaman istenmeyen olaylar meydana gelebiliyor, direk ana programdan çağırıp deneyebilir misin?
İmza.

kostebek

Alıntı yapılan: "Logan"Bazen ADDWF PCL,F komutu, Call içerisinde tekrar Call ile çağırıldığı zaman istenmeyen olaylar meydana gelebiliyor, direk ana programdan çağırıp deneyebilir misin?

Evet anladım demek istediğinizi. Okula gider gitmez deniyorum

kostebek

arkadaşlar sorun RAM deymiş.

SAY1   EQU   h'0F'         ;GECİKMEDE kullanılacak 
SAY2   EQU   h'10' 
SAY3   EQU   h'11' 
SAY4   EQU   h'13' 
DIG1   EQU   h'14'         ;1 'ler basamağı hafızası 
DIG10   EQU   h'15'


burdaki adreleri h'20' den başlatınca düzeliyor  ;)

kostebek

arkadaşlar nihayetinde bitirdim :) Sadece uzaktan kumanda kısmı kaldı birde sayıcıda gösterilen sayının Binary karşılığını PORTD ye gönderiyordum ordan DEMUX yardımıyla çıkış alıp lambaları sürmek :)

Bu arada bacaklar yetmediği için 16F877ye yükselttim pici.

Videosu burada:http://rapidshare.com/files/90520265/S5001735.AVI.html

Bu da fotoğrafı :)  15 gün önce PIC ile alakalı zerre kadar bişey bilmiyordum inşalah siz de beğenirsiniz.:)


XX_CİHAN_XX

Bukadar kısa sürede bukadar iyi ilerleme kaydetmene sevindim.Kurduğun devreden gördüğüm kadarıyla, pic işlerinde yeni olduğunuda düşünerekten küçük bir tavsiye yapmakta fayda var.
Devre kurarken(özellikle boarda) picin kristalini pice olabildiğince yakın takmalısın.mesela resimde picin yanı ve kristal pinlerinin önü boş iken kristali alttaki boarda koyup kablo ile uzatmışsın.Çok uzak değil gerçi ama sadece aklında bulunsun diye söylemek istedim.Kristali mümkün olan en kısa yoldan pice ulaştırmalısın.Bu devrede sorun olmasada ilerde başka devrelerde bunu göze almazsan sorun yaşayabilirsin.
Başarılar...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kostebek

Teşekkür ederim valla çabalamaya çalışıyorum biraz biraz. Bundan sonra pazartesi günü bi kaç sensör alıp AD dönüştürücü olayına girecem bakalım :)

Ondan sonra da PWM inşallah mis :) tabiki yardımlarınızla.

Bende teşekkür ederim yardımlarınız için