1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » Microchip PIC devreleri bilgiler, Yazar Projeleri Makaleler Elektronik Genel »

Pic16f628 Pic Basic ile Saat Termometre Devreleri

Pic16f628 Pic Basic ile Saat Termometre Devreleri sayfa 3

Devre-6: Bu program 7 segment led display ile çalışır. Saat bilgisini DS1302 den alır. Saniye gösterir. Eksi sıcaklık gösterir. Orta Ledler Kesme yöntemi ile yanıp söner.

saat termometre DS1302 pic16f628

'*******************************************
'*  Name    : SAAT-TERMO.BAS
'*  Author  : [Erol Tahir Erdal]
'*  Notice  : Copyright (c) 2005 [ETE]
'*          : All Rights Reserved
'*  Date    : 23.06.2005
'*  Version : 1.0      LED (6)
'*  Notes   : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK
'*          :  GOSTEREBİLİYOR SAAT RTC DS1302 ile çalışıyor
'*******************************************
PORTA=0:portb=0
TRISB=0
TRISA=%11100000
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
'DEFINE OSC 4
'---------------------------------------------------------------------
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
CMCON=7
'---------------------------------------------------------------------
Comm_Pin    VAR	PortA.4     ' One-wire Data-Pin "DQ" PortB.0 da
Busy        VAR BIT         ' Busy Status-Bit
poz         var BIT
GOR         VAR BYTE
HAM         VAR	WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD
Y           VAR BYTE
SAYI        VAR BYTE
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
Deg         CON 223         ' ° işareti
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE         ' Div32 bit hesap için geçici değişken
SAYAC       VAR BYTE
SN          VAR BYTE
DAK         VAR BYTE
SAAT        VAR BYTE
GUN         VAR BYTE
AY          VAR BYTE
YIL         VAR BYTE
MEM         var byte ' Temporary data holder
'TARIH       var byte ' Second byte to ds1302
ONLAR       VAR BYTE
BIRLER      VAR BYTE
ESN         VAR BYTE
'---------------------------------------------
SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1
SYMBOL  RTC_DTA=PORTA.0
SYMBOL  RTC_CLK=PORTA.1
SYMBOL  RTC_RST=PORTA.2
symbol  SEC   =PORTA.5
SYMBOL  ASAGI =PORTA.6
SYMBOL  YUKARI=PORTA.7
'---------------------------------------------
CLEAR  'tüm değişkenler sıfırlandı
low RTC_RST
low RTC_CLK
PAUSE 200
esn=0:GOR=0:POZ=0
'---------------------------------------------
PORTB=0
gosub ZAMAN_OKU:esn=SN
BASLA:
        IF Y=11 THEN Y=0
        IF Y>5 THEN GOSUB EKRAN1
        IF Y<6 THEN GOSUB EKRAN0

ATLA:  if SEC=0 THEN AYAR  'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT
       gosub SENSOROKU     'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ

       GOTO BASLA

EKRAN0: if sayac=30 then LOW porta.3
       X= SAAT DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2

       X= SAAT DIG 0:GOSUB AL
       SHIFTOUT  DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 

       X= DAK DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4

       X= DAK DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5

       X= sn DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6

       X= SN DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN

AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN

EKRAN1:LOW PORTA.3
       SAYI=0
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2
       IF SIGN_BITI = NEGAT_ISI THEN SAYI=64
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3
       x=(ISI DIG 1):GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4
       x=(ISI DIG 0):GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5
       X=10:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6
       X=11:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN

EKRAN2: HIGH porta.3
       X= GUN DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2

       X= GUN DIG 0:GOSUB AL
       SHIFTOUT  DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 

       X= AY DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4

       X= AY DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5

       X= YIL DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6

       X= YIL DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN       

AYAR:  POZ=1:gosub FLASH
       WHILE SEC=0
       WEND
HOUR:  GOSUB EKRAN0
       LOW PORTA.3
       IF SEC=0 THEN MINBIR
       IF YUKARI=0 THEN
          SAAT=SAAT+1
          IF SAAT=24 THEN SAAT=0
        ENDIF
        IF ASAGI=0 THEN
           SAAT=SAAT-1
           IF SAAT=255 THEN SAAT=23
        ENDIF
        GOSUB GECIKME
        GOTO HOUR

