Bru87 Inserito: 7 aprile 2013 Segnala Inserito: 7 aprile 2013 Sto imparando a programmare in awl e mi servirebbe una mano su un piccolo programmino... Ho impostato le uscite da A0.0 a A0.7 e vorrei che queste si accendessero sequenzialmente con una frequenza di 1Hz. Per creare la frequenza di un herz ho utilizzato un merker di clock, e per poter accendere le uscite in modo tale che prima si accende solo A0.0, poi solo A0.1, poi solo A0.2 e così via pensavo di utilizzare l'operazione di shift su un valore dell'accumulatore. Questo però non mi funziona. Potete consigliarmi?
Livio Orsini Inserita: 7 aprile 2013 Segnala Inserita: 7 aprile 2013 Perchè non ti funziona? Prova postare la sezione di codice che hai implementato.
Bru87 Inserita: 7 aprile 2013 Autore Segnala Inserita: 7 aprile 2013 ora non ce l'ho sotto mano, ma ho caricato il valore 1 (per poter accendere A0.0) nell'accumulatore e ogni volta che è alto l'accumulatore di clock eseguivo la traslazione e trasferivo il valore di accumulatore in un byte collegato alle uscite. l'unica uscita che resta accesa è (A0.1). Può essere dovuto al fatto che ogni volta mi si ricarica il valore 1 nell'accumulatore? per poterlo evitare come posso fare?
Livio Orsini Inserita: 7 aprile 2013 Segnala Inserita: 7 aprile 2013 Facciamo un reset. Supponiamo che le uscite interessate siano il byte A0.0 -------A0.7. Al primo ciclo setti a "1" l'uscita A0.0. Alla scdenza del clock copy il byte delle uscite nell'accumulatore, esegui uno shft a sx, poi ricopi laccumulatore nel byte di uscita. Ovvimante devi verificare quando va a "1" il bit 8 dell'cumulatore. Per riprendere il ciclo daccapo devi resettare il bit 8 e settare il bit 0. Questo è uno degli svariati modi per eseguire la rotazione ciclica. Altri potrebbero suggeirti metodi differenti, ognuno ha le sue preferenze.
Bru87 Inserita: 8 aprile 2013 Autore Segnala Inserita: 8 aprile 2013 Segmento 1 -- per caricare valore iniziale Un m0.0 L 1 T mw1 S m0.0 Segmento 2 U m 5.5 -- merker di clock L MW 1 -- word collegata in uscita Slw T mw1 Cosi non funziona... Mi fa solo lo shift iniziale . dove sbaglio?
batta Inserita: 8 aprile 2013 Segnala Inserita: 8 aprile 2013 Chi è che comanda M0.0? Non vedo nessuna istruzione che faccia ripartire il sistema dal primo bit, una volta effettuato lo shift completo. La tua intenzione è sempre quella di comandare le uscite da A0.0 ad A0.7? Se è così, invece di usare una MW (16 bit) usa un MB (8 bit). Il merker M5.5 è un merker che hai creato tu oppure fa parte del merker byte di sistema impostato in configurazione hardware? Se fa parte del byte di sistema, non va alto per una scansione ogni secondo, ma rimane alto per 500 ms e basso per 500 ms. Quando va alto (e vi rimane per 500 ms) non fa quindi un solo shift. Potresti provare così: U M 5.5 FP M 16.0 //Rileva fronte di salita merker di clock SPBN M000 //Elabora istruzioni una sola volta ogni secondo L MB 17 SLW 1 T MB 17 L W#16#FF //Maschera il byte alto UW SPP M000 //Se il byte basso è zero, riparti da 1 L 1 T MB 17 M000: NOP 0 L MB 17 //Trasferisci risultato alle uscite T AB 0
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora