pic16f84 asm kodu hakkında yardım

Başlatan cafersert, 18 Kasım 2010, 15:00:51

cafersert

Öncelikle Merhabalar...Mübarek Kurban Bayramınızı kutlarım.
Konuyu yanlış yere açtıysam özür dilerim.

Forumda yeniyim meslek y.o. elektrik bölümü 2. sınıf öğrencisiyim elektroniğe meraklıyım ve bu aralar piclerede çok merak saldım. Okulda ve kendi araştırmalarımda öğrendiğim kadarıyla komutları az çok öğrendim. Sizin gibi üstadlar sayesinde dahada iyi öğreneceğimden hiç kuşkum yok.

Elimde isis ile çizilmiş P16F84 kullanılmış bir devre var. PORTA ların hepsi giriş ve hepsinde birer buton var. Bu butonlardan herhangi 2 si ve daha çok butona basıldığında  RB0 a bağlı led çıkış verecek tek butona kaldığında çıkış kesilecek. Bu devrenin ASM kodunu yapmaya çalıştım ama henüz acemi olduğum için tam beceremedim siz üstadlardan ricam bu ASM kodunda bana yardımcı olmanızdır.Birde sizlerden ricam kodların karşısına açıklamalarınıda yazarsanız sevinirim.

Benim yazdığım Kod aşağıdaki gibidir.


;========18/11/2010======Persembe================
   LIST   P=16F84
   INCLUDE   "P16F84.INC"
   __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_OFF &_XT_OSC
   CLRF   PORTB
   BSF      STATUS,5
   MOVLW   h'FF'
   MOVWF   TRISA
   CLRF   TRISB
   BCF      STATUS,5
TEST_PORTA
   MOVLW   b'00011100'
   XORWF   PORTA,W
   BTFSS   STATUS,2
   GOTO   TEST_PORTA
YAK   MOVLW   h'01'
   MOVWF   PORTB
DONGU
   GOTO   DONGU
   END


Devre

http://hotfile.com/dl/83359189/07b6ca3/1.DSN.html



frkcn

#1
TEST_PORT A  kısmını bu şekilde değiştrir. programı dar bir zamanda asm yi hatırladığım kadarı ile yazdım kontrol etmedim hata çıkabilir düzeltilmesi gerekebilir.

TEST_PORTA
   MOVLW   b'00011110'  ;  W REGİNE PORT A NIN O. BİTİNE BAĞLI BUTONU TEST ETMEK İÇİN GEREKLİ OLAN BİLGİYİ YÜKLÜYORUZ
   XORWF   PORTA,F          ;  BUTONA BASINCA PORTA.0 DA OKUNAN BİLGİ LOJİK "0" OLUR
   BTFSS   STATUS,2        ; BURADA PORTA NIN İÇERİĞİNİN AYNI OLUP OLMADIĞI KONTROL EDİLİYOR
   GOTO   SONDUR          ; AYNIYSA TEK BUTONA BASILMIŞ DEMEKTİR LED SÖNDÜRÜLÜR.
MOVLW   b'00011101'    ; AYNI DEĞİLSE 1. BİTE BAĞLI BUTONU KONTROL ETMEK İÇİN DEVAM EDİLİR
   XORWF   PORTA,F
   BTFSS   STATUS,2
   GOTO   SONDUR
MOVLW   b'00011011'
   XORWF   PORTA,F
   BTFSS   STATUS,2
   GOTO   SONDUR
MOVLW   b'00010111'
   XORWF   PORTA,F
   BTFSS   STATUS,2
   GOTO   SONDUR
MOVLW   b'00001111'
   XORWF   PORTA,F
   BTFSS   STATUS,2
   GOTO   SONDUR
MOVLW   b'00011111'
   XORWF   PORTA,F
   BTFSS   STATUS,2
   GOTO   SONDUR 
