Relógio Circuits Pic Basic Termômetro PIC16F628

sábado, 10 de julho de 2010 0 comentários

 Pic16f628 Pic Basic ile Saat Termometre Devreleri sayfa 2
Circuit-3: Este circuito está localizado no Time-minutos-segundos, e foi criado por sete display segmento. Relógio sinal foi obtida por método de corte.

 pic16f628 uln2004 ds18b20 termometre


'**************************************
'* Name : KESMETMR0.BAS
'* Author : [Erol Tahir Erdal]
'* Notice : Copyright (c) 2005 [ETE]
'* : All Rights Reserved
'* Date : 23.04.2005
'* Version : 1.0 LED (3 )
'* Notes : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK
'* : GOSTEREBİLİYOR
'***************************************
PORTA=255:portb=0
TRISB=0 'PortB tamamı giriş yapıldı.
TRISA=011111 'A portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ 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, XT_OSC
'@ 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 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------
Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da
Busy VAR BIT ' Busy Status-Bit
POZ var BIT
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
symbol SEC =PORTA.0
SYMBOL ASAGI =PORTA.1
SYMBOL YUKARI=PORTA.2
'------------------------------------
CLEAR 'tüm değişkenler sıfırlandı
PAUSE 200
Y=1 :P OZ=0
'------------------------------------
PORTB=0
BASLA:
IF Y>6 THEN
IF Y>=11 THEN Y=1
GOSUB EKRAN1
GOTO ATLA
ENDIF
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 PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2

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

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

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

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

X= SN DIG 0:GOSUB AL
SHIFTOUT PORTB.0,PORTB.1,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 PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2
IF SIGN_BITI = NEGAT_ISI THEN SAYI=64
SHIFTOUT PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3

x=(ISI DIG 1):GOSUB AL
SHIFTOUT PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4
x=(ISI DIG 0):GOSUB AL
SHIFTOUT PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5
X=10:GOSUB AL
SHIFTOUT PORTB.0,PORTB.1,1,[SAYI]
HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6
X=11:GOSUB AL
SHIFTOUT PORTB.0,PORTB.1,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 3500
PAUSEUS 10
NEXT
RETURN

