Selam kardeşler,
@ DEVICE pic16F628A 'işlemci 16F628
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer kapalı
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
include "modedefs.bas" 'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI
VERI var byte 'SERİ İLETİŞİMDE ALINACAK VERİ
TRISB=0 'PORTB TAMAMI ÇIKIŞ
CMCON=7 'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
TRISA=%00010 'PORTA.1 GİRİŞ
PORTB=0 'PORTB İÇERİĞİ SIFIR NEDENİ İSE İLK ENERJİ VERİLDİĞİNDE GİRİŞ VEYA ÇIKIŞLAR AKTİF OLMAMASI İÇİN
BASLA:
serin PORTA.1,T300,["320VOLT"],veri 'PORTA.1 320VOLT VERİSİNİ AL
PORTB = veri 'PORTB'DE HANGİ VERİ ALINDIYSA O VERİYE AİT LEDİ YAK (ÇIKIŞ VER)
goto BASLA 'BASLA ETİKETİNE GİT
bileniniz var ise bana bu kodların çalışma mantığının ne olduğunu anlatır mısınız? takıldığım kritik nokta PORTB nin veri ye eşitlenmesi. bunu yapmamızın mantığı nedir?
normalde VERI adlı bir değişkene değer atıyorduk, serout gibi komutlarla herhangi bir port dan bu veriyi 433 mhz lik hazır modül ile gönderiyorduk
ama durum bu yazılımda farklı bunun mantığını da öğrenmek istiyorum. çünkü benim diğer bildiğim yöntemle çok fazla if , then komutu oluyor. bu kodlar ise gayet kısa.
diğer dediğim kodlar şöyle
TRISA=%11110
TRISB=%00000011
PORTA=0
PORTB=0
VERICI VAR Byte
VERICI=0
PAUSE 500
BASLA:
If PORTA.1=0 Then
VERICI=10
Else
VERICI=0
GoSub GONDER
PAUSE 100
EndIf
If PORTA.2=0 Then
VERICI=20
Else
VERICI=0
GoSub GONDER
PAUSE 100
EndIf
If PORTA.3=0 Then
VERICI=30
Else
VERICI=0
GoSub GONDER
PAUSE 100
EndIf
If PORTA.4=0 Then
VERICI=40
Else
VERICI=0
GoSub GONDER
PAUSE 100
EndIf
bunun çalışma mantığı şöyle
1-)VERI diye bir bilgi oluşturuyoruz. Daha sonra portlara (diyelimki B portları) gelen komutlar ile bu verinin farklı değer almasını kodlar yardımıyla sağlıyoruz. örneğin, B nin 1 portu high ise yani sinyal geliyorsa veri=10(herhangi bir değer) olsun diyoruz.daha sonra bu VERI olarak adlandırdığımız bilgi sistemde 10 olarak kayıtlı kalıyor.
2-)SEROUT gibi komutlar ile de sistemdeki bu bilgiyi belirli aralıklarla 433 mhz lik verici modülden yayınlıyoruz.
3-)alıcı kısmında da bu verinin değeri gönderilen sinyal ile alıyoruz. örnegin verici VERI bilgisinin değerini 10 yapıp gönderdiyse, alıcımız da bu verinin değerini SERIN gibi komutlarla pic e işliyor. daha sonra bol miktarda if else kullanarak, şarta bağlı komut satırları yazıyoruz. çok kabaca şöyle;
SERIN ------> verimizin değeri 10 geldi diyelim.
VERI=10 oldu
----------------
device 16f628a
vs
vs
vs
if VERI=10 then
high portb.2
else
low portb.2
endif
vs
vs
vs
burada maksat diğer portlardan gelecek bilgilerin ayırt edilmesi- her port için VERI değişkenine ayrı bir sayı atamalıyız ki alıcı herbir sinyali gelen 'o ' farklı bilgiye göre doğru porta göndersin.
mesaj birleştirme:: 23 Temmuz 2013, 23:09:47
kodlara baktıysanız kodu yazan arkadaş açıklama kısmında
PORTB = veri 'PORTB'DE HANGİ VERİ ALINDIYSA O VERİYE AİT LEDİ YAK (ÇIKIŞ VER)
en alttan yukarı 2. satır.
bu satırda hangi veri alındıysa o veriye ait ledi yak diyor. ama biz lede bir değer vermedikki ? ispatı burada :)
include "modedefs.bas" 'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI
VERI var byte 'SERİ İLETİŞİMDE VERİLECEK VERİ
TRISB=%11111111 'PORTB TAMAMI GİRİŞ
CMCON=7 'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
OPTION_REG=7 'PULL UP DİREÇLERİ İPTAL
PORTB=0 'PORTB İÇERİĞİ SIFIR NEDENİ İSE İLK ENERJİ VERİLDİĞİNDE GİRİŞ VEYA ÇIKIŞLAR AKTİF OLMAMASI İÇİN
BASLA:
VERI = PORTB 'VERİ=PORTB EŞİTLE
serout PORTA.1,T300,["320VOLT",VERI] 'PORTA.1 320VOLT VERİSİNİ GÖNDER
goto BASLA 'BASLA ETİKETİNE GİT
yani nasıl olur da bu kodlar ile 1. anahtar ile 2. anahtar arasındaki fark algılanıp gönderilir.? şu kodları bi tümden açıklayı hele yaw :) çoh bunaldım. çok makbule geçecek..