assemly yardım...

sn elek sizin yazmaya çalıştıklarınızı inceledim. şimdi BSFSS VE BSFCS komutları ile anaprogramdan bir alt programa dallandığımızda, BSFSS VE BSFCS komutlarını bu dallandığımız alt proğramda tekrar kullanıp bir dallanma daha yapabilirmiyiz.
egerki böyle bir imkanimiz varsa sorunumu çözdüm gibi.
saygılar.
 
sn berkanöztürk asm dilinin karmaşıklığından dolayı microchip firması picbasic dilini çıkarmış micro code studio ismli bir programda yazılıyor iki çeşit pic basic var birisi pic basic ikincisi pic basic proton isimli ,yazdığımız program derlendiğinde elimizde bir tane hex dosyası bir tane asm dosyası oluşuyor. hex dosyası aynı şekilde entegreye yazmak için kullanıyoruz
programı açtığımızda önce hangi entegreyi kullanacağımızı ayarlıyoruz sol üstteki panelde bir listbox var oradan, ardından yazmaya başlıyoruz programı.

en güzel özelliği write registeri ile uğraşmıorsunuz picin pinlerine isimler verebiliorsunuz komutlar akılda kalıcı ve asmye göre daha pratik komutları var

örneğin led yanacak 1 saniye sonra sönecek bunu asmde yapmak için kaç satır harcarsın? bank değiştireceksin sürekli uzun uzadıya döngüler düzenleyeceksin bu döngüler istediğin rakama ulaştımı diye habire kontrol ediceksin altı üstü led yakacaksın ama bayağı vakit kaybı pic basic ile yazalım hemen programda kullanılacak bütün satırları yazıyorum

TRISB=0 ;B PORTUNUN BÜTÜN PİNLERİ ÇIKIŞ

PORTB=0 ; B PORTUNUN BÜTÜN PİNLERİ SIFIR
BASLA: ; BASLA .İSİMLİ ETİKET GERİYE DÖNBİLMEK İÇİN KULLANIYORUZ
HIGH PORTB.1 ; PORTBNİN 1. BİTİNE 5 V VER YANİ 1
PAUSE 1000 ; BİR SANİYE BEKLE
LOW PORTB.1 ; PORTBNİN 1. BİTİNİ SIFIR YAP
PAUSE 1000 ; BİR SANİYE BEKLE
GOTO BASLA ;BASLA İSİMLİ ETİKETE GİT DÖNGÜNÜN SÜREKLİ SAĞLANMASI İÇİN
END ;PROGRAM SONU


HEPSİ BU KADAR


KOMUTLARIN LİSTESİNİ YAZIYORUM

TRISA A PORTUNUN GİRİŞ ÇIKIŞLARINI TANIMLAR TRISBDE OLUR TRISC DE OLUR 0 ÇIKIŞDIR 1 GİRİŞ

LOW SIFIR YAP
HIGH 1 YAP
IF...... THEN KOMUTLARI ŞARTLI DALLANMALAR İÇİN
END PROGRAM SONU
GOTO BELİRTİLEN ETİKETE GİT
GOSUB BERTİLEN ALT PROGRAMA GİT ORDA İŞİN BİTİNCE GERİ DÖN
RETURN ALT PROGRAMDAN ÇIKIŞ İÇİN
PAUSE PROGRAMI BEKLEMEYE ALIR MSDİR BİRİMİ 1000 MS 1 SNDİR
PAUSEUS BİRİMİ MİKROSANİYEDİR BEKLEMEYE ALIR
PWM BELİRTİLEN PİNDEN YAZILIMSAL PWM SİNYALİ ALIR
HPWM BELİRTİLEN PİNDEN (PİCİN MÜSAADE ETTİĞİ PİN) DONANIMSAL PWM ALIR
WHİLE....WEND İSTENEN KOŞULLAR SAĞLANANA KADAR BEKLEMEYDİ SANIRIM
ŞU AN AKLIMA GELENLER BUNLAR BAŞKA KOMUTLARDA VAR NETTEN YAZARSAN DAHADA DETAYLI BİLGİ ALIRSIN

KOLAY GELSİN
 