MINBIR:
        GOSUB FLASH
        WHILE SEC=0
        WEND

MINUTE: GOSUB EKRAN0
       LOW PORTA.3
       IF SEC=0 THEN ara
        IF YUKARI=0 THEN
           DAK=DAK+1
           IF DAK=60 THEN DAK=0
        ENDIF
        IF ASAGI=0 THEN
           DAK=DAK-1
           IF DAK=255 THEN DAK=59
        ENDIF
        GOSUB GECIKME
        GOTO MINUTE

SECBIR: WHILE SEC=0
        WEND

GECIKME:
        FOR X=0 TO 1800
        PAUSEUS 100
        NEXT
        RETURN

ARA:
        GOSUB FLASH
        HIGH PORTA.3
        WHILE SEC=0
        wend
        MEM=SN:GOSUB TERSCEVIR:SN=SAYI
        MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI
        MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI
        MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI
        MEM=AY:GOSUB TERSCEVIR:AY=SAYI
        MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI
        GOSUB ZAMAN_YAZ
        POZ=0
        goto BASLA

FLASH:
      TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150
      TOGGLE PORTA.3:PAUSE 150:TOGGLE PORTA.3:PAUSE 150
      return
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SENSOROKU:
'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
           ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN

Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=ISI/1000
    RETURN                      

ZAMAN_OKU:
'         sayac=1-sayac: 'if sayac=1 then low porta.3
         high RTC_RST
         shiftout RTC_DTA, RTC_CLK, 0, [$BF]
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         low RTC_RST ':PAUSE 100
         return

ZAMAN_YAZ:

         high  RTC_RST
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'YAZMAK İÇİN HAZIRLA
         low RTC_RST:PAUSE 1
         high RTC_RST
         SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 0]  'YAZ
         low RTC_RST
         PAUSE 10
         return

CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         RETURN  

TERSCEVIR:
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
         RETURN

DISABLE
KESME:
      IF POZ=1 then CIK
      SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
       IF SAYAC=61 then  '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0        'sayaç sıfırlanıyor
          Y=Y+1
          GOSUB ZAMAN_OKU
         if Y<5 then HIGH porta.3
       ENDIF
CIK:     INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
         RESUME
         ENABLE

END

Devre-7: Bu program 7 segment led display ile çalışır. Saat bilgisini DS1302 den alır. Saniye gösterir. Eksi sıcaklık gösterir. Orta Ledler Kesme yöntemi ile yanıp söner. TARİH gösterir.

Kolay Gelsin,
ETE

saat isis led devre 7

'******************************************
'*  Name    : SAAT-TERMO.BAS
'*  Author  : [Erol Tahir Erdal]
'*  Notice  : Copyright (c) 2005 [ETE]
'*          : All Rights Reserved
'*  Date    : 23.06.2005
'*  Version : 1.0      LED (7)
'*  Notes   : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK
'*          :  GOSTEREBİLİYOR SAAT RTC DS1302 ile çalışıyor
'********************************************
PORTA=0:portb=0
TRISB=0
TRISA=%11100000
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
'DEFINE OSC 4
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000101   'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0
CMCON=7
'----------------------------------------------------------------------------
Comm_Pin    VAR	PortA.4     ' One-wire Data-Pin "DQ" PortB.0 da
Busy        VAR BIT         ' Busy Status-Bit
POZ         VAR BIT
GOR         VAR BYTE
HAM         VAR	WORD        ' Sensör HAM okuma değeri
ISI         VAR WORD        ' Hesaplanmış ISI değeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD
Y           VAR BYTE
SAYI        VAR BYTE
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
Deg         CON 223         ' ° işareti
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE         ' Div32 bit hesap için geçici değişken
SAYAC       VAR BYTE
SN          VAR BYTE
DAK         VAR BYTE
SAAT        VAR BYTE
GUN         VAR BYTE
AY          VAR BYTE
YIL         VAR BYTE
MEM         var byte ' Temporary data holder
'TARIH       var byte ' Second byte to ds1302
ONLAR       VAR BYTE
BIRLER      VAR BYTE
ESN         VAR BYTE
'---------------------------------------------
SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1
SYMBOL  RTC_DTA=PORTA.0
SYMBOL  RTC_CLK=PORTA.1
SYMBOL  RTC_RST=PORTA.2
symbol  SEC   =PORTA.5
SYMBOL  ASAGI =PORTA.6
SYMBOL  YUKARI=PORTA.7
'--------------------------------------
CLEAR  'tüm değişkenler sıfırlandı
low RTC_RST
low RTC_CLK
GOSUB GECIKME
'--------------------------------------
HIGH PORTA.3
gosub ZAMAN_OKU:esn=SN
BASLA:
        IF Y=15 THEN Y=0
        IF Y>5 AND Y<11 THEN GOSUB EKRAN1
        IF Y>10 THEN GOSUB EKRAN2
        IF Y<6 THEN GOSUB EKRAN0

