PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 29-11-2013, 08:16 PM   #1
minhthanh29
Nhập môn đệ tử
 
Tham gia ngày: Jul 2011
Bài gửi: 10
:
Post Dịch giúp đoạn code

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
http://www.mediafire.com/view/v57mn4z4w7zkc2z/code.bas

'************************************************* ***************
'* Name : dong ho.BAS *
'* Author : *
'* Notice : Copyright (c) 2013 [ETE] *
'* : All Rights Reserved *
'* Date : 29.11.2013 *
'* Version : 1.0 LED (44) *
'* Notes :


'************************************************* ***************
PORTA=0ortb=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 TERSCEVIRAK=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 CEVIRAK=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
minhthanh29 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:40 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam