Mình có cái code đồng hồ dùng PIC nhưng không có trình biên dịch cho PIC, các bạn có picbasic pro thì giúp mình dịch với, thanks
file đồng hồ.bas
file đồng hồ.bas
PHP Code:
'****************************************************************
'* Name : dong ho.BAS *
'* Author : *
'* Notice : Copyright (c) 2013 [ETE] *
'* : All Rights Reserved *
'* Date : 29.11.2013 *
'* Version : 1.0 LED (44) *
'* Notes :
'****************************************************************
PORTA=0:portb=0 'bu versiyonda saat sürekli okunuyor. Orta ledlerde hiç sorun yok.
TRISB=0 'buda güzel çalu?uyor bence hemde en güzeli
TRISA=%11100000
'-----------------------------------------------------------------
@ DEVICE pic16F628 'i?lemci 16F628
@ DEVICE pic16F628, WDT_ON 'Watch Dog timer açuk
@ DEVICE pic16F628, PWRT_ON 'Power on timer açuk
@ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalu
@ DEVICE pic16F628, MCLR_off 'MCLR pini kullanulMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanulacak
'-----------------------------------------------------------------
DEFINE OSC 4
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME 'kesme olu?ursa KESME adlu etikete git.
OPTION_REG=%10000101 'Pull up dirençleri UPTAL- Bölme oranu 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
Z VAR BIT
W VAR BIT
U VAR BIT
T VAR BIT
GOR VAR BYTE
HAM VAR WORD ' Sensör HAM okuma dederi
ISI VAR WORD ' Hesaplanmu? ISI dederi
Float VAR WORD ' Holds remainder for + temp C display
X VAR WORD
Y VAR BYTE
SAYI VAR BYTE
SIGN_BITI VAR HAM.Bit11 ' +/- sucakluk U?aret biti, 1 = olursa eksi sucakluk
NEGAT_ISI CON 1 ' Negatif_Cold = 1
Deg CON 223 ' ° i?areti
SIGN VAR BYTE ' ISI dederi için +/- i?aret
TEMP VAR BYTE ' Div32 bit hesap için geçici dedi?ken
SAYAC VAR BYTE 80
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
GUN VAR BYTE
AY VAR BYTE
YIL VAR BYTE
MEM var byte '
EKRAN_ZAM var byte '
SUM VAR BYTE
EKRAN_ISI VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
ESN VAR BYTE
'---------------------------------------------
SYMBOL DTA=PortB.0
SYMBOL CLK=PORTB.1
symbol ST=PORTB.2
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 dedi?kenler sufurlandu
EKRAN_ZAM=10 'saat EKRANDA KALMA SÜRESU
EKRAN_ISI=5 'sucakluk EKRANDA KALMA SÜRESU BUNLARI DEĐU~TUREBULURSUNUZ.
SUM=EKRAN_ZAM+EKRAN_ISI
IF sec=0 then ZAM_AYAR
ILK:
gosub ekran0
gosub sensoryaz
gosub sensoroku
low RTC_RST
low RTC_CLK
GOSUB GECIKME
'-----------------------------------------------------------------------------
HIGH PORTA.3
gosub ZAMAN_OKU:esn=SN
BASLA:
GOSUB ZAMAN_OKU
IF SAYAC=30 THEN LOW porta.3
IF Y=SUM THEN Y=0
IF Y>(EKRAN_ZAM) AND Y<SUM THEN
if y=(EKRAN_ZAM+1) then GOSUB SENSOROKU
GOSUB EKRAN1
ENDIF
if esn=sn then atla
Y=Y+1 : ESN=SN : SAYAC=0
IF Y<=EKRAN_ZAM THEN
HIGH porta.3
GOSUB EKRAN0
ENDIF
ATLA: if SEC=0 THEN AYAR 'MODE TU~UNA BASILMI~ USE AYAR'A GUT
GOTO BASLA
'-----------------------alt programlar-------------------------------------------
TEKRAR:
SHIFTOUT DTA,CLK,1,[SAYI]
RETURN
BAK_0:
GOSUB AL
IF Z=1 AND W=1 THEN SAYI=0
RETURN
BAK_1:
GOSUB AL
IF Z=1 AND U=1 THEN SAYI=0
RETURN
BAK_2:
GOSUB AL
IF Z=1 AND T=1 THEN SAYI=0
RETURN
EKRAN0:
X= DAK DIG 0:GOSUB BAK_1:GOSUB TEKRAR
X= DAK DIG 1 :GOSUB BAK_1:GOSUB TEKRAR
u=0
X= SAAT DIG 0 :GOSUB BAK_0:GOSUB TEKRAR
X= SAAT DIG 1:GOSUB BAK_0:GOSUB TEKRAR
w=0
HIGH st:PAUSEUS 2:LOW st
RETURN
'AL: LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN 'ma K chung
AL: LOOKUP X,[64,249,164,176,153,146,130,248,128,144,156,198],SAYI :RETURN 'ma A chung
EKRAN1:LOW PORTA.3
X=11:GOSUB AL:GOSUB TEKRAR
X=10:GOSUB AL:GOSUB TEKRAR
x=(ISI DIG 0):GOSUB AL:GOSUB TEKRAR
x=(ISI DIG 1):GOSUB AL:GOSUB TEKRAR
HIGH st:PAUSEUS 2:LOW st
RETURN
EKRAN2:IF POZ=0 THEN HIGH porta.3
X= YIL DIG 0:GOSUB BAK_2:GOSUB TEKRAR
X= YIL DIG 1:GOSUB BAK_2:GOSUB TEKRAR
T=0
X= AY DIG 0:GOSUB BAK_1:GOSUB TEKRAR
X= AY DIG 1:GOSUB BAK_1:GOSUB TEKRAR
U=0
X= GUN DIG 0:GOSUB BAK_0:GOSUB TEKRAR
X= GUN DIG 1:GOSUB BAK_0:GOSUB TEKRAR
w=0
HIGH st:PAUSEUS 2:LOW st
RETURN
EKRAN_3:
X= SN DIG 0:GOSUB BAK_1:GOSUB TEKRAR
X= SN DIG 1 :GOSUB BAK_1:GOSUB TEKRAR
u=0
SAYI=0:GOSUB TEKRAR
SAYI=SUM:GOSUB TEKRAR
w=0
HIGH st:PAUSEUS 2:LOW st
RETURN
'-----------------------------------------------------
ZAM_AYAR:
LOW PORTA.3:SN=0:POZ=1:SUM=6
SN=EKRAN_ZAM:GOSUB EKRAN_3
WHILE SEC=0:WEND
ZAM_BIR:
W=1
IF SEC=0 THEN ZAM_IKI
IF YUKARI=0 THEN
IF Z=0 THEN sn=SN+1
IF SN=31 THEN SN=0
ENDIF
IF ASAGI=0 THEN
IF Z=0 THEN SN=SN-1
IF SN=255 THEN SN=30
ENDIF
Z=1-Z
GOSUB EKRAN_3
GOSUB GECIKME
GOTO ZAM_BIR
ZAM_IKI:
EKRAN_ZAM=SN:SUM=91
SN=EKRAN_ISI:GOSUB EKRAN_3
WHILE SEC=0:WEND
ZAM_UC:
W=1
IF SEC=0 THEN ZAM_DORT
IF YUKARI=0 THEN
IF Z=0 THEN sn=SN+1
IF SN=31 THEN SN=0
ENDIF
IF ASAGI=0 THEN
IF Z=0 THEN SN=SN-1
IF SN=255 THEN SN=30
ENDIF
Z=1-Z
GOSUB EKRAN_3
GOSUB GECIKME
GOTO ZAM_UC
ZAM_DORT:
EKRAN_ISI=SN
SUM=EKRAN_ZAM+EKRAN_ISI
Z=0:W=0:POZ=0
GOTO ILK
AYAR:
LOW PORTA.3:SN=0:POZ=1
gosub ekran0
WHILE SEC=0:WEND
HOUR: W=1
LOW PORTA.3
IF SEC=0 THEN MINBIR
IF YUKARI=0 THEN
IF Z=0 THEN SAAT=SAAT+1
IF SAAT=24 THEN SAAT=0
ENDIF
IF ASAGI=0 THEN
IF Z=0 THEN SAAT=SAAT-1
IF SAAT=255 THEN SAAT=23
ENDIF
Z=1-Z
GOSUB EKRAN0
GOSUB GECIKME
GOTO HOUR
MINBIR: W=0:Z=0
GOSUB EKRAN0
WHILE SEC=0
WEND
MINUTE: U=1
LOW PORTA.3
IF SEC=0 THEN ara
IF YUKARI=0 THEN
IF Z=0 THEN DAK=DAK+1
IF DAK=60 THEN DAK=0
ENDIF
IF ASAGI=0 THEN
IF Z=0 THEN DAK=DAK-1
IF DAK=255 THEN DAK=59
ENDIF
Z=Z-1
GOSUB EKRAN0
GOSUB GECIKME
GOTO MINUTE
SECBIR: WHILE SEC=0
WEND
U=0
GECIKME:
FOR X=0 TO 3500
PAUSEUS 5
NEXT
RETURN
DELAY:
FOR X=0 TO 1900
PAUSEUS 10
NEXT
RETURN
ARA: W=0:u=0:T=0:Z=0
GOSUB FLASH
Gosub EKRAN0
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
'-------------------------------------------------------------------------------
'----------------ISI SENSÖR OKUMA BÖLÜMÜ --------------------------------
SENSOROKU:
'-----------------DUKKAT USUS'de BU SATIR AKTUF EDULECEK----------------------
' ham=$0200:Gosub hesapla:return 'NORMAL ÇALI~MADA BU SATIR SULUNECEK
'------------------------------------------------------------------------------
OWOUT Comm_Pin, 1, [$CC, $44]' ISI dederini oku
Bekle:
OWIN Comm_Pin, 4, [Busy] ' Busy dederini 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]' Uki byte oku ve okumayu bitir.
GOSUB Hesapla
RETURN
SENSORYAZ:
OWOUT COMM_Pin, 1, [$CC, $4E, $00,$00,$31]
return
Hesapla: ' Ham dederden Santigrat derece hesabu
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 hesabu için 32 bit bölme yapuyoruz.
GEC:
FLOAT = (ISI //1000)/100
ISI=ISI/1000
RETURN
ZAMAN_OKU:
high RTC_RST:OUTPUT rtc_dta
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
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:OUTPUT RTC_DTA
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0] 'WRT Protek açuldu
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 sayacu 1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
CIK: INTCON.2=0 'TMR0 Kesme bayradu sufurlanuyor
RESUME
ENABLE
END
Comment