ziopolly Inserito: 31 marzo 2006 Segnala Share Inserito: 31 marzo 2006 Buongiorno a tutti!Sono alle prese con un contatore scritto in assembler per un pic 16f84.Come posso caricare la cifra "0" anzichè "10" dopo un incremento della cifra "9"?...ebbene sì! ... sono proprio alle prime armi.Grazie e ciao da ziopolly Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 31 marzo 2006 Segnala Share Inserita: 31 marzo 2006 scusa ma ti devi spiegare meglio...Caricare dove ? su un registro , su un display , quante cifre e' il contatore?Posta anche il codice , cosi vediamo dove si puo fare la modifica.Non e' la prima volta che scrivi sul forum , sai che piu' dati dai meglio e' Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 2 aprile 2006 Autore Segnala Share Inserita: 2 aprile 2006 Grazie Digicom,quello che intendo fare è un semplice contatore up/down 0 – 999 che, in funzione dello stato (on/off) di due tasti denominati UP e DOWN, incrementa o decrementa il numero visualizzato su tre display.A tal fine ho denominato tre byte del file register CountUnità CountDecine e CountCentinaia che contengono le tre cifre che compongono il numero da incrementare/decrementare e visualizzare.La subroutine che decrementa è scritta, e dovrebbe funzionare. (l’ho testata con MPLAB SIM).Ora dovrei scrivere la subroutine che incrementa: ovvero quando il tasto UP viene pigiato, deve essere incrementato il valore presente in CounUnità il quale, se vale 9 deve diventare 0 e automaticamente si deve incrementare di una unità il valore del CountDecine.Spero di essermi spiegato, ma se non lo fossi stato, ti prego fammelo sapere.Grazie ancora ed arrivederci.ziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 2 aprile 2006 Segnala Share Inserita: 2 aprile 2006 E' banale. If (CountUnità == 9) { CountUnità = 0); if (CountDecine == 9) { CountDecine = 0; if (CountCentinaia < 9) CountCentinaia++; } else CountDecine++; } else CountUnità++;Controllalo perchè sono distratto e ogni tanto dimentico punti e virgola. Comunque il principio mi sembra chiaro Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 3 aprile 2006 Autore Segnala Share Inserita: 3 aprile 2006 Il fatto che ci sia qualcuno che giudica "banale" quello che per me è incomprensibile mi riempe il cuore di gioia!Grazie, Livio Orsini per la pronta risposta.Peccato, però che come già ho confessato in precedenza, comprendo (o meglio dovrei dire NON comprendo) solo ed esclusivamente il linguaggio ASSEMBLER e mi piacerebbe. prima di iniziare a scoprirne altri come il C, approfondire le mie conoscenze di detto linguaggio.Il momento in cui anche per me sarà "banale" scrivere una routine così semplice in ASSEMBLER, potrò probabilmente dedicarmi a nuovi orizzonti più professionali e qualificanti. Un ultima domanda: come considerate quel tizio che alla domanda dell'ignorante: "COME SI SCRIVE LIBRO IN FRANCESE?" gli risponde "BOOK"?Per me la risposta è ...banaleziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 3 aprile 2006 Segnala Share Inserita: 3 aprile 2006 (modificato) A parte il fatto che in francese libro non si traduce "book" (è inglese) ma "livre", il prigramma in "C" serve solo come descrizione di quelle che bisogna fare. Se non avessi messo quelle quttro righe in "C" avrei dovuto scrivere due pagine che sarebbero state ancor meno comprensibili.Un minimo sforzo di traduzione vorrai pur farlo Segui le righe e prova a mettere delle istruzioni assembler con i test ed i salti. Poi magari pubblica il codice e vedrò di dargli un'occhiata. Modificato: 3 aprile 2006 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 3 aprile 2006 Segnala Share Inserita: 3 aprile 2006 Solo una domanda , se hai gia la routine che incrementa , hai gia quella che decrementa , devi solo fare il controllo quando ogni digito arriva a zero .Posta la routine che la modifichiamo. Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 3 aprile 2006 Autore Segnala Share Inserita: 3 aprile 2006 Grazie ancora digicom:UpDownStore call Visual ;Visualizza a turno le cifre presenti nei contatori btfss STORE ;se=1 (non pigiato), salta un'istruzione goto Memorizza ;scrivi nella EEPROM btfss UP ;se=1 (non pigiato), salta un'istruzione goto Incrementa btfss DOWN ;se=1 (non pigiato), salta un'istruzione goto Decrementa goto UpDownStoreMemorizza ;ancora da scrivereIncrementa ;NON SO COME SVILUPPARLA Decrementa movf CountUnita,W ;Copia il valore di CountUnità in W btfss STATUS,Z ;se CountUnità =0, salta un'istruzione goto DecUnita movlw 9 ;metti il 9 nel CountUnità movwf CountUnita movf CountDecine,W ;Copia il valore di CountDecine in W btfss STATUS,Z ;se CountDecine =0, salta un'istruzione goto DecDecine movlw 9 ;metti il 9 nel CountDecine movwf CountDecine movf CountCentinaia,W ;Copia il valore di CountCentinaia in W btfss STATUS,Z ;se CountCentinaia =0, salta un'istruzione goto DecCentinaia movlw 9 ;metti il 9 nel CountCentinaia movwf CountCentinaia movlw 9 ;metti il 9 nel CountDecine movwf CountDecine movlw 9 ;metti il 9 nel CountUnità movwf CountUnita goto UpDownStoreDecUnita decf CountUnita ;decrementa CountUnità goto UpDownStore DecDecine decf CountDecine ;decrementa CountDecine goto UpDownStore DecCentinaia decf CountCentinaia ;decrementa CountCentinaia goto UpDownStore Mi raccomando, non mi rispondere in tedesco....Ciaoziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 3 aprile 2006 Segnala Share Inserita: 3 aprile 2006 (modificato) Questa è la parte unità: movf CountUnita,W ;Copia il valore di CountUnità in W xrolw 9 ; test se unità = 9 skpz ;se = 0 ==> unità = 9 goto inc_unita ; se <9 incremento unità movwf 0,CountUnita movf CountDecine,W;Copia il valore di CountUnità in W ................................................................................... ripeti per decine e centinaia .................................................................................... inc_unita incf CountUnita;incremeta unità goto fine inc_decine incf CountDecine;incremeta decine goto fine inc_cent incf CountCentinaia;incremeta decine fine Controllare perchè sono distratto Modificato: 3 aprile 2006 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 3 aprile 2006 Autore Segnala Share Inserita: 3 aprile 2006 Grazie Orsini per avermi risposto adottando il linguaggio che stò iniziando a balbettare.Nel set di istruzioni del PIC16F84 non ho trovatO SKPZ ma ho risolto nel seguente modo: incf CountUnita ;incrementa CounUnità movlw 10 ;carica il valore 10 in W xorwf CountUnita,W ;OR esclusivo tra CountUnità e W. Se uguali W=0 btfss STATUS,Z ;se W=0, salta un'istruzione goto UpDownStore ;controlla se sono premuti i pulsanti clrf CountUnita ;metti o in CountUnità incf CountDecine movlw 10 xorwf CountDecine,W btfss STATUS,Z goto UpDownStore clrf CountDecine incf CountCentinaia movlw 10 xorwf CountDecine,W btfss STATUS,Z goto UpDownStore clrf CountCentinaia goto UpDownStore Il suggerimento o meglio stratagemma da me cercato per risolvere il problema stava proprio nell'istruzione XORWF da me mai usata. Tale istruzione permette proprio di confrontare due valori secondo le regole del OR ESCLUSIVO.Graze ancora ed arrivedrci alla prossima.ziopolly Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 3 aprile 2006 Segnala Share Inserita: 3 aprile 2006 Basta ragionare un po' e i problemi si risolvono Link al commento Condividi su altri siti More sharing options...
ziopolly Inserita: 3 aprile 2006 Autore Segnala Share Inserita: 3 aprile 2006 Hai perfettamente ragione!Del resto se tutti noi ragionassimo un po' tutto diventerebbe banale... anche questo forum... ziopolly 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