avatar_emrecatal00

12f675 buton

Başlatan emrecatal00, 01 Mart 2016, 09:45:08

emrecatal00

Herkese merhaba! sorunum butonla alakalı
Örnek= buton(a) ya 1 kere  basıldığı zaman animasyon_1 de ise animasyon_1 i çalıştırıp bitirecek , butonb ' ye 1 kez  basıldığında ise animasyon_2 hazırda olacak birdaha buton(a) ya basıldığı zaman animasyon_2 yi çalıştıracak ve bitirecek.
Butonlama olayını tam yapamadım kafam iyice bir karıştı yardımcı olursanız sevinirim..
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT;@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF GPIO=0 ANSEL=0 cmcon=7 SYMBOL BUTONB=GPIO.5SYMBOL BUTONA=GPIO.4SIRA VAR BYTE SIRA=0CALISTIR:IF BUTON2=0 THEN BASLA:BASLA:IF BUTON=0 THENSIRA=SIRA+1IF SIRA>3 THEN SIRA=0WHILE BUTON=0:WENDENDIF SELECT CASE SIRA CASE 0goto animasyon_1CASE 1 goto animasyon_2case 2goto animasyon_3end select goto CALISTIR    animasyon_1:PAUSE 210TRISIO=%111110pause 170TRISIO=%111111PAUSE 170 TRISIO=%111110PAUSE 170TRISIO=%111111PAUSE 170 TRISIO=%111010PAUSE 170TRISIO=%111111PAUSE 320TRISIO=%111010PAUSE 170TRISIO=%111111PAUSE 170TRISIO=%111010PAUSE 170TRISIO=%111111PAUSE 170GOTO CALISTIR animasyon_2TRISIO=%111010PAUSE 50TRISIO=%111111PAUSE 25 goto CALISTIR animasyon_3TRISIO=%111110PAUSE 120TRISIO=%111111PAUSE 120TRISIO=%111011PAUSE 80TRISIO=%111111PAUSE 80TRISIO=%111110PAUSE 120TRISIO=%111111PAUSE 120TRISIO=%111110PAUSE 120TRISIO=%111111PAUSE 120TRISIO=%111011PAUSE 80TRISIO=%111111PAUSE 80TRISIO=%111010PAUSE 60TRISIO=%111111PAUSE 60 goto CALISTIR  end

ersangundogdu

Kod tag nasıl yapılıyor bilemediğim için zipli olarak gönderdim. Bir dener misin?

ete

#2
12F675 de porta değer vermek için GPIO registeri kullanılır. Emre TRISIO yu kullanmış ersan da aynı yanlışı tekrarlamış.
TRIS registeri giriş çıkış pinlerini ayarlayan registerdir PORT registeri değildir. Bunu unutmayın.
Programın başına ;
TRISIO=%00110000  komutu eklenmeli. Bu komut ButonA ile ButonB pinlerini giriş olarak ayarlayacaktır.
Select Case kısmında ise TRISIO=%111110 komutları yerine GPIO=%00111110 şeklinde komutlar verilmesi gerekir.

Ete

ersangundogdu

Haklısınız hocam. MCS derleme yapmıyordu sadece o hataları giderdim. Diğer tarafları kontrol etmedim.

ete

#4
Hem programı düzeltelim hemde sistemi n çalışmasına açıklık getirelim istedim.
Tarife bakılırsa Ersan da doğrusunu yapmamış gözüküyor. Zira,

Programda 3 adet animasyon var ise ve ButonB yalnızca ikinci animasyonu sıraya sokacak ise sistemi şöyle özetlemek mümkün.
BUTONA sıradaki animasyonu çalıştıracak. Her basışta sırayı bir sonraki animasyona eşitleyecek.
BUTONB ise yalnızca Animasyon-2 yi sıraya alacak.
Başlangıçta sıra=0 olacağı için ButonA ya basılırsa Animasyon-1 çalışacak. Ardından Sıra=Sıra+1 yapacak.
Yeniden ButonA ya basarsam sırada Animasyon-2 olduğu için o çalışacak ve SIra=Sıra+1 yapılıp sıraya Animasyon-3 alınmış olacaktır.
Yeniden butonA ya basarsam bu sefer Animasyon-3 çalışacak ve Sıra tekrar sıfırlanacak ve animasyon-1 sıraya girmiş olacak.
Arada ButonB ye basarsam Sıra ne olursa olsun Sıra=1 olacak yani Animasyon-2 sırası.

