Pic basic ve Proton basic kod çevrimi Data aktarımı Hakkında

Katılım
18 Ocak 2008
Mesajlar
1,068
Puanları
156
Yaş
39
Öncelikle herkese selamun aleyküm ve günaydın...
Daha önceden pic basicde yapılmış çalışan ve çalıştığını da kendimin denediğim bir proje kodu vardı elimde DS18B20 yi okutup ekrana yazdırıyordu 16f628A ile yapılmış kodları şu şekilde :

@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628a , INTRC_OSC_NOCLKOUT
@ DEVICE pic16f628a , MCLR_OFF
cmcon=7
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
pause 500
lcdout $fe,1,"artvin_li_murat"
lcdout $fe,$c0," @hotmail.com"
pause 2500
lcdout $fe,1
SYMBOL DQ=PORTA.0
MEM VAR BYTE
ISI VAR WORD
HAM VAR WORD
TA1 VAR WORD
TA2 VAR WORD
TA3 VAR WORD
TA4 VAR WORD
TA5 VAR WORD

PAUSE 200
BASLA:
OWOUT DQ,1,[$CC,$44]
DONGU:
OWIN DQ,4,[ISI]
IF ISI=0 THEN DONGU
OWOUT DQ,1,[$CC,$BE]
OWIN DQ,2,[HAM.LOWBYTE,HAM.HIGHBYTE]

IF HAM.BIT11=0 THEN HESAPLA
IF HAM.BIT11=1 THEN HESAPLA1
GOTO BASLA


HESAPLA:
TA2=HAM.LOWBYTE
TA2=TA2//16
TA2=TA2/2
TA2=TA2*125
ta2=ta2/10


TA1=HAM//16
TA1=HAM-TA1
TA1=TA1/16
lcdout $fe,1," tekniker_murat"
LCDOUT $FE,$C0,"+",#TA1,".",#TA2
LCDOUT $FE,$C5,"C"
GOTO BASLA

HESAPLA1:
TA3=$FFFF-HAM+1
TA4=TA3//16
TA4=TA4/2
TA4=TA4*125
ta4=ta4/10


TA5=TA3//16
TA5=TA3-TA5
TA5=TA5/16
lcdout $fe,1," tekniker_murat"
LCDOUT $FE,$C0,"-",#TA5,".",#TA4
LCDOUT $FE,$C5,"C"
GOTO BASLA

END

Sonra ben bu kodları aldım proton basicde çalışacak bir şekilde dizayn etmeye çalıştım bu projedeki amacım şöyle olcak;Devrede 1 tane 12F675 bir tanede 18F4550 var bu 12F675 DS18B20 yi okuyacak sonra bu okuduğu kodu GP1 pininden 18f4550 nin RC1 pinine asenkron seri iletişim yolu ile yollayacak bunu alan 18f4550 de ekrana yazdıracak.
12F675 için yazdığım kodlar şunlar yani proton diline çevirmeye çalıştığım yukarıdaki programın son şekli...

Device 12F675
Config CPD_OFF,CP_OFF,BODEN_OFF,MCLRE_OFF,PWRTE_OFF,WDT_OFF,INTRC_OSC_NOCLKOUT
Include "modedefs.bas"
ANSEL=0
CMCON=7
Symbol gon=GPIO.1
Symbol DQ=GPIO.5
Dim mem As Byte
Dim isi As Word
Dim ham As Word
Dim ta1 As Word
Dim ta2 As Word
Dim ta3 As Word
Dim ta4 As Word
Dim ta5 As Word

DelayMS 200
BASLA:
OWrite DQ,1,[$CC,$44]
'OWOUT DQ,1,[$CC,$44]
DONGU:
ORead DQ,4,[isi]
'OWIN DQ,4,[ISI]
If isi=0 Then DONGU
OWrite DQ,1,[$CC,$BE]
ORead DQ,2,[ham.LowByte,ham.HighByte]
'OWOUT DQ,1,[$CC,$BE]
'OWIN DQ,2,[HAM.LOWBYTE,HAM.HIGHBYTE]

If ham.11=0 Then HESAPLA
If ham.11=1 Then HESAPLA1
GoTo BASLA


HESAPLA:
ta2=ham.LowByte
ta2=ta2//16
ta2=ta2/2
ta2=TA2*125
ta2=ta2/10


