merhaba arkadaşlar pic16f877a için iki kodu birleştirmek istedim fakat iki kodu birturlu aynı anda çalıştıramadım ekteki kodda
Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC
Return
Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"
burdaki return kodunu silince kod
Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"
bu kod çalısıyor return kodunu yazınca
Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC
bu kod çalışıyor bu kodları aynı anda nasıl çalıştırabilirim
Device 16F877A
Xtal = 4
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin PORTC.0
Declare LCD_RSPin PORTC.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50
ADCON1 = %10000000 ' PORTA ve PORTE analog ölçüm girisler aktif.
TRISA = %11111111 ' PORTA'nın tüm pinlerinin giriş
TRISB = 0 'PORTB'nin tüm pinlerinin çıkış
TRISC = 0 'PORTC'nin tüm pinlerinin çıkış
TRISD = 0 'PORTD'nin tüm pinlerinin çıkış
Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword
BASLA:
ADIn 0,HAM
BAK:
If ADCON0.2=1 Then BAK
DelayMS 5
GoSub HESAPV
ADIn 1,HAM
DelayMS 5
GoSub HESAPA
GoSub EKRAN
DelayMS 1500
GoTo BASLA
EKRAN:
GUC=GUCA*GUCV
Print At 1,10,"A=",Dec2 AMPER,".",Dec2 MA
Print At 1,1,"W=",Dec2 GUC
Return
Print At 2, 1, "ISI=:"
Print At 2, 9, "HIZ=:"
Do
analogdeg = ADIn 7 ' Gerilim ölçüm pini PORTE.2 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verirR
aux = analogdeg * 500 / 1023
temp = aux
If temp <> tempu Then
tempu = temp
Print At 2, 5, SDec temp, "C "
Select Case temp
Case < 40
p = 0
Case < 45
p = 40
Case < 50
p = 50
Case < 55
p = 75
Case Else
p = 100
End Select
duty = 255 * p / 100
If Abs(temp - tempa) > 1 And p <> pa Then
pa = p
tempa = temp
Print At 2, 13, Dec p, "% "
HPWM 1, duty, 5000
End If
End If
Loop
HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
Return
End
End
proteus şema
Do'yu kaldırın ve döngüyü return ile değiştirin
Alıntı yapılan: Pepe - 27 Şubat 2024, 16:41:08Do'yu kaldırın ve döngüyü return ile değiştirin
olmadı hocam
Protonla uzun zamandır ilgilenmiyorum.
Sorunuzu çok anlamayadım ama:
GOSUB HESAPV
kodu RETURN satırına kadar çalışır.RETURN satırından sonra ilk gönderildiği GOSUB HESAPV satırının hemen altındaki satıra gider.
GOTO komutunda ise direkt göndermedir return e falan bakmaz.GOTO ABC veya GOSUB ABC gibi bir komuta kadar çalışır
Eğer ekranda Volt ,akım ,sıcaklık,watt hepsi birden görülsün istiyorsanız
Print At 1,1,"W=",Dec2 GUC,"Akım:",Dec2 AMPER,".",Dec2 MA
gibi birşey yazmalısınız -57 ve 58 satırı iptal edip yani bu iki satıra ,(üstten tek tırnaktı sanırım) -ekleyeceksiniz.
Bu arada çok emin değilim ama menüden seçilerek displayde Voltaj Akım,Güç yada Voltaj,Akım ,Sıcaklık değerleri görülüyor olabilir
Alıntı yapılan: Epsilon - 28 Şubat 2024, 17:57:55Protonla uzun zamandır ilgilenmiyorum.
Sorunuzu çok anlamayadım ama:
GOSUB HESAPV
kodu RETURN satırına kadar çalışır.RETURN satırından sonra ilk gönderildiği GOSUB HESAPV satırının hemen altındaki satıra gider.
GOTO komutunda ise direkt göndermedir return e falan bakmaz.GOTO ABC veya GOSUB ABC gibi bir komuta kadar çalışır
Eğer ekranda Volt ,akım ,sıcaklık,watt hepsi birden görülsün istiyorsanız
Print At 1,1,"W=",Dec2 GUC,"Akım:",Dec2 AMPER,".",Dec2 MA
gibi birşey yazmalısınız -57 ve 58 satırı iptal edip yani bu iki satıra ,(üstten tek tırnaktı sanırım) -ekleyeceksiniz.
Bu arada çok emin değilim ama menüden seçilerek displayde Voltaj Akım,Güç yada Voltaj,Akım ,Sıcaklık değerleri görülüyor olabilir
cevabınız için teşekkür ederim
;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings
Device = 16F877A
Config FOSC_HS, WDTE_OFF, PWRTE_OFF, BOREN_OFF, LVP_OFF, CPD_OFF, WRT_OFF, DEBUG_OFF, CP_OFF
;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------
Xtal = 4
Declare Create_Coff On
Declare Bootloader off
Declare Watchdog off
Declare Float_Display_Type = Fast
Declare Dead_Code_Remove = 1 ' Remove dead code
Declare Reminders Off
Declare Hints Off
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin PORTC.0
Declare LCD_RSPin PORTC.1
Declare LCD_RWPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare LCD_Type 0
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 50
ADCON1 = %10000000 ' PORTA ve PORTE analog ölçüm girisler aktif.
TRISA = %11111111 'PORTA'nin tüm pinlerinin giris
TRISB = 0 'PORTB'nin tüm pinlerinin çikis
TRISC = 0 'PORTC'nin tüm pinlerinin çikis
TRISD = 0 'PORTD'nin tüm pinlerinin çikis
Dim VOLT As Word
Dim HAM As Word
Dim HVD As Word
Dim AMPER As Word
Dim MV As Byte
Dim MA As Byte
Dim GUC As Float
Dim GUCA As Float
Dim GUCV As Float
Dim p As Byte
Dim pa As Byte = 1
Dim analogdeg As Word
Dim temp As SWord
Dim tempu As SWord
Dim tempa As SWord
Dim duty As Byte
Dim aux As Dword
Print At 1,10,"A="
Print At 1,1,"W="
Print At 2,1,"T="
Print At 2,8,"HIZ=:"
BASLA:
ADIn 0,HAM
BAK:
If ADCON0.2=1 Then BAK
DelayMS 5
GoSub HESAPV
ADIn 1,HAM
DelayMS 5
GoSub HESAPA
GoSub EKRAN
DelayMS 1500
GoTo BASLA
EKRAN:
GUC=GUCA*GUCV
Print At 1,12,Dec2 AMPER,".",Dec2 MA
Print At 1,3,Dec2 GUC
analogdeg = ADIn 7 ' Gerilim ölçüm pini PORTE.2 LM 35 bagli. LM35 10 mv/C olacak sekilde çikis verirR
aux = analogdeg * 500 / 1023
temp = aux
If temp <> tempu Then
tempu = temp
Print At 2,3,SDec temp,"C "
Select Case temp
Case < 40
p = 0
Case < 45
p = 40
Case < 50
p = 50
Case < 55
p = 75
Case Else
p = 100
EndSelect
duty = 255 * p / 100
If Abs(temp-tempa)>1 And p<>pa Then
pa = p
tempa = temp
Print At 2, 13, Dec p, "% "
HPWM 1, duty, 5000
EndIf
EndIf
Return
HESAPV:
HVD=((HAM+1)*/875)/10
VOLT=HVD/10
MV=(HVD)//10
GUCV=VOLT+(MV/100)
Return
HESAPA:
HVD=(HAM+1)*/250
AMPER=HVD/100
MA=HVD//100
GUCA=AMPER+(MA/100)
Return
End