Şimdi bu senaryoya göre programı verirsek aşağıdaki gibi olmalı,
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF GPIO=0 ANSEL=0 cmcon=7 TRISIO=%00110000SYMBOL BUTONB=GPIO.5SYMBOL BUTONA=GPIO.4SIRA VAR BYTE SIRA=0pause 300BASLA:WHILE BUTONB=1  IF BUTONA=0 THEN    SIRA=SIRA+1    IF SIRA>3 THEN SIRA=0    WHILE BUTONA=0:WEND    pause 50ENDIF WENDSELECT CASE SIRA CASE 0goto animasyon_1CASE 1 goto animasyon_2case 2goto animasyon_3end select goto BASLA   animasyon_1:PAUSE 210GPIO=%00111110pause 170GPIO=%00111111PAUSE 170 GPIO=%00111110PAUSE 170GPIO=%00111111PAUSE 170 GPIO=%00111010PAUSE 170GPIO=%00111111PAUSE 320GPIO=%00111010PAUSE 170GPIO=%00111111PAUSE 170GPIO=%00111010PAUSE 170GPIO=%00111111PAUSE 170GOTO BASLAanimasyon_2GPIO=%00111010PAUSE 50GPIO=%00111111PAUSE 25 goto BASLA animasyon_3GPIO=%00111110PAUSE 120GPIO=%00111111PAUSE 120GPIO=%00111011PAUSE 80GPIO=%00111111PAUSE 80GPIO=%00111110PAUSE 120GPIO=%00111111PAUSE 120GPIO=%00111110PAUSE 120GPIO=%00111111PAUSE 120GPIO=%00111011PAUSE 80GPIO=%00111111PAUSE 80GPIO=%00111010PAUSE 60GPIO=%00111111PAUSE 60goto BASLA end

emrecatal00

#5
Hocam cevabınız için teşekkürler , en basit olarak şöyle a butonu animasyon değiştirecek b butonu hangi animasyondaysa onu çalıştıracak mesela animasyon 1 de a butonuna bastım çalıştı ve bitti birdaha basarsam yine animasyon 1 çalışacak sonra b butonuna bastım 2. animasyona geçti a butonuna bastığımda 2. animasyon çalışacak bitecek ben birdaha a butonuna basarsam yine 2. animasyon çalışacak , animasyon değiştirmediğim sürece yani b butonuna basmadığım sürece animasyon aynı kalacak teşekkürler yardımlarınız için tekrardan

ete

Birinci mesajın böyle söylemiyordu. Açıklamalara biraz özen göstermek gerek.
Boşuna çalışmış olduk şimdi.

Ete

emrecatal00

#7
Hocam nasıl aciklayacagimi bilemedim o nedenle açıklamayı sonradan uzun tuttum kusura bakmayın lisede mikro işlemciler dersi kaldırıldığı için kendi cabalarimla ve sizin derslerinizle birşeyler yapmaya çalışıyorum bu yüzdende fazla aciklayamadim galiba fakat dediğim gibi b butonuna basılınca hangi animasyondaysa çalışacak a butonuna basıldığında ise 1. animasyondaysa 2. animasyona yine basılırsa 3. animasyona gibi gidecek ama b butonu örnek 3. animasyonda b ye bastığım zaman 3. animasyon çalışacak yine bastım yine çalışacak sonra a ya bastım 1. animasyona geçti b ye bastığımda 1. animasyonu çalıştıracak teşekkürler kusurum varsa affola..

ete

Yukarıda verdiğim program örneğini son açıklamaya göre düzelttim. Bakabilirsin.

Ete

Powered by EzPortal