Klavye Kodları Hakkında Bir Sorun

Başlatan Tagli, 18 Ekim 2008, 22:25:19

Tagli

RB0 kesmesini kullanarak Klavye - LCD uygulaması yazmaya çalışıyorum ama bir türlü klavyeden gelen değerleri tutturamadım. Program daha tamamlanmadı ama denemek için gelen kodları hex olarak LCD'ye bastırıyorum, internette gördüklerimi tutmuyor. Kolaylık olsun diye sadece ilk basıştaki kodu bastırıyorum, LCD'ye yazdırma kesme programında helledildiği için bu sürede gelen diğer kodlar umursanmıyor (düğmenin serbest kalmasından kaynaklanan kodlar).

2 byte'lık değer yazdırıyorum ekrana. İlk basılan byte'ı kontrol amaçlı koydum. Gelen 11 bitin start, parity ve stop bitleri çeşitli kaydırma işlemleriyle bu büyük byte'ın büyük 3 bitine oturuyor. Küçük byte da normalde okumam gereken kod. Ama bu kod internette gördüklerimi tutmuyor. Gelen verinin kaydırılmasında hata yok gibi çünkü gelen verinin start, parity ve stop bitleri tutuyor.

Mesela; A:"2038" B:"204C" C:"6084" D:"20C4" E:"6024" geliyor.
Ama normalde küçük byte'lardaki değerlerin sırasıyla 1C 32 21 23 24 olması gerekiyor.

Programın ilgili bölümü:
KESME
	movwf	wyedek		;W'nin yedeği saklandı
	movf	STATUS,W		;STATUS W'ye alındı
	movwf	syedek		;STATUS'un yedeği saklandı

	goto	KLAVYE_OKU		;Klavye okuma bölümüne gidiliyor

KESME_0
	bcf	INTCON,INTF	;RB0 kesme bayrağı indirildi
	movf	syedek,W		;Yedeklenmiş STATUS W'ye alındı
	movwf	STATUS		;Eski STATUS yerine geri yüklendi
	movf	wyedek,W		;Eski W yerine geri yüklendi
	retfie			;Kesmeden geri dönülüyor

KLAVYE_OKU
	banksel	rsr		;Bank 0'a geçildi
	bcf	rsr,0		;RSR<0> temizlendi
	btfsc	PORTC,0		;Veri 1 mi?
	bsf	rsr,0		;1 ise RSR<0> da 1 olur (değilse 0 kalır)
	rlf	rsr,F		;RSR sola kaydırılıyor
	rlf	rsr1,F		;RSR1 de sola kaydırılıyor
	decfsz	kbsayac,F		;Son bit alınmış mı?
	goto	KESME_0		;Alınmadıysa normal olarak geri dön
	
	rrf	rsr1,F		;RSR1 sağa kaydırılıyor
	rrf	rsr,F		;RSR sağa kaydırılıyor
	rrf	rsr1,F		;RSR1 sağa kaydırılıyor
	rrf	rsr,F		;RSR sağa kaydırılıyor
	rrf	rsr1,F		;RSR1 sağa kaydırılıyor
	rrf	rsr,F		;RSR sağa kaydırılıyor
	rrf	rsr1,F		;RSR1 sağa kaydırılıyor
	rrf	rsr1,F		;RSR1 sağa kaydırılıyor
	call	RSR1_YAZ		;Kontrol değeri ekrana yazdırılıyor
	call	RSR_YAZ		;Tarama değeri ekrana yazdırılıyor
	movlw	d'11'		;W'ye 11 atıldı
	movwf	kbsayac		;Sonraki okuma için bit sayacı ayarlandı
	goto	KESME_0		;Kesme parçasına geri dönülüyor


Acaba nerde hata yapıyorum? Yardımcı olursanız sevinirim.
Gökçe Tağlıoğlu

Tagli

Gerçekten de saçmalamışım.  :oops:  Kaydırma işlemini ters yapmışım, yeni farkettim. Rahatsız ettiğim için özür dilerim...
Gökçe Tağlıoğlu