Lütfen yardım eder misiniz?

Başlatan kılıckaya, 07 Haziran 2012, 23:13:26

kılıckaya

Ete Hocam saygılar sunarım.Herkese yardım ettiğiniz gibi bana da yardım edeceğinizi düşünerek içinden çıkamadığım bir konu hakkında yardım etmenizi rica ediyorum. PBP de bir yazılımı tamamlamaya çalışıyorum ancak bazı yerlerde takıldım kaldım.
Programın çalışma mantığını kısaca anlatayım:PBP yazılımı 16F876A için olacak.3 adet butonumuz var. Program ilk çalışmaya başladığında W registerinde herhangibir yere "1" sayısını kaydedecek.Daha sonra 1.butona basılırsa ve W registerine kaydetmiş olduğumuz sayı "2" ise Portc.0 lojik1 olacak 100 ms bekleyecek,Portc.0 lojik 0 olacak,100 ms bekleyecek ve son olarak w registerine programın ilk başında kaydetmiş olduğumuz sayı ne olursa olsun bu sayıyı "1" olarak değiştirecek.
Aynı şekilde 2.butona basılırsa ve W registerine kaydetmiş olduğumuz sayı "3" ise Portc.1 lojik1 olacak 100 ms bekleyecek,Portc.1 lojik 0 olacak,100 ms bekleyecek ve son olarak w registerine programın ilk başında kaydetmiş olduğumuz sayı ne olursa olsun bu sayıyı "2" olarak değiştirecek.

3.butona basılırsa ve W registerine kaydetmiş olduğumuz sayı "1" ise Portc.2 lojik1 olacak 100 ms bekleyecek,Portc.2 lojik 0 olacak,100 ms bekleyecek ve son olarak w registerine programın ilk başında kaydetmiş olduğumuz sayı ne olursa olsun bu sayıyı "3" olarak değiştirecek.

Ekteki dosyada elimden geldiğince programı yazdım.Takıldığım yerler şunlar: Başlangıçta w registerine "1" kaydetmesi,daha sonra basılı buton şartlarına göre w registerindeki sayıyı okuyup şart ifadesinde ilgili şekilde yazamıyorum.Son olarak da ilgili c portu lojik 1 olduktan sonra w registerine başlangıçta kaydettiğimiz sayıyı nasıl değiştireceğimi bilemiyorum.
Tüm araştırmalarıma rağmen bir türlü nasıl yapabileceğimi bulamadım.Ekteki PBP yazılımında nasıl yazılacağını bilemediğim yerleri kusura bakmazsanız Türkçe ifadelerle yazdım ve ne yapmaya çalıştığımın daha iyi anlaşılabilmesi için karşılarında açıklama satırında belirttim.Aslında yazılımda şart ifadeleri daha çok ama ben  sizin zamanınızı fazlaca almamak için en sade biçime getirdim.Şu andaki durum için tamamlanırsa diğer şart ifadelerini sizin belirteceğiniz şekilde ben düzenleyeceğim.Yardımcı olursanız minnettar kalacağım.Şimdiden teşekkür ederim.

zoptrik

w=1 iken portc.0ı 100ms lojik 1 yaptıktan sonra w=2 dediğiniz zaman dediğiniz işlemleri yapar gibi geliyor ama ben soruyu tam anlayamadım galiba
"w'ye önceden kaydedilmiş olan sayıyı sil ve 1 sayısını kaydet" yerine w=1 diğerleri için de w=2 ve w=3 yazınca istediğiniz oluyorsa cevabınız bu herhalde
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

wishes

#2
programın amacını tam olarak anlayamadım. bir örnekle açıklayablir misin? hangi butona basınca o led 100 ms yanıp sönecek mi yoksa sürekli ve hızlıca yürüyen ışık devresi mi bu.


anladığım kadarıyla devreni düzenledim ve şu sonuçlar çıktı:
- buton3'e basmadan devre çalışmıyor. buton3'e basınca led 3 100 mililsaniye yanıp sönüyor.
-ondan sonra buton2'ye basmadan devre çalışmıyor. buton2'ye basınca led2 sürekli yanıyor.
- diğerlerini yakmak için sırasıyla buton1, buton3 ve buton2'ya basmak gerekiyor. buton 2 diğerlerinin reseti gibi çalışıyor.

