PIC16F877 microcode studio kod yazmama yardımcı olabilir misiniz?

portoko1

Üye
Katılım
27 Ara 2023
Mesajlar
3
Puanları
1
Bir PIC16F877 mikrodenetleyicisinde A1 butonuna 10 defa basıldıktan 5 saniye sonra B4 e bağlı olan LED 4 saniye boyunca yansın. A2 butonuna 20 defa basıldıktan 10 saniye sonra BS e bağlı olan LED 8 saniye boyunca yansın. Bu çıkışı verecek program Microcode studio da nasıl yazılmalıdır
Yardımcı olur musunuz? :)
 
Öncelikle merhaba Microcode studio programında kod yazıp derleyip ve çalışır şekilde bir mikro denetleyiciye yüklediniz mi ?

Burada kimseye hiç kimsenin hazır kodu al bu sorunun cevabı budur deyip vereceğini düşünmüyorum. Şahsımca da verilmemesi gerektiğine inanıyorum.

Aslında soruyu bu kodun mantığı nasıl olmalıdır yada bir if then endif komutu nasıl çalışır şeklinde soracak kişilere anlayıncaya kadar anlatan değerli hocalarımız ve arkadaşlarımız meslek erbabı insanlarımız vardır.

Bir portun bir bitine bağlı butona 10 defa basıldığında demişsiniz...

Şimdi bu portun bu bitine bağlı buton pull-up olarak mı bağlı yoksa pull-down olarak mı bağlı bu bile belli değil iken nasıl bir kod örneği yapılabilir ?

Ama ben olsam bir register oluştururum örneğin porta_sayar adında ve porta.0 a her bastığımda bu registerin içini 1 arttırıp her seferinde porta_sayar = 10 mu diye kontrol ederim ardından ne kadar beklenecek ise pause 1000 * beklenecek saniye şeklinde istediğim gibi kodu oluştururum :D
 
Öncelikle merhaba Microcode studio programında kod yazıp derleyip ve çalışır şekilde bir mikro denetleyiciye yüklediniz mi ?

Burada kimseye hiç kimsenin hazır kodu al bu sorunun cevabı budur deyip vereceğini düşünmüyorum. Şahsımca da verilmemesi gerektiğine inanıyorum.

Aslında soruyu bu kodun mantığı nasıl olmalıdır yada bir if then endif komutu nasıl çalışır şeklinde soracak kişilere anlayıncaya kadar anlatan değerli hocalarımız ve arkadaşlarımız meslek erbabı insanlarımız vardır.

Bir portun bir bitine bağlı butona 10 defa basıldığında demişsiniz...

Şimdi bu portun bu bitine bağlı buton pull-up olarak mı bağlı yoksa pull-down olarak mı bağlı bu bile belli değil iken nasıl bir kod örneği yapılabilir ?

Ama ben olsam bir register oluştururum örneğin porta_sayar adında ve porta.0 a her bastığımda bu registerin içini 1 arttırıp her seferinde porta_sayar = 10 mu diye kontrol ederim ardından ne kadar beklenecek ise pause 1000 * beklenecek saniye şeklinde istediğim gibi kodu oluştururum :D
Hocamızın bize verdiği soru aynen bu şekilde butonlar nasıl bağlı onu söylemedi sadece kodu yazmamda yardımcı olmanızı istiyorum bu konuda pek iyi değilim.
 
Hocamızın bize verdiği soru aynen bu şekilde butonlar nasıl bağlı onu söylemedi sadece kodu yazmamda yardımcı olmanızı istiyorum bu konuda pek iyi değilim.

Umarım faydası olur istediğiniz yazılım hakkında biraz video var :

https://www.youtube.com/@IOAkademi/videos

https://etepic.com/index.php?board=7.0

Önce programı kurup ardından biraz denemeler yapıp takıldığınız yerleri sorarsanız daha çok faydası olacağını düşünüyorum.
 
TRISA=%000110
TRISB=0
A1 VAR PORTA.1
A2 VAR PORTA.2
X VAR BYTE
PORTB=0
X=0
main:
IF A1=0 THEN
WHILE A1=0
WEND
X=X+1
ENDIF
IF X=10 THEN
PAUSE 5000
HIGH PORTB.4
PAUSE 4000
LOW PORTB.4
ENDIF
IF A2=0 THEN
WHILE A2=0
WEND
X=X+1
ENDIF
IF X=20 THEN
PAUSE 10000
HIGH PORTB.5
PAUSE 8000
LOW PORTB.5
ENDIF



böyle bi kod denedim olur mu acaba emin değilim
Öncelikle merhaba Microcode studio programında kod yazıp derleyip ve çalışır şekilde bir mikro denetleyiciye yüklediniz mi ?

Burada kimseye hiç kimsenin hazır kodu al bu sorunun cevabı budur deyip vereceğini düşünmüyorum. Şahsımca da verilmemesi gerektiğine inanıyorum.

Aslında soruyu bu kodun mantığı nasıl olmalıdır yada bir if then endif komutu nasıl çalışır şeklinde soracak kişilere anlayıncaya kadar anlatan değerli hocalarımız ve arkadaşlarımız meslek erbabı insanlarımız vardır.

Bir portun bir bitine bağlı butona 10 defa basıldığında demişsiniz...

Şimdi bu portun bu bitine bağlı buton pull-up olarak mı bağlı yoksa pull-down olarak mı bağlı bu bile belli değil iken nasıl bir kod örneği yapılabilir ?

Ama ben olsam bir register oluştururum örneğin porta_sayar adında ve porta.0 a her bastığımda bu registerin içini 1 arttırıp her seferinde porta_sayar = 10 mu diye kontrol ederim ardından ne kadar beklenecek ise pause 1000 * beklenecek saniye şeklinde istediğim gibi kodu oluştururum :D
TRISA=%000110
TRISB=0
A1 VAR PORTA.1
A2 VAR PORTA.2
X VAR BYTE
PORTB=0
X=0
main:
IF A1=0 THEN
WHILE A1=0
WEND
X=X+1
ENDIF
IF X=10 THEN
PAUSE 5000
HIGH PORTB.4
PAUSE 4000
LOW PORTB.4
ENDIF
IF A2=0 THEN
WHILE A2=0
WEND
X=X+1
ENDIF
IF X=20 THEN
PAUSE 10000
HIGH PORTB.5
PAUSE 8000
LOW PORTB.5
ENDIF

bu şekilde olması lazım doğrumudur
 
Merhabalar. Öncelikle
A1 VAR PORTA.1
A2 VAR PORTA.2

Komutlarını symbol kullanarak yazarsanız daha düzgün olacaktır....
SYMBOL TUS= PORTB.0 ‘ PortB.0 pinine sembol ismi olarak TUS adı verildi.

Şeklinde yazılması gereklidir.

Ayrıca pic 16f877A için analog olan portA pinlerinin hepsini dijitale çevirmezseniz butonlarınız çalışmayacaktır, bunun için ise :
Adcon1 = 0x07 'komutunu kullanabilirsiniz.
Eğer 16f628a kullanacaksanız CMCON = 0x07 ' komutunu kullanmalısınız bu adcon ve cmcon registerleri ile ilgili detaylı bilgiyi datasheetlerinde bulabilirsiniz.

En güzel olay ise yazdığınız programı bir similasyon programı ile simule edebilirsiniz. Program olarak genelde çok tercih edilen PROTEUS programıdır bu program iki parçadır biri baskı devre projesi çizmek için ares diğeri similasyon için isis olarak kurulur.

Ayrıca Yazılım kısmında eksik olan bir şey daha var tris registerlerini tanımlamışsınız ama ilk açılışta bütün çıkışların sıfır olmasını sağlamak için portb=0 şeklinde bir komut kullanmanız gerekir.

Son olarak gözüme çarpan olay ise X diye bir tane değişken tanımlamışsınız lakin porta.1 de porta.2 de aynı X adındaki registere etki etmekte. dolayısı ile A1 e 10 defa basıp ardından A2 ye de 20 kere basarsanız X registeri otomatik olarak 30 olacak ve program istemediğiniz sonuçları verecektir.

Daha detay gerekirse örneğin 2 tane byte tibinde X ve Y adında değişken tanımlayın ve bu değişkenlerin max olması gereken sayı kaç ise o sayıdan büyük olduğu zaman değişkeni sıfırlayın.

If x= >20 then
x=0
endif

gibi

Bence Proteus isis hakkında da biraz video izledikten sonra aaaaaaa ne kadar kolaymış bile diyeceksiniz.
 
Merhabalar. Öncelikle
A1 VAR PORTA.1
A2 VAR PORTA.2

Komutlarını symbol kullanarak yazarsanız daha düzgün olacaktır....
SYMBOL TUS= PORTB.0 ‘ PortB.0 pinine sembol ismi olarak TUS adı verildi.

Şeklinde yazılması gereklidir.

Ayrıca pic 16f877A için analog olan portA pinlerinin hepsini dijitale çevirmezseniz butonlarınız çalışmayacaktır, bunun için ise :
Adcon1 = 0x07 'komutunu kullanabilirsiniz.
Eğer 16f628a kullanacaksanız CMCON = 0x07 ' komutunu kullanmalısınız bu adcon ve cmcon registerleri ile ilgili detaylı bilgiyi datasheetlerinde bulabilirsiniz.

En güzel olay ise yazdığınız programı bir similasyon programı ile simule edebilirsiniz. Program olarak genelde çok tercih edilen PROTEUS programıdır bu program iki parçadır biri baskı devre projesi çizmek için ares diğeri similasyon için isis olarak kurulur.

Ayrıca Yazılım kısmında eksik olan bir şey daha var tris registerlerini tanımlamışsınız ama ilk açılışta bütün çıkışların sıfır olmasını sağlamak için portb=0 şeklinde bir komut kullanmanız gerekir.

Son olarak gözüme çarpan olay ise X diye bir tane değişken tanımlamışsınız lakin porta.1 de porta.2 de aynı X adındaki registere etki etmekte. dolayısı ile A1 e 10 defa basıp ardından A2 ye de 20 kere basarsanız X registeri otomatik olarak 30 olacak ve program istemediğiniz sonuçları verecektir.

Daha detay gerekirse örneğin 2 tane byte tibinde X ve Y adında değişken tanımlayın ve bu değişkenlerin max olması gereken sayı kaç ise o sayıdan büyük olduğu zaman değişkeni sıfırlayın.

If x= >20 then
x=0
endif

gibi

Bence Proteus isis hakkında da biraz video izledikten sonra aaaaaaa ne kadar kolaymış bile diyeceksiniz.
proteusta simüle ettim fakat kodun yanlış olduğunu anladım.Dedikleriniz doğrultusunda kodu tekrar derleyeceğim.Cevabınız için teşekkür ederim
 

Forum istatistikleri

Konular
129,833
Mesajlar
930,571
Kullanıcılar
452,658
Son üye
yılmaz_yılan

Yeni konular

Geri
Üst