ATLA:  if SEC=0 THEN AYAR  'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT
       gosub SENSOROKU     'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ

       GOTO BASLA

EKRAN0: if sayac=28 then LOW porta.3
       X= SAAT DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2

       X= SAAT DIG 0:GOSUB AL
       SHIFTOUT  DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 

       X= DAK DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4

       X= DAK DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5

       X= sn DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6

       X= SN DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN

AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN

EKRAN1:LOW PORTA.3
       SAYI=0
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2
       IF SIGN_BITI = NEGAT_ISI THEN SAYI=64
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3
       x=(ISI DIG 1):GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4
       x=(ISI DIG 0):GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5
       X=10:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6
       X=11:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN

EKRAN2:IF POZ=0 THEN HIGH porta.3
       X= GUN DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2

       X= GUN DIG 0:GOSUB AL
       SHIFTOUT  DTA,CLK,1,[SAYI]
       HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 

       X= AY DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4

       X= AY DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5

       X= YIL DIG 1:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6

       X= YIL DIG 0:GOSUB AL
       SHIFTOUT DTA,CLK,1,[SAYI]
       HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7
       RETURN
'-----------------------------------------------------
AYAR:
       LOW PORTA.3:SN=0:POZ=1:GOSUB FLASH
       IF Y>10 THEN TARIHAYAR
       WHILE SEC=0
       WEND
HOUR:  GOSUB EKRAN0
       LOW PORTA.3
       IF SEC=0 THEN MINBIR
       IF YUKARI=0 THEN
          SAAT=SAAT+1
          IF SAAT=24 THEN SAAT=0
        ENDIF
        IF ASAGI=0 THEN
           SAAT=SAAT-1
           IF SAAT=255 THEN SAAT=23
        ENDIF
        GOSUB GECIKME
        GOTO HOUR

MINBIR:
        GOSUB FLASH
        WHILE SEC=0
        WEND

MINUTE: GOSUB EKRAN0
       LOW PORTA.3
       IF SEC=0 THEN ara
        IF YUKARI=0 THEN
           DAK=DAK+1
           IF DAK=60 THEN DAK=0
        ENDIF
        IF ASAGI=0 THEN
           DAK=DAK-1
           IF DAK=255 THEN DAK=59
        ENDIF
        GOSUB GECIKME
        GOTO MINUTE

SECBIR: WHILE SEC=0
        WEND

GECIKME:
        FOR X=0 TO 1800
        PAUSEUS 50
        NEXT
        RETURN
DELAY:
        FOR X=0 TO 1900
        PAUSEUS 10
        NEXT
        RETURN      

ARA:
        GOSUB FLASH
        HIGH PORTA.3
        WHILE SEC=0
        wend
        MEM=SN:GOSUB TERSCEVIR:SN=SAYI
        MEM=DAK:GOSUB TERSCEVIR:DAK=SAYI
        MEM=SAAT:GOSUB TERSCEVIR:SAAT=SAYI
        MEM=GUN:GOSUB TERSCEVIR:GUN=SAYI
        MEM=AY:GOSUB TERSCEVIR:AY=SAYI
        MEM=YIL:GOSUB TERSCEVIR:YIL=SAYI
        GOSUB ZAMAN_YAZ
        GOSUB ZAMAN_OKU
        y=0:POZ=0
        goto BASLA

FLASH:
      TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY
      TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY
      return
'-----------------------------------------------------------------
TARIHAYAR:
       WHILE SEC=0
       WEND