muhtemelen yanlış anladım ya da yanlış kodladım. ayrıntı verirsen iyi olur.

ete

#3
Kılıckaya,
Aslında işin büyük kısmını yapmışsın. Bir iki eksiğin kalmış. Programın tamamlanmış hali aşağıdadır.
Bir registere değer atamak için register=deger demen yeterlidir. Bu işlem ile registerin eski değeri otomatik silinir yenisi verilir.
W=1 şeklindeki bir kullanım ile W registerinde önceden hangi değer olduğu önemli olmaksızın yenisi 1 olarak verilmiş olur.
W=1 iken yeniden W=3 dersen 1 silinip yerine 3 yerleştirilmiş olacaktır.
Programın gerisinde pek kusur yok. Sigorta ayarların eksik idi. Bir de sigorta ayarlarını mutlaka büyük harf ile yazın.
Simulasyonda denemek için işlmeci üzerinde sağ tıkla ve sonra sol tıkla ve açılan pencerede işlemci frekansını 1Mhz yazan yere 4Mhz yazarak değiştir.
Program File kutusuna tıklayarak oluşturulan hex dosyasının yerini göster. Sonra play tuşuna (alltta solda) basarak simulasyonu çalıştır.

Ete

' DENEME
'  UYGULAMASI
'**********************  Tanımlama Blokları ******************

@ DEVICE PIC16F876A
@ DEVICE PIC16F876A, WDT_Off
@ DEVICE PIC16F876A, PWRT_ON
@ DEVICE PIC16F876A, BOD_ON
@ DEVICE PIC16F876A, PROTECT_OFF
@ DEVICE PIC16F876A, LVP_OFF
@ DEVICE PIC16F876A, CPD_OFF
@ DEVICE PIC16F876A, XT_OSC

PCON=%00000000
define osc 4
cmcon=7
ADCON1 = 7 ' dijital giriş çıkış olarak ayarla
option_reg=0        'PORTB Pulluplar etkin.
                    '(Pullup=Portb' nin tüm uçlarını +5V a çekmektir.lojik 1)
TRISB=$FF         'PORTB  giriş olarak ayarlandı
TRISC=%00000000     'PORTC Tüm uçlar çıkış olarak ayarlandı
portc=0            'PORTC yi 0 yap

' ***************DEĞİŞKEN Tanımlama Blokları ****************
SYMBOL BUTON1=PORTB.0
SYMBOL BUTON2=PORTB.1
SYMBOL BUTON3=PORTB.2
W  VAR BYTE
clear
pause 300

W=1 'Registerine 1 sayısını kaydet
   
'**********************  Ana Program ************************
DONGU:
IF w=2 and BUTON1=0 THEN gosub but1 'W Registerine kaydedilen sayı okunacak,w=2 ise ve Buton1=0 ise but1 alt programına gidilecek
IF w=3 AND BUTON2=0 THEN gosub but2 'W Registerine kaydedilen sayı okunacak,w=3 ise ve Buton1=0 ise but2 alt programına gidilecek
IF W=1 AND BUTON3=0 THEN gosub but3 'W Registerine kaydedilen sayı okunacak,w=1 ise ve Buton1=0 ise but3 alt programına gidilecek
GOTO DONGU


but1:
PORTC=%00000001
pause 100
portc=%00000000
pause 100
w=1'ye önceden kaydedilmiş olan sayıyı sil ve 1 sayısını kaydet
return

but2:
PORTC=%00000010
pause 100
portc=%00000000
pause 100
w=2'ye önceden kaydedilmiş olan sayıyı sil ve 2 sayısını kaydet
return

but3:
PORTC=%00000100
pause 100
portc=%00000000
pause 100
w=3'ye önceden kaydedilmiş olan sayıyı sil ve 3 sayısını kaydet
return

end

kılıckaya

#4
Ete Hocam ve diğer arkadaşlarım çok teşekkür ederim.Şu an şehir dışındayım.Öğleden sonra döndüğümde dediklerinizi bir bir uygulayacağım.Ellerinize sağlık.

kılıckaya

Dediğiniz gibi yaptım,oldu.Teşekkürler.

Powered by EzPortal