ben sana başka bir program önersem daha rahat edeceğini umuyorum programı mail adresine gönderiyorum ince ve problem olursa haber ver
 
sn ansez bu programı bende merak ettim en azından ismini söylerseniz size minettar kalırım sonuçta bende yeniyim ne kadar burada ahkam kessemde
 
Assembly konusu sahipsiz kalmış:)

Assembly ile bu sorunu halletmek çok kolay fakat biraz assembly dilinin gereği Pic'e hakim olmayı gerektiriyor. Fakat bu tip yüksek seviyeli diller ile işlemcinin çalışması anlaşılmıyor. Eğer illa yüksek seviyeli bir dil kullanılacaksa bence C kullanılmalıdır.

Pic'in Status register'ı aritmetik işlem sonuclarının durumlarını sürekli üzerinde tutar , eğer herhangi bir işlemin sonucu 0 olmuşsa bu Status ile anlaşılabilir. Yani assembly ile pic içinde olup biten herşey ilgili FLAG'lardan takip edilebilir. Fakat yüksek seviyeli dillerde bunlarla kullanıcı hiç uğraşmaz. Bu aslında pic'den beklentinize bağlıdır. Eğer basit bir kaç uygulama yapmak istiyorsanız led açıp kapama buton okuma vsvs assembly dili ile uğraşmanıza tabi ki gerek yoktur ama bu işten para kazanacaksınız yada mühendis iseniz assembly kesinliklikle bilinmelidir.

Burada PORTA tamamen test edilmek isteniyorssa bit işlem yapmaya gerek yoktur. Byte işlemler ile istenilen yapılabilir:

movlw .201
subwf PORTA
btfsc STATUS,ZERO
CALL Prog1
btfss STATUS,ZERO
CALL Prog2
...
...

Gibi basit bir kod düzeni ile PORTA'nın değerinin istenilen değerde olup olmadığı kontrol edilebilir. 20MHz bir kristal ile de yazacağın her komutun süresi 200ns olur.

16f serisi piclerde de stack seviyesi genellikle 8'dir . Yani 8 kez dallanma yapabilirsiniz. Bunu aştığınzda program alt programdan ana programa dönerken geleceği yeri bulamaz.
 
arkadaşlar byte karşılaştırma yapmak istiyorsanız bunun yöntemi xorlw yada xorwf komutlarıdır sonucu ise cary flagı kontrol ederek alırsınız bu işlem 18 f serisnde daha kolaydır yanlızca cpsfq komutu ile kontrol yapılabilir
 
cevap veren sayın arkadaşların hepsine sonsuz teşekkürler.
ben pic işine yeni başladım, gerçekten çok zevli bir uğraş.kitaplardan ve dökümanlardan assmyler komutlarını inceliyorum. bsfcs ve bsfss komutlarının çalışma mantığını gayet güzel çözdüm. ana programdan bit durumuna göre alt programa dallanıp, çok güzel programlar yaptım. ancak bit test ederek alt programa dallanma işini, byte test ederek yapmayı henüz tam çöze bilmiş değilim.
yukarda sn erdi001 dediğgi gibi, xorwf ve xorlw türü komutlarla or,veya, ve gibi işlemler yapılıyor. bunu alt programlara dallanmak için nasıl kullanacağımı henüz çözemedim.

mesela çıkışları kontrol etmek için tek biti işlem yapacaksam; bsf veya bcf kullanıyorum.
tüm porta işlem yapacaksam, movlw b'00011000' sonra movwf portb yapıyorum.
aynı mantıkla giriş portunuda bit olarak değilde, tüm portu degerlendirip alt programa dallanmak istiyorum.
saygılar
 
pic olarak hangi pici kullandığın önemli 16 f serisi ise xorlw yada xorwf kullınrsan btfsc status,c yada btfsc status,z diye cary yada zero flagı kontrol ederek dallanma yapman gerekir 18 f serisinde ise dogrudan esit yada büyük küçük sorgusu yaparak dallanma yapabilirsin kolay gelsin
 

Forum istatistikleri

Konular
128,296
Mesajlar
916,519
Kullanıcılar
450,129
Son üye
kaanoguz

Yeni konular

Geri
Üst