Video: Simulatore Deeds: interrupt e routine di servizio dell'interrupt (Lezione 6) 2025
Le subroutine PBASIC hanno un valore inestimabile nei progetti di elettronica che utilizzano un processore BASIC Stamp. Una subroutine è una sezione di un programma che può essere richiamata da qualsiasi posizione nel programma. Al termine della subroutine, il controllo del programma torna alla posizione da cui è stata chiamata la subroutine.
Le subroutine sono utili perché ti permettono di separare parti lunghe del tuo programma dal ciclo principale del programma, il che semplifica il ciclo del programma principale per renderlo più facile da capire. Un altro vantaggio delle subroutine è che possono rendere il programma più piccolo.
Supponiamo che tu stia scrivendo un programma che ha bisogno di eseguire calcoli complicati più volte. Se si posiziona il calcolo complicato in una subroutine, è possibile chiamare la subroutine da più punti del programma. In questo modo, si scrive il codice che esegue il calcolo complicato solo una volta.
Per creare e utilizzare subroutine, è necessario utilizzare due comandi PBASIC. Il primo è GOSUB, che chiama la subroutine. Generalmente usi il comando GOSUB all'interno del loop principale del tuo programma ogni volta che vuoi chiamare la subroutine. Il secondo comando è RETURN, che è sempre l'ultimo comando nella subroutine.
Per creare una subroutine, si inizia con un'etichetta e si termina con un comando RETURN. Tra questi, si scrivono tutti i comandi che si desidera eseguire quando viene chiamata la subroutine.
Ecco un esempio di una subroutine che genera un numero casuale compreso tra 1 e 999 e lo salva in una variabile chiamata Rnd:
GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN
Per chiamare questa subroutine, dovresti semplicemente usare un comando GOSUB come questo:
GOSUB GetRandom
Questo comando GOSUB trasferisce il controllo all'etichetta GetRandom. Quindi, quando la subroutine GetRandom raggiunge il comando RETURN, il controllo torna al comando immediatamente successivo al comando GOSUB.
Ecco un programma completo che utilizza una subroutine per ottenere un numero casuale compreso tra 1 e 1, 000 e usa il numero casuale per far lampeggiare il LED sul pin 0 a intervalli casuali. È possibile eseguire questo programma su qualsiasi circuito del timbro di base che abbia un LED sul pin 0.
'LED Blinker Program' Doug Lowe '10 luglio 2011 "Questo programma lampeggia il LED sul pin 0 in modo casuale.' {$ STAMP BS2} '{$ PBASIC 2. 5} Rnd VAR Word Led1 PIN 0 DO GOSUB GetRandom ALTO Led1 PAUSE Rnd LOW Led1 PAUSE 100 LOOP GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN
Quando si utilizza una subroutine, è vitale che impedisci al tuo programma di "cadere" accidentalmente nella tua subroutine ed eseguirlo quando non hai intenzione di eseguirlo.Ad esempio, supponiamo che il programma nel Listato 3-5 abbia usato un ciclo FOR-NEXT invece di un ciclo DO perché volevi far lampeggiare il LED solo 100 volte. Ecco un esempio di come non per scrivere quel programma:
FOR Counter = 1 TO 100 GOSUB GetRandom HIGH Led1 PAUSE Rnd LOW Led1 PAUSE 100 NEXT GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN
Capisci perché? Dopo che il ciclo FOR-NEXT lampeggia il LED 100 volte, il programma continuerà con il comando successivo dopo il ciclo FOR-NEXT, che è la subroutine!
Per evitare che ciò accada, puoi usare ancora un altro comando PBASIC, END, che dice semplicemente al BASIC Stamp che hai raggiunto la fine del tuo programma, quindi dovrebbe smettere di eseguire comandi. Dovresti inserire il comando END dopo il comando NEXT, in questo modo:
FOR Counter = 1 TO 100 GOSUB GetRandom HIGH Led1 PAUSE Rnd LOW Led1 PAUSE 100 NEXT END GetRandom: RANDOM Rnd Rnd = Rnd // 999 + 1 RETURN > Quindi, il programma si fermerà dopo il ciclo FOR-NEXT.
