Assembly Programlama - OP_CODE Tasarımı

trkr7

Üye
Katılım
11 Ocak 2013
Mesajlar
1
Puanları
1
Yaş
34
İyi günler, üniversite öğrencisiyim. Final sınavımda çıkacak daha doğrusu final sınavımı oluşturacak iki sorum olacaktı. Tam olarak sorular olmasada sizden edineceğim bilgilerle bir şeyler yapabileceğimi umut ediyorum

Op-Code Tasarımı!
3 adet Veri transferi, 2 adet aritmetik lojik işlem, 1 adet dallanma, 1 adet zıplama içeren komut seti tasarlanacak. İndexli veya saklayıcılı adresleme olup olmadığını 1000 ve 1010 in aynı komuta karşılık gelip gelmediğini biz belirleyeceğiz. Açıkçası ne istendiğini tam olarak anlamışta değilim. Önce anlamama yardımcı olmanızıda istiyorum :)

Program!
Fotoğrafta örnek bir uygulama sorusu var. Programı bende var. Ama onu biraz revize edebilmem gerekiyor. Sorunda burda.

huvlb.png


Mesela;
1- Butona basılacak ama darbe bittikten sonra sinyal düşecek
2- Butona basıldıktan 10 darbe sonra düşecek
3- Butona basıldıktan 10 darbe sonra düşecek, 5 saniye sonra sinyal tekrar çalışacak.

Gibi revize edebilmem gerekiyor. Programın çalıştırılabilmesi çok önemli değil. Mantığını kavramak istiyorum açıkçası..

İlginize teşekkürler..
 
Kod:
;program yazmayı biliyorsanız istenen gayet basit birşey.

;Örneğin RB0 butonuna basıldığında RC0 (çıkışta) 1kHz kare dalga 
;üreten program

;BAŞLANGIÇTA KULLANILAN CİHAZ VE BACAKLARIN GİRİŞ ÇIKIŞ TANIMLAMALARI YAPILMALIDIR

KNT1	BTFSC	PORTB,0		;RB0 BUTONUNA BASILDI MI?
		GOTO    KNT1		;HAYIR, TEKRAR KONTROL ET
 							;EVET ARTIK BUTONA TEKRAR BASILANA
							;KADAR RC0 DA 1 kHz KARE DALGA ÜRETECEĞİZ
KNT2	BTFSC	PORTB,0		;RB0 BUTONUNA TEKRAR BASILDIMI?
		CALL	K_DALGA		;HAYIR ÖYLEYSE KARE DALGAYI BİR PERİYOT ÜRET
							;K_DALGA 1 kHz KARE DALGA ÜRETEN ALT PROGRAMIMIZ
							;EVET	RB0 BUTONUNA BASILDI,
;		BCF		PORTC,0		; KARE DALGA ÇIKIŞINI SIFIR YAP
							;BUNU YAPMAYA GEREK YOKTUR ÇÜNKÜ KARE DALGA ÜRETİCİ
							;RB0 I 0 YAPARAK DÖNER
		GOTO	KNT1		;KARE DALGANIN TEKRAR ÜRETİLİP ÜRETİLMEYECEĞİNİ
							; KONTROL ETMEK İÇİN İLK KONTROL NOKTASINA GİT

;------------------ALTPROGRAMLAR-------------------------------------------------				
K_DALGA
BSF		PORTC,0				;KARE DALGA ÇIKIŞINI 1 YAP
CALL	BEK_500_US			;500 MİKROSANAYİ BEKLEME ALTPROGRAMINI ÇAĞIR
BCF		PORTC,0				;KARE DALGA ÇIKIŞINI 0 YAP
CALL	BEK_500_US			;500 MİKROSANİYE BEKLE

RETURN						;ÇAĞRILDIĞIN YERİN BİR ALT SATIRINA DÖN

BEK_500_US					;500 US BEKLEME ALTPROGRAMI BUNU KENDİNİZ YAZARSINIZ
;.
;.
;.
RETURN

;----------------------------------------------------------------------------------

END


;ŞİMDİ EĞER BUTONA TEKRAR BASILDIKTAN 10 DARBE SONRA SİNYALİN KESİLMESİ İSTENİYORSA
;YAPACAĞIMIZ DÜZENLEME ŞUDUR PROGRAMIN BÜYÜK KISMINI AYNEN KULLANIYORUZ
;SADECE BUTONA TEKRAR BASILDIMI KONTROLÜNÜ DEĞİŞTİRECEĞİZ
;BUTONA TEKRAR BASILDIYSA KARE DALGA ÜRETİMİNİ DİREK SONLANDIRMAYACAĞIZ
;ARAYA BİR SAYAC EKLEYİP 10 PERİYOT DAHA KARE DALGA ÜRETTİRECEĞİZ

SAYAC	EQU		20H			;GİBİ BİR TANIMLAMA İLE KULLANILAN
							;DENETLEYİCİDE UYGUN YERE SAYAC TANIMLANMALIDIR

KNT1	BTFSC	PORTB,0		;RB0 BUTONUNA BASILDI MI?
		GOTO    KNT1		;HAYIR, TEKRAR KONTROL ET
 							;EVET ARTIK BUTONA TEKRAR BASILANA
							;KADAR RC0 DA 1 kHz KARE DALGA ÜRETECEĞİZ
KNT2	BTFSS	PORTB,0		;RB0 BUTONUNA TEKRAR BASILDIMI?
		GOTO	SON_10		;EVET,SON 10 U ÜRETMEYE GİT

		CALL	K_DALGA		;HAYIR ÖYLEYSE KARE DALGAYI BİR PERİYOT ÜRET
							;K_DALGA 1 kHz KARE DALGA ÜRETEN ALT PROGRAMIMIZ
		GOTO	KNT_2		;BUTONA TEKRAR BASILDIMI KONTROLÜNE GİT

SON_10
MOVLW	.10
MOVWF	SAYAC
KNT3	CALL	K_DALGA		;1 PERİYOT KARE DALGA ÜRET
		DECFSZ	SAYAC,F		;SAYACI BİR EKSİLT 0 OLDUMU KONTROL ET
		GOTO	KNT3		;HAYIR 0 OLMADI YANİ 10 PERİYOT TAMALANMADI
		;DEVAM				;EVET SAYAC=0 OLDU YANİ BUTONA BASILDIKTAN SONRA
							;10 PERİYOT KARE DALGA ÜRETİLDİ

		GOTO	KNT1		;KARE DALGANIN TEKRAR ÜRETİLİP ÜRETİLMEYECEĞİNİ
							; KONTROL ETMEK İÇİN İLK KONTROL NOKTASINA GİT

;ALTPROGRAMLAR OLACAK TABİKİ, YAZARSINIZ


;3. SORU İSE YİNE BENZER YÖNTEMLE HALLEDİLİR, YAPAMAZSANIZ YİNE YARDIMCI OLMAYA ÇALIŞIRIM
 
Son düzenleme:

Yeni mesajlar

Forum istatistikleri

Konular
129,702
Mesajlar
929,087
Kullanıcılar
452,406
Son üye
catarb

Yeni konular

Çevrimiçi üyeler

Geri
Üst