PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Dịch giúp đoạn code (http://www.picvietnam.com/forum/showthread.php?t=33116)

minhthanh29 29-11-2013 08:16 PM

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=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

hatuan296 30-11-2013 03:59 AM

1 Attachment(s)
Bạn kiểm tra thử xem .

minhthanh29 30-11-2013 05:13 PM

Trích:

Nguyên văn bởi hatuan296 (Post 83640)
Bạn kiểm tra thử xem .


Chạy được nhưng không chỉnh giờ được ( trong mô phỏng) con mạch thật thì nó không chạy. Cái mạch này dùng thạch anh nội, nó khai báo đâu ở đoạn code này:
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_off
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT

con trong file bạn gửi minh không thấy!

Trích:

Nguyên văn bởi hatuan296 (Post 83640)
Bạn kiểm tra thử xem .


Chạy được nhưng không chỉnh giờ được ( trong mô phỏng) con mạch thật thì nó không chạy. Cái mạch này dùng thạch anh nội, nó khai báo đâu ở đoạn code này:
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_off
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
con trong file bạn gửi minh không thấy!

File mô phỏng: http://www.mediafire.com/download/6q...mo%20phong.rar
File gốc dùng LED âm chung (mã nguồn saat44.bas): http://www.mediafire.com/download/6q...mo%20phong.rar

hatuan296 30-11-2013 09:35 PM

Code:


@ DEVICE pic16F628                                                   
@ DEVICE pic16F628, WDT_ON             
@ DEVICE pic16F628, PWRT_ON         
@ DEVICE pic16F628, PROTECT_OFF     
@ DEVICE pic16F628, MCLR_off           
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT

Khi mình để đoạn code trên vào chương trình thì trình biên dịch báo lỗi . Không cho phép biên dịch .

minhthanh29 30-11-2013 10:20 PM

Trích:

Nguyên văn bởi hatuan296 (Post 83649)
Code:


@ DEVICE pic16F628                                                   
@ DEVICE pic16F628, WDT_ON             
@ DEVICE pic16F628, PWRT_ON         
@ DEVICE pic16F628, PROTECT_OFF     
@ DEVICE pic16F628, MCLR_off           
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT

Khi mình để đoạn code trên vào chương trình thì trình biên dịch báo lỗi . Không cho phép biên dịch .

Nhưng phải có nó mới chạy, bạn biết cách khai báo thạch anh nội và mấy chân của pic không (WDT_ON, PWRT_ON, PROTECT_OFF, MCLR_off, INTRC_OSC_NOCLKOUT)

hatuan296 30-11-2013 11:12 PM

1 Attachment(s)
Mình phải vào file INC của dòng PIC 16F628 để thay đổi . Sau khi xem file mô phỏng của bạn , mình thấy mô phỏng không cho phép cài đặt thời gian là đúng vì khi biên dịch chương trình ta chưa set MCLR_OFF để tận dụng chân reset làm phím nhập chế độ .

Bạn thử với chương trình mình đã thay đổi xem sao . Lưu ý là mình chỉ mới set MCLR_OFF thôi , còn những cái khác mình giữ nguyên như trong file INC đã set sẵn . Mình test với mô phỏng thì thấy hoạt động .

minhthanh29 01-12-2013 01:42 AM

File inc nằm ở thư mục nào vậy bạn

hatuan296 01-12-2013 03:17 AM

File 16F628.inc thuộc trình biên dịch Picbasic Pro bạn ơi . Nó có dạng như sau

Code:


;****************************************************************
;*  16F628.INC                                                  *
;*                                                              *
;*  By        : Leonard Zerman, Jeff Schmoyer                  *
;*  Notice    : Copyright (c) 2002 microEngineering Labs, Inc.  *
;*              All Rights Reserved                            *
;*  Date      : 09/27/02                                        *
;*  Version  : 2.43                                            *
;*  Notes    :                                                *
;****************************************************************
        NOLIST
    ifdef PM_USED
        LIST
        include 'M16F62x.INC'  ; PM header
        device  pic16F628, xt_osc, wdt_on, pwrt_on, mclr_off, lvp_off, protect_off
        XALL
        NOLIST
    else
        LIST
        LIST p = 16F628, r = dec, w = -302
        INCLUDE "P16F628.INC"  ; MPASM  Header
        __config _XT_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
        NOLIST
    endif
        LIST


minhthanh29 01-12-2013 12:37 PM

Mình mới cài pic basic pro nhưng không thấy bạn hướng dẫn mình cách add và biên dịch được không, cảm ơn

minhthanh29 01-12-2013 01:15 PM

Mình thêm dòng INCLUDE <P16F628A.inc> trong file .bas nhưng nó báo lỗi

hatuan296 02-12-2013 01:25 AM

Trích:

Nguyên văn bởi minhthanh29 (Post 83657)
Mình thêm dòng INCLUDE <P16F628A.inc> trong file .bas nhưng nó báo lỗi

Bạn cài phần mềm xong thì những file .INC sẽ tự động có trong ổ C bạn ơi .
Những file này sẽ nằm trong thư mục PBP thuộc ổ C .

Khi biên dịch code thì phần mềm Picbasic Pro sẽ lấy file .INC , tùy thuộc vào bạn viết code cho chip nào thì Picbasic Pro sẽ lấy file .INC của chip đó . Trường hợp của bạn là 16F628.INC . File .INC giống như để khởi tạo cho chip , khởi tạo Xtal, watchdog , power on reset ......
Cho nên khi viết code , bạn không cần phải include nữa .

minhthanh29 02-12-2013 02:03 AM

Trích:

Nguyên văn bởi hatuan296 (Post 83666)
Bạn cài phần mềm xong thì những file .INC sẽ tự động có trong ổ C bạn ơi .
Những file này sẽ nằm trong thư mục PBP thuộc ổ C .

Khi biên dịch code thì phần mềm Picbasic Pro sẽ lấy file .INC , tùy thuộc vào bạn viết code cho chip nào thì Picbasic Pro sẽ lấy file .INC của chip đó . Trường hợp của bạn là 16F628.INC . File .INC giống như để khởi tạo cho chip , khởi tạo Xtal, watchdog , power on reset ......
Cho nên khi viết code , bạn không cần phải include nữa .

Mình lấy code của bạn gửi biên dịch nnhung nó có lỗi

minhthanh29 02-12-2013 02:04 AM

Bạn có TeamView không add giúp mình

hatuan296 02-12-2013 07:08 PM

Trích:

Nguyên văn bởi minhthanh29 (Post 83667)
Mình lấy code của bạn gửi biên dịch nnhung nó có lỗi

Bạn bị lỗi như thế nào ? bạn chụp hình lỗi lại để mình xem thử . Mình không có teamview bạn ơi .

minhthanh29 03-12-2013 12:22 AM

Trích:

Nguyên văn bởi hatuan296 (Post 83699)
Bạn bị lỗi như thế nào ? bạn chụp hình lỗi lại để mình xem thử . Mình không có teamview bạn ơi .


Mình làm được rồi nhưng khi chỉnh giờ nó bị giật số, rất khó chỉnh, bạn fix lại giúp mình được không

http://www.mediafire.com/download/mz...0DC%20V1.2.rar


Múi giờ GMT. Hiện tại là 05:18 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam