Buonasera a tutti,
avrei l'urgenza di trasformare il seguente programma da mikroc a mikropascal.
Se qualcuno riuscisse a farmelo e a farlo funzionare sarei disposto anche a pagarlo.
E' veramente urgente
@ DEVICE INTRC_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE BOD_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE CCPMX_ON
DEFINE OSC 4 ' Specifica clock a 4MHz
define ADC_BITS 8
DEFINE ADC_SAMPLEUS 50
DEFINE ADC_CLOCK 3
OSCCON = $60 'Imposta clock interno a 4MHz
ADCON1 = 2 'RA0..RA4 pin analogici
TRISA = %00001111
TRISB = %11110000
symbol msx1 = PORTB.0 'motore destro avanti
symbol msx2 = PORTB.1 'motore destro indietro
symbol mdx1 = PORTB.2 'motore sinistro avanti
symbol mdx2 = PORTB.3 'motore sinistro indietro
symbol S1 = PORTB.4 'radar SRF05 DX
symbol S2 = PORTB.5 'radar SRF05 SX
symbol lama = PORTA.4 'motore lama
symbol lch = PORTA.6 'led batteria scarica (giallo)
symbol lan = PORTA.7 'led anomalia (rosso)
umi var byte 'variabile pioggia
Vb var byte 'variabile tensione batteria
tem Var byte 'variabile temperatura
tp var word
mov var word
distdx var word
distsx var word
PORTB = 0
lan=0
lch=0
S1=0
S2=0
pause 500 ' Avvia taglio erba
lama=1
pause 500
mdx1=1 ' Motori avanti
mdx2=0
msx1=1
msx2=0
MAIN
adcin 3,tem 'lettura della temperatura del motore
adcin 2,umi 'lettura dell'umidità
adcin 1,lux 'lettura della luminosità
ADCIN 0,Vb 'lettura della tensione della batteria
if vb<100 then goto standby ' Sottotensione batteria
if tem<80 then goto sicurezza ' sovratemperatura
if umi<80 then goto sicurezza ' Pioggia
pause 500
' Rilevamento ostacolo DX
PULSOUT S1, 2 ' 20usec impulso start
PULSIN S1, 1, distdx ' legge distanza ostacolo DX
' Rilevamento ostacolo SX
PULSOUT S2, 2 ' 20usec impulso start
PULSIN S2, 1, distsx ' legge distanza ostacolo SX
if distdx<300 and distsx<300 then ' Ostacolo di fronte
mdx1=0 ' Fermo motori
mdx2=0
msx1=0
msx2=0
pause 500 ' Indietreggio
mdx1=0
mdx2=1
msx1=0
msx2=1
pause 1000
mdx1=0 ' Fermo motori
mdx2=0
msx1=0
msx2=0
pause 500
' Ruoto rasaerba
random mov
tp = mov/200 ' DX o SX a caso
if (mov//2)=0 then
mdx1=1
mdx2=0
msx1=0
msx2=1
pause tp ' Per un tempo casuale
else
mdx1=0
mdx2=1
msx1=1
msx2=0
pause tp ' Per un tempo casuale
endif
goto MAIN
endif
if distsx < 300 then ' Ostacolo sulla SX
mdx1=0 ' Fermo motore DX finchè ostacolo SX
goto MAIN
endif
if distdx < 300 then ' Ostacolo sulla DX
msx1=0 ' Fermo motore SX finchè ostacolo DX
GOTO MAIN
endif
' Nessun ostacolo riprende la marcia
mdx1=1
mdx2=0
msx1=1
msx2=0
goto MAIN
'SOTTO TENSIONE
standby
PORTB=0
lama=0
lch=1
pause 500
lch=0
pause 500
goto sicurezza
'SOVRATEMPERATURA o PIOGGIA
sicurezza
PORTB=0
lama=0
lan=1
pause 500
lan=0
pause 500
goto sicurezza
end
|