MOVLW   h'01'  ; BURAYA KADAR GELİNİRSE FARKLI İKİ BUTONA BASILI DEMEKTİR VE LED YANAR
   MOVWF   PORTB
   GOTO   TEST_PORTA   ; PROGRAM SÜREKLİ OLARAK BUTONLARI KONTROL EDER. SEN BİR SEFER KONTROL ETSİN İSTİYORSAN KENDİ PROGRAMINDAKİ
                                      ;GİBİ DONGU GOTO DONGU YAZARSIN
SONDUR
MOVLW   h'00'
MOVWF   PORTB
GOTO TEST_PORTA
   END
Bugün ömrümün geride kalan son günü...

cafersert

İlgin için teşekkür ederim evet dediğin gibi hata çıktı kontrol ediyorum anladığım kadarıyla teşekkürler..

frkcn

Eğer hala ihtiyacın var ise programı bu şekilde düzeltip çalıştırabilirsin.. Diğer mesajı acele yazdığım için yanlış olmuş [ aslında asm yi unutmuşum :) ]

LIST   	P=16F84
   	INCLUDE   "P16F84.INC"
   	__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_OFF &_XT_OSC
   	CLRF   		PORTB
   	BSF      	STATUS,5
   	CLRF   		TRISB
   	MOVLW   	h'FF'
   	MOVWF   	TRISA
   	BCF      	STATUS,5
	
TEST_PORTA
   	MOVLW   	b'00011110' 	;W REGİNE PORT A NIN O. BİTİNE BAĞLI BUTONU TEST ETMEK İÇİN GEREKLİ OLAN İLK BİLGİYİ YÜKLÜYORUZ
   	XORWF   	PORTA,F      	;BUTONA BASINCA PORTA.0 DA OKUNAN BİLGİ LOJİK "0" OLUR
   	BTFSS   	STATUS,2     	;BURADA PORTA NIN İÇERİĞİNİN AYNI OLUP OLMADIĞI KONTROL EDİLİYOR
   	GOTO   		$+2       	;AYNI DEĞİLSE 2 ALT SATIRDAN DEVAM EDİLİR
	GOTO		SONDUR		;AYNIYSA TEK BUTONA BASILMIŞ DEMEKTİR LED SÖNDÜRÜLÜR
	MOVLW   	b'00011101'  	;W REGİNE PORT A NIN 1. BİTİNE BAĞLI BUTONU TEST ETMEK İÇİN GEREKLİ OLAN İKİNCİ BİLGİYİ YÜKLÜYORUZ
   	XORWF   	PORTA,F
   	BTFSS   	STATUS,2
   	GOTO   		$+2       	
	GOTO		SONDUR
	MOVLW   	b'00011011'
   	XORWF   	PORTA,F
   	BTFSS   	STATUS,2
   	GOTO   		$+2       	
	GOTO		SONDUR
	MOVLW   	b'00010111'
   	XORWF   	PORTA,F
   	BTFSS   	STATUS,2
   	GOTO   		$+2       	
	GOTO		SONDUR
	MOVLW   	b'00001111'
   	XORWF   	PORTA,F
   	BTFSS   	STATUS,2
   	GOTO   		$+2       	
	GOTO		SONDUR
	MOVLW   	b'00011111'
   	XORWF   	PORTA,F
   	BTFSS   	STATUS,2
        GOTO		$+2
	GOTO		SONDUR
YAK
	MOVLW   	h'01'  		
   	MOVWF   	PORTB
   	GOTO   		TEST_PORTA
SONDUR
   	CLRF		PORTB
	GOTO		TEST_PORTA	
   	END


buda hex dosyası

:10000000860183168601FF30850083121E30850627
:10001000031D0B2827281D308506031D10282728BF
:100020001B308506031D1528272817308506031D5C
:100030001A2827280F308506031D1F2827281F3060
:100040008506031D242827280130860006288601FE
:02005000062880
:02400E00F93F78
:00000001FF
Bugün ömrümün geride kalan son günü...

cafersert

Teşekkür ederim Allah razı olsun.