ARA:
GOSUB FLASH
HIGH PORTA.3
WHILE SEC=0
wend
POZ=0:SN=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:
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.
' ISI = (HAM & $0FF0) >> 4 'ortadaki 8 biti maskele, ve sağa doğru 4 hane kaydır.
GEC:
FLOAT = (ISI //1000)/100
ISI=ISI/1000
' Float = ((HAM.Lowbyte & $0F) * 625) ' Küsürat hesabı
' LCDOUT $FE,$C4,Sign,DEC ISI,".",DEC1 (Float)," ",Deg,"C " '2. satırda ısı
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
SN=SN+1
Y=Y+1 'saniye değeri bir artırılıyor
if y<7 then high porta.3
IF SN=60 THEN 'saniye 60 olmuş ise 1 dakika süre geçti ohalde
SN=0 ' saniye sıfırlanıyor
DAK=DAK+1 ' dakika değeri bir artırılıyor
IF DAK=60 then 'dakika 60 olmuş ise 1 saat süre geçti
DAK=0 ' dakika sıfırlanıyor
SAAT=SAAT+1 ' saat değeri bir artırılıyor
IF SAAT=24 THEN 'saat 24 olmuş ise 1 gün geçti
SAAT=0 'saat sıfırlanıyor
' GUN=GUN+1 'gün değeri bir artırılıyor
' IF GUN=365 THEN GUN=0 'gün 365 olmuş ise
endif 'gün sıfırlanıyor 1 yıl geçti
ENDIF
ENDIF
' lcdout $fe,$89,":",DEC2 SN
ENDIF
CIK: INTCON.2=0 'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

END



Circuit-4: Este circuito está localizado no Time-minutos-segundos, e foi criado por sete display segmento. A parede do sinal de clock externo ou horas relógio palslerinden obtidos. Muito verdadeiro horário de trabalho.

 pic16f628 termometre saat devresi 74hc595 ds18b20 pibasic


'****************************************
'* Name : SAAT-TERMO.BAS
'* Author : [Erol Tahir Erdal]
'* Notice : Copyright (c) 2005 [ETE]
'* : All Rights Reserved
'* Date : 23.06.2005
'* Version : 1.0 LED (4)
'* Notes : SICAKLIK KUSURAT YAZMIYOR AMA EKSI SICAKLIK
'* : GOSTEREBİLİYOR
'****************************************
PORTA=255:portb=0
TRISB=1
TRISA=011111
'-----------------------------------------------------------------
@ 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=%0100000 'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok.
INTCON=%10010000 'Kesmeler aktif ve RB0/INT kesmesi aktif

CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------
Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da
Busy VAR BIT ' Busy Status-Bit
POZ VAR BIT
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
symbol SEC =PORTA.0
SYMBOL ASAGI =PORTA.1
SYMBOL YUKARI=PORTA.2
SYMBOL DTA=PORTA.6
SYMBOL CLK=PORTB.1

'---------------------------------
CLEAR 'tüm değişkenler sıfırlandı
PAUSE 200
Y=1 :P OZ=0
'---------------------------------
PORTB=0
BASLA:
IF Y>6 THEN
IF Y>=11 THEN Y=1
GOSUB EKRAN1
GOTO ATLA
ENDIF
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 PORTB.0=1 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

AYAR: POZ=1:SN=0
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
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:
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

DISABLE
KESME: IF POZ=1 then CIK
SN=SN+1
Y=Y+1 'saniye değeri bir artırılıyor
if y<7 then high porta.3
IF SN=60 THEN 'saniye 60 olmuş ise 1 dakika süre geçti ohalde
SN=0 ' saniye sıfırlanıyor
DAK=DAK+1 ' dakika değeri bir artırılıyor
IF DAK=60 then 'dakika 60 olmuş ise 1 saat süre geçti
DAK=0 ' dakika sıfırlanıyor
SAAT=SAAT+1 ' saat değeri bir artırılıyor
IF SAAT=24 THEN 'saat 24 olmuş ise 1 gün geçti
SAAT=0 'saat sıfırlanıyor
ENDIF
ENDIF
ENDIF
CIK: INTCON.1=0 'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE

END

Circuit-5: Este programa funciona com 7 segmentos LED. Time de
informação (RTC) é den DS1302. segundo indica. Mostra temperatura negativa....

isi saat led pic16f628 pic basic 

'***************************************
'* Name : SAAT-TERMO.BAS
'* Author : [Erol Tahir Erdal]
'* Notice : Copyright (c) 2005 [ETE]
'* : All Rights Reserved
'* Date : 23.06.2005
'* Version : 1.0 LED (5)
'* 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
'-------------------------------------------------------------------------
OPTION_REG.7=0 'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok.
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------
Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da
Busy VAR BIT ' Busy Status-Bit
GOR VAR BIT
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
OUTBYTE var byte ' Second byte to ds1302
REG_ADR var byte ' First 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
'---------------------------------------------
PORTB=0
gosub ZAMAN_OKU:esn=SN
BASLA:
GOSUB ZAMAN_OKU
IF ESN<>SN THEN
y=SN/5:IF GOR=0 THEN TOGGLE porta.3
IF (Y*5)=SN THEN GOR=1-GOR
ENDIF
IF GOR=1 THEN
GOSUB EKRAN1
GOTO ATLA
ENDIF

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
ESN=SN
GOTO BASLA

EKRAN0:'high 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

AYAR: gosub FLASH
SN=0
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
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
low RTC_RST :P AUSE 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 & 001111
SAYI=ONLAR*10+BIRLER
RETURN

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

END
 
(continue Lendo)
Share this article :

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