Konular
JalTurk ile PIC 16F628 Saat
JALTURK programının son versiyonunu indirmek için jalturk.sourceforge.net adresini tıklayınız.
Devre şemasını büyük görmek için tıklayınız.
Devreye ait tüm dosyaları indirmek için tıklayınız.
Uygulamaya ait JALTURK programlama Kodu:
INCLUDE 16F628_GENEL
INCLUDE DS1307
INCLUDE itele
INCLUDE ds18b20
;INCLUDE FORMAT
--PIN AYARLARI---------------------------------------
VAR VOLATILE BIT ust IS Pin_A0
VAR VOLATILE BIT mod IS Pin_A2
Port_A_Yon = Hepsi_Giris
VAR VOLATILE BIT ses IS Pin_B6
Port_B_Yon = Hepsi_Cikis
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-- DEĞİŞKEN TANIMLAMALARI----------------------------
VAR BYTE saat_,dakika_,saniye_,gun_,ay_,yil_,haf_gun_
VAR BYTE saat22,saat11,dakika22,dakika11
VAR BYTE saat_kontrol,dakika_kontrol
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
CONST BYTE a_ = 0b_1111_1011 ;disp_de a harfi
CONST BYTE y_ = 0b_0111_0111 ;disp_de y harfi
CONST BYTE r_ = 0b_1000_1101 ;disp_de r harfi
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
PROCEDURE ses_cik ( BYTE IN kere , BYTE IN frekans , BYTE IN ara)IS
WHILE kere>0 LOOP
FOR 100 LOOP
ses=high
Gecikme_10us(frekans)
ses=low
Gecikme_10us(frekans)
END LOOP
kere=kere-1
Gecikme_10ms(ara)
END LOOP
END PROCEDURE
PROCEDURE seg_yaz IS
disari_it(0,0,dakika11)
disari_it(0,0,dakika22)
disari_it(0,0,saat11)
disari_it(0,0,saat22)
END PROCEDURE
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
PROCEDURE ayir IS
saat11=( saat_ << 4 ) >> 4
saat22= saat_ >> 4
dakika11=( dakika_ << 4 ) >> 4
dakika22= dakika_ >> 4
-----------------------------------------------------
saat11 = Ortak_Katot_Al( saat11, 0 )
saat22 = Ortak_Katot_Al( saat22, 0 )
dakika11 = Ortak_Katot_Al( dakika11, 0 )
dakika22 = Ortak_Katot_Al( dakika22, 0 )
END PROCEDURE
PROCEDURE ayir2(byte IN x1,byte IN x2,byte IN x3 , BYTE IN x4) IS
x3 = Ortak_Katot_Al( x3, 0 )
x4 = Ortak_Katot_Al( x4, 0 )
x1 = Ortak_Katot_Al( x1, 0 )
x2 = Ortak_Katot_Al( x2, 0 )
disari_it(0,0,x3)
disari_it(0,0,x4)
disari_it(0,0,x1)
disari_it(0,0,x2)
END PROCEDURE
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
PROCEDURE saat_ayar IS --saat ayarlama
VAR BYTE s_a=0,s_u=0,d_a=0,d_u=0
saat_=0
dakika_=0
disari_it(0,1,r_)
disari_it(0,1,a_)
disari_it(0,1,y_)
disari_it(0,1,a_)
Gecikme_1s(2)
ayir
seg_yaz
-----------------------------------------------------
WHILE mod LOOP --saat ayarı
-----------------------------------------------------
IF !ust THEN
saat_=saat_+1
s_a=s_a+1
IF s_a==10 THEN
s_a=0
s_u=s_u+1
END IF
Gecikme_100ms(3)
IF saat_==24 THEN saat_=0 END IF
IF s_a==4 & s_u==2 THEN
s_a=0
s_u=0
END IF
ayir2(s_a,s_u,d_a,d_u)
END IF
-----------------------------------------------------
END LOOP
-----------------------------------------------------
Gecikme_100ms(5)
-----------------------------------------------------
WHILE mod LOOP --dakika ayarı
-----------------------------------------------------
IF !ust THEN
dakika_=dakika_+1
d_a=d_a+1
IF d_a==10 THEN
d_a=0
d_u=d_u+1
END IF
Gecikme_100ms(3)
IF dakika_==60 THEN dakika_=0 END IF
IF d_a==0 & d_u==6 THEN
d_a=0
d_u=0
END IF
ayir2(s_a,s_u,d_a,d_u)
END IF
END LOOP
-----------------------------------------------------
DS1307_Yaz(yil_,ay_,gun_,0,saat_,dakika_,0)
ds1307_oku(yil_,ay_,gun_,haf_gun_,saat_,dakika_,saniye_)
ayir
seg_yaz
Gecikme_100ms(4)
-----------------------------------------------------
END PROCEDURE
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
PROCEDURE ds_yaz IS
CONST BYTE deg_o = 0b_1100_0111 ;disp_de derecenin noktasi
CONST BYTE deg_c = 0b_1001_1101 ;disp_de C harfi
CONST BYTE tire = 0b_0000_0011 ;disp_de - işareti
VAR BYTE derece , derece_a , derece_u
VAR BIT isaret
ds18B20_oku(derece,isaret)
derece = derece - 1
derece_u = derece / 10
IF derece_a!=0 THEN derece_a = ( derece%10 ) + 1 END IF
IF derece_a==0 THEN derece_a =derece%10 END IF
derece_u = Ortak_Katot_Al( derece_u , 0 )
derece_a = Ortak_Katot_Al( derece_a , 0 )
disari_it(0,1,deg_c)
disari_it(0,1,deg_o)
IF !isaret then
disari_it(0,0,derece_a)
disari_it(0,0,derece_u)
ELSE
disari_it(0,0,derece_a)
disari_it(0,1,tire)
END IF
Gecikme_500ms(10)
-----------------------------------------------------
FOR 10 LOOP
ds1307_oku(yil_,ay_,gun_,haf_gun_,saat_,dakika_,saniye_)
END LOOP
ayir
seg_yaz
END PROCEDURE
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
;DS1307_Yaz(0,0,0,0,0,0,0)
ds1307_oku(yil_,ay_,gun_,haf_gun_,saat_,dakika_,saniye_)
ayir
seg_yaz
DS1820_COZUNURLUK_DEGISTIR(9) --ds18b20 10 BIT cozunurluk
-----------------------------------------------------
PortA = 0xFF
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
------------ANA PROGRAM BLOĞU------------------------
-----------------------------------------------------
FOREVER LOOP
-----------------------------------------------------
IF Mod == 0 THEN saat_ayar END IF --Eğer MOD'a basılırsa ayar moduna geç
-----------------------------------------------------
--DS1307 oku
ds1307_oku(yil_,ay_,gun_,haf_gun_,saat_,dakika_,saniye_)
IF saniye_==0x05 THEN ds_yaz END IF --eğer saniye 5 veya 59 ise
IF saniye_==0x35 THEN ds_yaz END IF -- Displeylere sıcaklığı yaz
-----------------------------------------------------
IF dakika_kontrol!=dakika_ THEN --Dakika artarsa yapılacaklar
ayir --Gelen zaman verilerini alt ve üst iki nibble'a ayırdık
seg_yaz --Ayrılan Saat ve Dakika verilerini Displaylere yazar
END IF
dakika_kontrol = dakika_
-----------------------------------------------------
IF saat_kontrol!=saat_ THEN --Saat artarsa yapılacaklar
ses_cik(2,50,10)
END IF
saat_kontrol = saat_
-----------------------------------------------------
END LOOP --Ana program bloğu sonu
-----------------------------------------------------
-----------------------------------------------------