GUNAL:  GOSUB EKRAN2
       IF SEC=0 THEN AYBIR
       IF YUKARI=0 THEN
          GUN=GUN+1
          IF GUN=32 THEN GUN=1
        ENDIF
        IF ASAGI=0 THEN
           GUN=GUN-1
           IF GUN=255 THEN SAAT=31
        ENDIF
        GOSUB GECIKME
        GOTO GUNAL

AYBIR:
        GOSUB FLASH
        WHILE SEC=0
        WEND

AYAL: GOSUB EKRAN2
      IF SEC=0 THEN YILBIR
        IF YUKARI=0 THEN
           AY=AY+1
           IF AY=13 THEN AY=1
        ENDIF
        IF ASAGI=0 THEN
           AY=AY-1
           IF AY=255 THEN AY=12
        ENDIF
        GOSUB GECIKME
        GOTO AYAL
YILBIR:
        gosub FLASH
        WHILE SEC=0:WEND
YILAL:
       GOSUB EKRAN2
       IF SEC=0 THEN ARA
        IF YUKARI=0 THEN
           YIL=YIL+1
           IF YIL=100 THEN YIL=0
        ENDIF
        IF ASAGI=0 THEN
           YIL=YIL-1
           IF YIL=255 THEN YIL=99
        ENDIF
        GOSUB GECIKME
        GOTO YILAL                

'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SENSOROKU:
'-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK----------------------
'           ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
'------------------------------------------------------------------------------
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN

Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=ISI/1000
    RETURN              

ZAMAN_OKU:
         high RTC_RST
         shiftout RTC_DTA, RTC_CLK, 0, [$BF]
         SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, YIL, MEM]  'OKU
         MEM=SN:GOSUB CEVIR:SN=SAYI
         MEM=DAK:GOSUB CEVIR:DAK=SAYI
         MEM=SAAT:GOSUB CEVIR:SAAT=SAYI
         MEM=GUN:GOSUB CEVIR:GUN=SAYI
         MEM=AY:GOSUB CEVIR:AY=SAYI
         MEM=YIL:GOSUB CEVIR:YIL=SAYI
         low RTC_RST
         return

ZAMAN_YAZ:

         high  RTC_RST
         SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0]    'WRT Protek açıldı
         low RTC_RST:PAUSEUS 10
         high RTC_RST
         SHIFTOUT  RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, 0, YIL, 128]  'YAZ
         low RTC_RST
         PAUSEUS 10
         return

CEVIR:
         ONLAR=MEM & %01110000
         ONLAR=ONLAR>>4
         BIRLER=MEM & %00001111
         SAYI=ONLAR*10+BIRLER
         RETURN  

TERSCEVIR:
         ONLAR=MEM DIG 1
         ONLAR=ONLAR<<4
         BIRLER=MEM DIG 0
         SAYI=ONLAR+BIRLER
         RETURN

DISABLE
KESME:IF POZ=1 then CIK
        SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
        IF SAYAC=58 then  '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0        'sayaç sıfırlanıyor
          Y=Y+1
          GOSUB ZAMAN_OKU
         if Y<5 then HIGH porta.3
       ENDIF
CIK:     INTCON.2=0  'TMR0 Kesme bayrağı sıfırlanıyor
         RESUME
         ENABLE

END

PIC16F628 ile yapılmış 7 adet SAAT ve TERMOMETRE Devresi projesine ait tüm kaynak dosyalar. Proteus isis simülasyonları picbasic kaynak .bas .hex vb. kodları 16f628-saat-termometre-projeleri-picbasic.rar

YAZININ DİĞER SAYFALARI: 1 2 3

Yazar: Ete

Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 23 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız;

Elektronik

 
  1. erol ayvaz says:

    Bu devreyi yapıp bu hale getiren kişinin ellerine emeğine sağlık. Bu devre ile ilgili soracağım tek konu lcd ekranda veya 7sekment de o anlık değerleri okuduk peki bu değerleri kaydedebilmek için bir hafıza kartına nasıl bağlayabilirim. bağlandıkdan sonra bu verileri 15 sn de bir karta taşımasını istesek bu programı nasıl değiştirmeliyiz ve nasıl bağlamalıyız devremize. Şimdiden teşekkür ederim kolay gelsin iyi çalışmalar.

  2. yunus says:

    arkadasım projen çok güzel ama bana sadece ldc de gösteren lazım kodlarla birlike eger bulursan bana ulaşırmısın

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)

  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.