ta1=ham//16
ta1=HAM-TA1
ta1=ta1/16
SerOut gon,N2400,[#ta1,ta2]
GoTo BASLA

HESAPLA1:
ta3=$FFFF-HAM+1
ta4=ta3//16
ta4=ta4/2
ta4=TA4*125
ta4=ta4/10


ta5=ta3//16
ta5=TA3-TA5
ta5=ta5/16
SerOut gon,N2400,[#ta5,ta4]
GoTo BASLA

End

Bunlarda 18F4550 için yazdığım kodlar...

Device 18F4550
Include "modedefs.bas"
@CONFIG_REQ
@__CONFIG CONFIG1H, FOSC_HS_1
@__CONFIG CONFIG2L, PWRT_OFF_2 & VREGEN_OFF_2 & BOR_OFF_2
@__CONFIG CONFIG2H, WDT_OFF_2
@__CONFIG CONFIG3H, MCLRE_OFF_3 & LPT1OSC_OFF_3 & PBADEN_OFF_3 & CCP2MX_OFF_3
@__CONFIG CONFIG4L, STVREN_OFF_4 & LVP_OFF_4 & ICPRT_OFF_4 & XINST_OFF_4 & DEBUG_OFF_4
@__CONFIG CONFIG5L, CP0_OFF_5 & CP1_OFF_5 & CP2_OFF_5 & CP3_OFF_5
@__CONFIG CONFIG5H, CPB_OFF_5 & CPD_OFF_5
@__CONFIG CONFIG6L, WRT0_OFF_6 & WRT1_OFF_6 & WRT2_OFF_6 & WRT3_OFF_6
@__CONFIG CONFIG6H, WRTB_OFF_6 & WRTC_OFF_6 & WRTD_OFF_6
@__CONFIG CONFIG7L, EBTR0_OFF_7 & EBTR1_OFF_7 & EBTR2_OFF_7 & EBTR3_OFF_7
@__CONFIG CONFIG7H, EBTRB_OFF_7
ADCON1=$0F
ALL_DIGITAL TRUE
XTAL 10
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.2
Declare LCD_INTERFACE 4
Declare LCD_LINES 4
Symbol lcd_isik=PORTD.3
Symbol saat_al=PORTC.0
Symbol isi_al=PORTC.1
Dim tam As Byte
Dim onda As Byte
Dim saat As Byte
Dim dakika As Byte
Dim saniye As Byte
Dim gun As Byte
Dim ay As Byte
Dim yil As Byte
Low lcd_isik
Low saat_al
Low isi_al
basla:
GoSub reklam
GoSub isi_oku
'GoSub saat_oku
GoSub yaz
GoTo basla
reklam:
Low lcd_isik
DelayMS 100
High lcd_isik
DelayMS 100
Print $fe,1
Print At 1,1,"ELEKTRONiK TEKNiK ER"
Print At 2,1,"MURAT YAGCI"
Print At 3,1,"artvin_li_murat@hot-"
Print At 4,1,"mail.com"
DelayMS 2500
Low lcd_isik
DelayMS 100
High lcd_isik
DelayMS 100
Return
isi_oku:
SerIn isi_al,N2400,[tam,onda]
Return
saat_oku:
'SerIn saat_al,N2400,[saat,dakika,saniye,gun,ay,yil]
Return
yaz:
Print $fe,1
Print At 1,1,"isi=","+",#tam,".",#onda
DelayMS 3000
Return
GoTo basla

Sorun ise şu:pic12F675 DS12B20 yi okuyup 18F4550 ye attığı değeri ben ekranda görüyorum ama saçma sapan değerler.
Sonra ds18b20 yi söküyorum bu defa değer okumaması gerekirken yine daha abuk sabuk değerler okuyo ve ekrana basıyo.
Bu çalışmada yapılan hata acaba nerede pic basic kodlarını protona çevirirken yanlış yapmış olabilirmiyim özellikle şu komutlarda:

OWOUT DQ,1,[$CC,$BE]
OWIN DQ,2,[HAM.LOWBYTE,HAM.HIGHBYTE]

OWrite DQ,1,[$CC,$44]
ORead DQ,4,[isi]

OWrite DQ,1,[$CC,$BE]
ORead DQ,2,[ham.LowByte,ham.HighByte]
'OWOUT DQ,1,[$CC,$BE]
'OWIN DQ,2,[HAM.LOWBYTE,HAM.HIGHBYTE]

bu komutlarda OWOUT ve OWIN komutları picbasic dili için OWrite ile ORead da proton basic komutları
Bu durumda:
OWOUT un yaptığı işi OWrite
OWIN in yaptığı işi de ORead yapıyo olarak değerlendirdim bu değerlendirme yanlış mı tam tersi mi olcak bu konuda yardımcı olursanız çok memnun olurum...
 
OWrite DQ,1,[$CC,$44]
'OWOUT DQ,1,[$CC,$44]

bu kodu ne için kullandın acab açıklayabilir misin neden
[$CC,$44],[$CC,$BE] bu değerler sabit mi? şimdiden teşekkürler
 
Merhaba dostum,

Atladığın tek şey değer ve ondalığı yazdırdığında başına Dec yazmalısın (decimal)

Örnek:



Print At 1,1,"isi=","+",dec tam,".",dec onda
 

Forum istatistikleri

Konular
128,128
Mesajlar
915,276
Kullanıcılar
449,845
Son üye
burak_duyar

Yeni konular

Geri
Üst