|
Tài trợ cho PIC Vietnam |
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 |
29-11-2013, 08:16 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Jul 2011
Bài gửi: 10
: |
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 |
Ðiều Chỉnh | |
Xếp Bài | |
|
|