Relógio PIC 16F628

quarta-feira, 4 de agosto de 2010 4 comentários

JALTURK para baixar a versão mais recente do programa, o endereço jalturk.sourceforge.net clique.



Clique aqui para ver o diagrama do circuito grande.

Circuitos Clique aqui para baixar todos os arquivos.

código-fonte do circuito




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
-----------------------------------------------------
-----------------------------------------------------

---------7
Share this article :

+ comentários + 4 comentários

16 de agosto de 2012 às 03:32

BUEN DÍA AMIGO, GRACIAS POR TUS PUBLICACIONES, ME FUERON DE GRAN AYUDA...
QUE COMPILADOR ES EL QUE USAS, GRACIAS Y UN SALUDO DESDE PERU

16 de agosto de 2012 às 03:33

BUEN DÍA AMIGO, GRACIAS POR TUS PUBLICACIONES, ME FUERON DE GRAN AYUDA...
QUE COMPILADOR ES EL QUE USAS, GRACIAS Y UN SALUDO DESDE PERU

16 de agosto de 2012 às 03:33

BUEN DÍA AMIGO, GRACIAS POR TUS PUBLICACIONES, ME FUERON DE GRAN AYUDA...
QUE COMPILADOR ES EL QUE USAS, GRACIAS Y UN SALUDO DESDE PERU

16 de agosto de 2012 às 03:34

BUEN DÍA AMIGO, GRACIAS POR TUS PUBLICACIONES, ME FUERON DE GRAN AYUDA...
QUE COMPILADOR ES EL QUE USAS, GRACIAS Y UN SALUDO DESDE PERU

Postar um comentário

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. kvolts - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger