ziopolly Inserito: 20 marzo 2006 Segnala Share Inserito: 20 marzo 2006 (modificato) Il fumo che mi esce dalle orecchie dovrebbe dimostrare che per lo meno ho provato, riprovato e straprovato... ma non ce la faccio!Il problema è semplice (per chi conosce le basi di programmazione):progetto: CONTATORE ALLA ROVESCIA 999-0 micro: PIC 16F84linguaggio: ASSEMBLERLOOP call SEC ;SEC = conta un secondo mentre multiplexa i display decf CountUnita ;Decremento Unità btfss STATUS,Z ;Se CountUnita ha raggiunto lo 0, salta un'istruzione goto LOOP call SEC ;conta ancora un secondo mentre multiplexa con Unita = 0 movlw 9 ;quando ritorna carica il nove nel CountUnita movwf CountUnita decf CountDecine ;Quindi decrementa Decine perchè Unita passa da 0 a 9 btfss STATUS,Z ;Se CountDecine ha raggiunto lo 0, salta un'istruzione goto LOOP ????Se CountDecine = 0 (es. 909) che devo fare per far sì che continui ancora 9 volte il decremento delle unità e successivamente decrementi sia le decine che le centinaia?Probabilmente, mi sfugge qualche stratagemma, o possiedo un Q.I. sotto la norma.Grazie a tuttiziopolly Modificato: 20 marzo 2006 da ziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 20 marzo 2006 Segnala Share Inserita: 20 marzo 2006 (modificato) decf CountDecine ;Quindi decrementa Decine perchè Unita passa da 0 a 9btfss STATUS,Z ;Se CountDecine ha raggiunto lo 0, salta un'istruzionegoto LOOP Modificato: 20 marzo 2006 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 21 marzo 2006 Autore Segnala Share Inserita: 21 marzo 2006 Grazie Livio, ma devi sapere che come non sono in grado di sviluppare una semplice subrutine in assembler, così non comprendo un "h" di qualsiasi altro linguaggio compreso il C.Ciò nonostante mi pare molto strano che per una semplice operazione di riporto si debba scrivere un mega programma.Se riesco a trovare un'istruzione che controlli lo stato di un contatore del file register (se è = a 0) e che mi faccia saltare o meno un'istruzione (tipo btfsc - btfss), forse ho risolto il problema...!?Grazie ancoraCiao a tutti da ziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 21 marzo 2006 Segnala Share Inserita: 21 marzo 2006 ziopolly, purtroppo la programmazione è una disciplina rigorosa. Ci sono solo due modi per fare le cose: il modo corretto e quello sbagliato. Se le cose le fai correttamente tutto funziona correttamente, altrimenti non funziona per niente.Nel tuo caso particolare devi tenere in considerazione che sei in deconteggio, e gli algoritmi inversi sono sempre più complessi di quelli diretti. Devi verificare se le unità sono = 0, poi se le decine sono = 0 ed infine se le centinaia sono = 0; queste tre operazioni vanno eseguite in sequenza, saltandole solo quando al precedente risulta essere diversa da 0;Guarda che tra il C che ti ho scritto e l'assembler per questo algoritmo non c'è poi molta differenza. Link al commento Condividi su altri siti More sharing options...
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