OK, ci divertiremo un po 'di più con le nostre luci, aggiungendo un altro paio di Ltd, se
lo si desidera.
E ti sfido a scrivere il tuo codice questa volta.
Ora ti presenterò due nuove istruzioni e come utilizzarle ti forniranno un paio di suggerimenti e alcuni
fogli di codice.
Ma lascerò a te la responsabilità di scrivere il programma da solo.
Ora ti ricordi l'auto KITT di Knight Rider, la luce nella parte anteriore ti farebbe andare avanti e indietro.
Lo faremo con l'LSD.
E in effetti alziamo un po 'la posta e ti sfido a creare vari schemi ora.
Jake Wolf su YouTube dimostra qui alcuni dei modelli che ha sulla sua auto.
Quindi ricorda che hai l'intero set di istruzioni di prelievo completo di come ogni istruzione funziona nella tua scheda
tecnica per la tua scelta.
E ti senti libero di attaccarlo come preferisci, ma ti presenterò due nuove
istruzioni dal set di istruzioni.
L s l f per uno spostamento logico a sinistra e ls sono F per il giusto spostamento logico.
Diciamo che ho un file o registro e contiene questo numero binario.
Invio l'istruzione l s l f che è uno spostamento logico lasciato su un file.
Prende ogni bit nel registro e lo sposta a sinistra di un bit, mette uno 0 nel bit meno
significativo e il bit che esce l'altro capo viene spinto su uno speciale registro a bit singolo chiamato registro
carry.
Usiamo quel registro per le operazioni matematiche e lo affronteremo più in dettaglio più avanti.
Quindi puoi vedere come questa istruzione può essere utile per il nostro carico di luce della tua auto kit. Laxey up con
tutti gli zeri tranne uno sul bit meno significativo.
Hai fino a sei birilli.
Quindi colleghiamo e ho fatto tutti e sei i pin che ora posso spostare il registro a sinistra.
E ogni volta che lo sposto a sinistra, spegne l'attuale Delly e accende il successivo LCD in sequenza.
Ora questo è bello fino alla fine, perché ora possiamo andare nella direzione opposta.
Non è un problema.
Rilasciamo uno spostamento logico delle istruzioni su un file.
Fa esattamente la stessa cosa che fa solo nella direzione opposta.
Carica uno zero nel bit più significativo sposta tutti i bit nel registro un bit a destra
e il bit meno significativo va nel registro carry.
Ora non ci interessa il registro di carry in questo caso perché non stiamo facendo calcoli.
Quindi l'istruzione di spostarsi a sinistra sarebbe simile a questa.
Abbiamo l'istruzione di eseguire uno spostamento logico lasciato su un file.
Quindi diciamo quale file su cui vogliamo eseguire il turno.
E poi c'è di nuovo quel numero di destinazione.
Questa è una di quelle istruzioni passo-passo sempre così potenti in cui
una volta eseguita la traslazione logica possiamo inserire il numero risultante nel registro di lavoro
o direttamente nel file da cui proviene A-one vuol dire che abbiamo restituito il risultato giusto nel registro C registro spostamento logico.
Destra.
Segue lo stesso formato esattamente lo stesso formato.
OK, ecco un modo per rendere Lightwork il kit per auto.
Potresti anche fare una serie di passaggi in cui carichi il registro di lavoro con il numero che desideri,
quindi trasferisci il registro di lavoro alla latenza in questo modo.
Quindi mentre scorre il programma hai appena detto manualmente che quale output vuoi che Manimal
abbia programmato manualmente il pattern di luce.
Questo ha un vantaggio in quanto puoi semplicemente programmare schemi molto complessi perché stai mettendo il tuo
supercomputer incredibilmente ben progettato al lavoro invece del plettro.
Ad esempio, potresti facilmente creare uno schema di luci multiple in due sequenze diverse.
Il vantaggio di usare l'istruzione di spostamento logico è che puoi metterlo in un loop con un bit test.
Quindi, nello spazio per le istruzioni, potresti continuare a spostarti a sinistra finché il tuo test più grande non vedrà che
il bit più alto è ora alto.
Ora nel nostro caso abbiamo solo queste quattro società.
Quindi il bit tre è il bit più alto con un LCD.
Può quindi lasciare quel ciclo e inviarlo al ciclo.
Lo spostamento a destra di un bit zero diventa alto.
Quindi torna al loop spostando a sinistra.
Quindi, se avessi un registro a 16 bit con 16 diversi cavi collegati, ovviamente questo sarebbe
un modo più semplice.
Così come puoi già iniziare a vedere ci sono un sacco di modi diversi per farlo.
E sono tutti corretti.
Funzionano tutti.
Ora ricorda che l'orologio funziona a 16 milioni di cicli al secondo.
Quindi, anche se dai a ciascuna istruzione una media di otto cicli di clock per completare il loro
lavoro sono ancora due milioni di istruzioni al secondo.
Ovviamente è necessario inserire ritardi, altrimenti sembrerà che le donne siano costantemente in movimento.
Non hai accesso alla ram generica delle auto GPS, quindi puoi utilizzarla e impostare un ciclo di conto alla rovescia come quello
che abbiamo fatto con il programma di rimbalzo.
Ma possiamo solo memorizzare un numero di un byte nella nostra ram.
Ciò significa che possiamo contare solo da 255 a 0.
Ora fai un po 'di matematica grezza qui e una media di due milioni di istruzioni al secondo.
Quello è diviso per 2 milionesimi di secondo o 0. 00 0 0 0 0 5 secondi per istruzione.
Quindi, per il conto alla rovescia da 205 a 255, prenderà il punto zero 0 0 0 1 2 7 5 secondi.
Non è un gran ritardo ora.
Quindi devi raddoppiare i tuoi conteggi.
Se impostiamo due registri con un numero decimale di 255 e il conto alla rovescia da
255 a 0 duecentocinquanta cinque volte, 255 volte 255 volte zero punto zero zero zero zero zero cinque secondi equivale a zero punto zero o
da tre a cinque secondi.
Così ora il ritardo sta diventando abbastanza lungo che il tuo occhio potrebbe vederlo ma è ancora molto veloce.
Quindi abbiamo questo tipo di loop ritardato
nel codice di esempio che puoi copiare e incollare e usarlo se vuoi.
E ho già capito i tempi.
Quindi ti ricordi di nuovo nel nostro primo programma di immagini che abbiamo visto che il numero di cicli
di clock necessari per eseguire una funzione può cambiare radicalmente dalla funzione alla funzione destra.
Alcuni passaggi hanno richiesto solo uno o due cicli di clock.
Altri ne hanno fatti otto.
In realtà ho impostato e cronometrato il programma per ottenere una gestione dei tempi.
E ha funzionato a circa sei cicli di clock per istruzione nel mio programma.
Quindi questo può ritardare il ciclo di circa zero punto cinque secondi per eseguire ora.
Ci andrò ma ci andrò comunque.
In realtà è piuttosto semplice.
L'ho impostato come subroutine con il ritorno alla fine.
Per prima cosa carichiamo la prima e la seconda posizione della RAM generica con 255 Quindi impostiamo un ciclo con il
conto alla rovescia 255 volte sulla RAM numero uno quando premiamo 0.
Facciamo il conto alla rovescia sul secondo Ramm,
poi torniamo indietro e torniamo a contare da 255 di nuovo sul primo Ramm continuiamo a farlo finché anche la
seconda RAM raggiunge lo zero.
A quel punto torniamo semplicemente indietro dove mai chiami la subroutine Snel.
Se usassimo un terzo registro, possiamo semplicemente chiamare quel ciclo di Candler tutte le volte che è
necessario per ottenere il ritardo che vogliamo ogni volta che chiamiamo che può ritardare il ciclo.
Otteniamo uno 0. Ritardo di 5 secondi che anche il terzo registro Ramme è un singolo byte.
Quindi possiamo contare fino a duecentocinquantacinque volte e a 0. 05 secondi per chiamata possiamo ritardare fino a dodici
virgola sette cinque secondi prima che sia necessario ottenere un quarto Ramme coinvolto nel conto alla rovescia.
Quindi diamo un'occhiata a un codice di esempio presumendo che abbiamo già impostato tutto e le nostre Ltd sono
sulla porta C ..
Quindi impostiamo un ciclo principale, quindi
impostiamo tutto l'ultimo C a tutti i più alti in modo che tutti i primi giorni siano attivi.
Quindi carichiamo il nostro terzo indirizzo ram registro hex indirizzo 0 7 2 con un conteggio decimale 10 impostato.
Quante volte chiamiamo la subroutine del programma di utilità e a 0. 05 secondi ogni volta che lo chiamiamo che ci dà
circa uno 0. 5 secondi di pausa.
Quindi, dopo aver impostato un'etichetta che segna l'inizio di dove teniamo
queste derivazioni, chiamiamo l'utility delay utility la subroutine che è in basso qui in
basso, che lega il processore per circa 0. Dopo 5 secondi e dopo averlo restituito, contiamo 1 sulla terza RAM e poi
torniamo al rivenditore con il ritardo dell'etichetta.
Quindi torniamo al ritardo di utilità per un altro 0. 05 secondi ritorna indietro con il conto alla rovescia e fallo di nuovo.
Continuiamo a farlo finché il nostro terzo ram non raggiunge lo zero.
Quindi disattiviamo tutti i primi DS su pt. S..
Ricarichiamo la nostra terza posizione del ram con un valore di 10 e quindi ciclichiamo le chiamate di ritardo per l'utility
Eataly.
Quindi inviamo il programma all'inizio del ciclo principale.
Accendere i primi giorni e fare nuovamente il conto alla rovescia ha senso.
Quindi puoi davvero lanciare questo codice in un progetto e flashare la tua foto con te se lo desideri
e se sei davvero coraggioso, sostituisci il terzo registro di ram con una variabile in modo da poter cambiare
semplicemente e facilmente il tempo del lampeggio cambiando un numero .
Quindi ora è il tuo momento di brillare.
Ti darò alcuni errori o problemi comuni in cui ti imbatterai quando stai cercando di
scrivere il tuo programma e alcuni suggerimenti prima di provare a lampeggiare.
Salva il tuo progetto per prima cosa costruisci il tuo programma.
Quindi, se per costruire un successo, il flash pick può appendere il laboratorio vuoto se si tenta di lampeggiare o raccogliere e la compilazione fallisce
a causa di un errore e si otterrà un sacco di cose.
Questa è solo una parte della programmazione.
Non essere troppo duro con te stesso.
Ora, per i principianti, vai avanti e copia e incolla il codice di installazione nel tuo programma.
Questo ti farà iniziare e come la tua programmazione.
Si noti che riconosce i comandi li trasforma in blu scuro.
Diciamo che ho fatto un refuso.
W L invece di L W nota che diventa viola.
Non lo riconosce come un comando quindi assume che sia una variabile di qualche tipo.
Variabili in viola.
Quindi ricontrollalo.
Qualcosa è incasinato lì.
Le etichette sono nere e quando hai bisogno di creare un'etichetta hai bisogno di quei due punti alla fine.
Ma quando si invia il programma a un'etichetta con il comando go o un comando di chiamata.
Non ci sono due punti alla fine del nome di questa etichetta.
Quindi ricorda le uniche linee che dovrebbero essere nella prima colonna.
L'estrema sinistra dovrebbe essere etichette, tutto il resto deve essere rientrato di almeno uno spazio.
In caso contrario, verrà generato un errore quando lo creerai e ti dirà quale fosse la riga
incriminata e probabilmente ti dirà che ha trovato un comando quando si aspettava un'etichetta.
Tutti i commenti dovrebbero diventare verdi se non verdi Hai dimenticato il punto e virgola all'inizio della cometa.
Uno degli errori più comuni che si otterranno è l'etichetta non definita.
Ti dirà quale linea e quale etichetta è andata cercando.
Ci sono diversi motivi per cui questo può accadere.
Uno metti la tua subroutine o etichetta dopo il comando di fine o hai sbagliato a scrivere l'etichetta o il nome dell'etichetta in cui
hai fatto una chiamata o vai a.
Hai usato una capitale da qualche parte.
Hai accidentalmente digitato due lettere di seguito nel nome o tre hai semplicemente dimenticato di
creare un'etichetta se hai dimenticato i due punti alla fine dell'etichetta.
5 Se hai dimenticato di dichiarare una variabile ma hai usato una variabile nel tuo programma.
Questo può accadere se lo scrivi in un comando da qualche parte e sai che intendi inserire la dichiarazione
più tardi.
E poi hai semplicemente dimenticato un altro errore comune che può causare tutti i tipi di stranezza: ti
dimentichi di selezionare una banca ogni volta che esegui qualsiasi comando che implica il cambiamento comporta la modifica di un registro.
Lancia il comando di selezione bancaria solo per essere sicuro che ti farà risparmiare un sacco di capelli che tirano il dolore.
Fidati di me su questo.
L'ho fatto esattamente quando stavo scrivendo questa lezione e mi ci è voluto un tempo per capire
perché il mio programma non funzionava.
Il tuo programma deve avere un comando di fine.
Ma assicurati che sia alla fine, se ti piace che ho provato a fare un paio di volte
e hai messo
il tuo sottomarino che sai dopo il comando, il compilatore sputerà strani errori su come non hai definito un'etichetta.
La verità è che sta cercando un'etichetta dopo il comando di fine.
Ma quando il compilatore lo vede e lo comanda, presuppone che sia la fine del programma.
Quindi un'ultima cosa che in realtà non è un errore comune ma può accadere.
Otterrai uno stack overflow o un underflow dello stack.
L'occorrenza più comune di un overflow dello stack è quando chiami la tua super squadra.
Ma poi stai scherzando.
E invece di inserire un ritorno alla fine della subroutine, metti un goto.
Quindi torna qui e fa di nuovo tutto per ottenere la chiamata al sottomarino.
Alla fine si riversa lo stack perché si hanno troppe chiamate e non si ottengono sufficienti ritorni.
Un underflow dello stack accade più spesso in questo modo.
Non c'è niente qui che mi rimandi all'inizio.
Quindi, una volta completato il ciclo continua, passa attraverso il ciclo temporale, quindi visualizza un comando di ritorno.
Non ha mai avuto il comando del codice.
Quindi lo stack è effettivamente vuoto.
Quindi quando vede il comando return ottieni una condizione di underflow dello stack.
Troppi ritorni non sufficienti chiamate.
Così mentre costruisci il tuo codice guarda gli errori ti dirà spesso esattamente quale sia l'errore.
E a volte anche come risolverlo.
Va bene ti lascio attaccare il programma se funziona.
Hey.
Video nella sezione domande o commenti.
Mostraci cosa hai fatto.
Se non funziona e non riesci a capirlo, pubblica il tuo codice nella sezione delle domande che cosa stai
cercando di fare e che cosa sta facendo.
Un altro insieme di occhi può a volte fare una grande differenza.