I.T.I.S. “M. PLANCK” LANCENIGO DI VILLORBA (TV) GEOMAGNETOMETRO FLUXGATE MODELLO TL30 Ferdinando Barbon CLASSE 5 A ELETTRONICA TELECOMUNICAZ. SER. A.S. 2005/2006 Ferdinando_Barbon SOMMARIO ¾ Capitolo 1 .....................................................................................................................................2 Il campo Geomagnetico ......................................................................................................2 • Introduzione storica .........................................................................................................2 • Il campo ...........................................................................................................................2 • Influenze ...........................................................................................................................3 • La bussola .........................................................................................................................4 • Le componenti Del Campo Magnetico .............................................................................5 ¾ Chapter 1......................................................................................................................................6 The Geomagnetic field ........................................................................................................6 • Historical introduction ......................................................................................................6 • The field ............................................................................................................................6 • Influences..........................................................................................................................7 • The compass......................................................................................................................8 • Magnetic Field components..............................................................................................9 ¾ Capitolo 2 ...................................................................................................................................10 I sensori Fluxgate...............................................................................................................10 • Principio di funzionamento.............................................................................................10 ¾ Capitolo 3 ...................................................................................................................................12 Il fluxgate FGM 03h ..........................................................................................................12 • Caratteristiche tecniche del sensore ................................................................................12 ¾ Capitolo 4 ...................................................................................................................................14 Il sensore di temperatura....................................................................................................14 • Introduzione ....................................................................................................................14 • Descrizione .....................................................................................................................15 • Comandi:.........................................................................................................................16 ¾ Capitolo 5 ...................................................................................................................................18 La trasmissione seriale.......................................................................................................18 • Introduzione ....................................................................................................................18 • Schema applicativo .........................................................................................................19 ¾ Capitolo 6 ...................................................................................................................................23 Magnetometro differenziale Fluxgate................................................................................23 • Introduzione ....................................................................................................................23 • Presentazione progetto ....................................................................................................23 • Centralina master ............................................................................................................23 • Unita remota differenziale ..............................................................................................24 • Software di comunicazione.............................................................................................24 • Circuito elettrico .............................................................................................................24 • Alimentazioni..................................................................................................................24 • Procedimento ..................................................................................................................24 • Caratteristiche tecniche geomagnetometro .....................................................................25 ¾ Capitolo 7 ...................................................................................................................................26 Schemi e grafici .................................................................................................................26 Datasheet Display LCD .....................................................................................................32 Forma d’onda del segnale d’uscita del Fluxgate ...............................................................34 ¾ Capitolo 8 ...................................................................................................................................37 Programmi .........................................................................................................................37 • Programma di raccolta dati su PC...................................................................................37 • Software per gestione PIC16C84P..................................................................................50 • Software per gestione PIC16F877P ................................................................................58 1 Ferdinando_Barbon Capitolo 1 Il campo Geomagnetico Introduzione storica Plinio il Vecchio (23-79 D.C.) nel Libro di Storia Naturale, narra che il nome Magnete proviene dal pastore Cretese di nome “Magnes “ il quale adoperando il suo bastone con la punta di ferro, scopri la proprietà di attrazione e repulsione di alcune pietre che furono chiamate magnetiche. Oggi sappiamo che tali pietre contengono la magnetite, un magnete naturale composto di ossidi di ferro. Le proprietà magnetiche di alcuni materiali erano già note dai tempi antichi in India ed in Cina. Nel 1600, William Gilbert, che fu più tardi il medico della regina Elizabeth I dell'Inghilterra, pubblicava il suo grande studio sul magnetismo, "De Magnete". Vi dava la prima spiegazione razionale del comportamento misterioso che aveva l'ago William Gilbert della bussola ad indicare nella direzione nord-sud: la terra stessa era magnetica. "De Magnete" apriva l'era della fisica e dell'astronomia moderna, e cominciava allora un secolo, segnato dai grandi lavori di Galileo, Kepler, Newton e di altri. Il campo Il campo geomagnetico è generato dalle correnti elettriche situate in molte parti differenti della terra. Nel nucleo esterno, la parte principale del campo geomagnetico, è mantenuto da una dinamo naturale. Nella superficie le correnti possono essere indotte tramite le variazioni nel tempo del campo magnetico ambientale. Nella crosta il campo viene indotto anche da componenti magnetiche permanenti. Nella ionosfera e nella magnetosfera le correnti elettriche sono mantenute da un'interazione complicata con il sole, il campo heliomagnetico ed il vento solare delle particelle caricate. Con la loro posizione particolare, Le molte diverse e remote fonti del campo magnetico della terra contribuiscono ciascuna al campo totale con i processi fisici molto differenti in ogni luogo e provocano un'ampia varietà di variazioni geomagnetiche temporali. Di conseguenza, attraverso l'analisi delle serie cronologiche del campo magnetico delle diverse posizioni geografiche, le differenti zone di Fig. 1: Il nucleo della terra sorgente che sono sotto o sopra la superficie della terra, possono essere studiate per scopi scientifici. Il controllo e l'analisi del campo geomagnetico sono inoltre importanti per le applicazioni pratiche, alcune delle quali sono state utilizzate da secoli. Il campo magnetico viene ora studiato per l'orientamento, la navigazione, la ricerca di idrocarburi, del minerale; ecc… 2 Ferdinando_Barbon Influenze Di interesse più recente è quanto il campo magnetico possa influenzare le attività della nostra società moderna basata sulla tecnologica. Ciò è particolarmente interessante durante le cosiddette tempeste magnetiche, quando la comunicazione radio può essere difficile o impossibile, il sistema di posizionamento globale (GPS) può essere degradato, i circuiti elettronici satellitari possono essere danneggiati, la durata del satellite può essere aumentata, gli astronauti ed i piloti di alta quota possono essere sottoposti all’aumento dei livelli di radiazione, la corrosione di condutture, griglie elettriche possono generare degli impulsi di tensione causando mancanze di corrente elettrica. Le manifestazioni più belle di attività geomagnetiche sono le aurore, visioni marcate alle alte latitudini vicino ai poli geomagnetici. Data la pluralità di fenomeni geomagnetici, non sorprende che i gruppi scientifici interessati ai dati del magnetismo siano numerosi e vari. Fig. 2: Magnetosfera 3 Ferdinando_Barbon La bussola Forse la dimostrazione più famigliare della realtà del campo magnetico della terra è la tendenza che ha l'ago della bussola di orientarsi al nord, una proprietà che è stata sfruttata dai navigatori per secoli. Una bussola è costruita in modo che il relativo ago magnetico sia libero di ruotare nel piano orizzontale. Ma se dovessimo consentire all'ago di avere una libertà di orientamento in tutte le direzioni, sospendendo l'ago da un filetto in modo che possa orientarsi liberamente sia orizzontalmente che verticalmente, troveremmo che l'allineamento dell'ago varierebbe da un punto all’altro della terra. Ancora, se dovessimo misurare la forza sull'ago magnetico che lo induce a posizionarsi, troveremmo che la resistenza di questa forza è proporzionale all'intensità del campo magnetico, inoltre varia continuamente con la posizione nello spazio. Queste proprietà possono essere usate per tracciare una famiglia di linee di forza. A qualsiasi punto sulla superficie della terra, l'orientamento del vettore geomagnetico è descritto convenzionalmente usando due angoli: 1 declinazione, l'angolo fra il componente orizzontale ed il Fig. 3: La bussola nord magnetico 2 inclinazione, l'angolo fra il piano orizzontale ed il vettore del campo. L'intensità del campo magnetico, che è indipendente dal sistema di coordinate di riferimento, è rappresentata dalla lunghezza del vettore. CENTRI UFFICIALI TromsøGeophysical Observatory Fig. 4: centri ufficiali misure Geomagnetiche 4 Ferdinando_Barbon Le componenti Del Campo Magnetico Le componenti del campo magnetico:(X, Y, Z) definiscono i componenti cartesiani (Nord, Est, verso il centro della terra), la rappresentazione del settore H è di tipo polare e quindi I angolo d’inclinazione del vettore magnetico riguardo al piano orizzontale, e F l'intensità di campo totale. Il campo magnetico della terra è spesso descritto come approssimativamente dipolare, con le linee di forza che escono dal polo geomagnetico sud per convergere al polo geomagnetico nord, come rappresentato nella figura qui sotto. Anche se questa descrizione è utile per molti scopi, non è particolarmente esatta. La parte dipolare del campo realmente è inclinata di approssimativamente 11° rispetto all'asse di rotazione e ci sono ingredienti supplementari e non-dipolari nel campo geomagnetico, che, una volta aggiunti insieme, formano il campo di superficie totale Fig. 5:Componenti asse magnetico caratterizzato da tutta la sua complessità. Come conseguenza di questa complessità, non solo il senso dell'ago della bussola devia dal nord reale, ma la quantità della deviazione, la declinazione, varia in funzione della posizione geografica. Questo fatto è sempre stato storicamente un problema per i navigatori e, non sorprende che sia stato un motivo che ha aiutato le indagini globali sul campo magnetico terrestre. Un'altra misura semplice della geometria del campo è quella della posizione dei poli magnetici. Al polo geomagnetico nord, il nostro ago magnetico indicherebbe verso il basso, mentre al polo geomagnetico del sud, l'ago indicherebbe una posizione verso l’alto. Per questi motivi, i poli geomagnetici a volte si riferiscono come bipolari. Il polo geomagnetico del nord è situato nell'Artide canadese circa alla latitudine 82°N ed alla longitudine 248°E. Il polo geomagnetico del sud è situato nel sud dell'oceano antartico dell'Australia circa alla latitudine 65°S ed alla longitudine 138°E. Si può notare che i poli geomagnetici non sono contrapposti e l’asimmetria è ovviamente un'altra misura della complessità geometrica del campo. Fig.6: Campo geomagnetico 5 Ferdinando_Barbon Chapter 1 The Geomagnetic field Historical introduction Plinio the Old (the 23-79 B.C.) in the Natural History Book, it narrates that the name Magnet comes from the Cretese shepherdesses of name "Magnes" which using its stick with the iron tip, discover to the property of attraction and repulsion of some stones that were calls magnetic. . Today we know that such stones contain the magnetite, a natural magnet composed of iron oxides. The magnetic properties of some materials were already notes from the ancients times in India and China. In 1600, four hundred years ago William Gilbert, later physician to Queen Elizabeth I of England, published his great study of magnetism, "De Magnete". It gave the first rational explanation to the mysterious ability of William Gilbert the compass needle to point north-south: the Earth itself was magnetic. "De Magnete" opened the era of modern physics and astronomy and started a century marked by the great achievements of Galileo, Kepler, Newton and others. The field The geomagnetic field is generated by electric currents located in many different parts of the Earth. In the outer core the main part of the geomagnetic field is sustained by a naturally occurring dynamo. In the mantle currents can be induced by time-dependent variations in the ambient magnetic field. In the crust the field has both induced and permanent components. In the ionosphere and magnetosphere electric currents are sustained through a complicated interaction with the Sun, the heliomagnetic field, and the solar wind of charged particles. The many different, and sometimes remote, sources of the Earth's magnetic field each contribute to the total field at any one particular location, with the very different physical processes in each domain giving rise to a wide variety of time-dependent geomagnetic variations. Therefore, through the analysis of the time series of the magnetic field from different geographic locations, the different Fig. 1: The nucleus of the earth source regions, be they below or above the Earth's surface, can be studied for the purposes of scientific scopes. The monitoring and analysis of the geomagnetic field is also important for practical applications, some of which have been used from centuries. The magnetic field can be used for orientation, navigation, and mineral and oil exploration, ecc… 6 Ferdinando_Barbon Influences Of more recent interest the magnetic field is how much can influence the activities of our modern society based on the technological one. That is particularly interesting during the so-called magnetic storms, when the communication radio can be difficult or impossible, global-positioning systems (GPS) can be degraded, the satellite electronics circuits can be damaged, the duration of the satellite can be increased, the astronauts and the pilots of high- altitude can be subordinates to the increase levels of radiation, the corrosion of ducts and electric-power grids workers can generate of the tension impulses causing blackouts. The most beautiful manifestations of geomagnetic activity are aurorae, seen prominently at high latitudes near the geomagnetic poles. Given the plurality of geomagnetic phenomena, it is not strange that the interested scientific groups to the data of the magnetism are numerous and several. Fig. 2: Magnetosphere 7 Ferdinando_Barbon The compass The Perhaps the most familiar demonstration of the reality of the Earth's magnetic field is the tendency that has the needle of the compass to orient itself to the north, a property that has been exploited by navigators for centuries. A compass is constructed, of course, such that its magnetic needle is free to rotate in the horizontal plane. But if we were to permit the compass needle to have full directional freedom, suspending the needle (say) from a thread so that it could freely obtain its orientation both horizontally and vertically, we would find that the alignment of the needle would vary continuously from one point in space to another. Furthermore, if we were to measure the force on the magnetic needle causing it to assume its preferred alignment, we would find that the strength of this force, proportional to the intensity of the magnetic field, also varies continuously with position in space. These properties can be used to map a of lines of force. At any one point on the surface of the Earth the orientation of the geomagnetic vector is conventionally described using two angles: declination, the angle between the horizontal component Fig. 3: The compass of the magnetic-field vector relative to true north, and inclination, the angle between the horizontal plane and the field vector. The intensity of the magnetic field, which is independent of the reference coordinate system, is represented by the length of the vector. OFFICIAL CENTERS TromsøGeophysical Observatory Fig. 4: official centers Geomagnetic measures 8 Ferdinando_Barbon Magnetic Field components The magnetic-field components: (X,Y,Z) define the Cartesian components (north, east, towards the center of the earth), the rappresent of the H field is of polar type and therefore I horizontal plane (I) is inclination with regard to the horizontal plan, and (F) is the total field intensity. The magnetic field of the Earth is often times described as being approximately dipolar, with field lines emanating from the south geomagnetic pole and converging at the north geomagnetic pole, as depicted in the figure below. Although this description is useful for many purposes, it is not particularly accurate. The dipolar part of the field is actually tilted by approximately 11° with respect to the rotational axis, and there are additional, non-dipolar ingredients in the geomagnetic field, all of which, when added together, are the total superficial field in all of its complex Fig. 5: Magnetic field components detail. As a result of this complexity, not only does the direction of the compass needle deviate from true north, but the amount of the deviation, the declination, varies as a function of geographic location; see the map below. This fact has been an historical problem for navigators, and, not surprisingly, it helped to motive some of the original global-scale surveys of the Earth's magnetic field. Another simple measure of the field's geometry is the position of the magnetic poles. At the north geomagnetic pole, our freely moving magnetic needle would point down, whilst at the south geomagnetic pole, the needle would point up. For these reasons, the geomagnetic poles are sometimes referred to as 'dip poles'. The north geomagnetic pole is located in the Canadian Arctic at about 82°N latitude and 248°E longitude. The south geomagnetic pole is located in the Antarctic Ocean south of Australia at about 65°S latitude and 138°E longitude. Note that the geomagnetic poles are not antipodal, an asymmetry that is just another measure of the field's geometric complexity. Fig.6: geomagnetic field 9 Ferdinando_Barbon Capitolo 2 I sensori Fluxgate I sensori Fluxgate sono dei dispositivi in grado di misurare campi magnetici lentamente variabili nel tempo e con variazioni lente di temperatura intorno a quella ambientale. Hanno cominciato ad essere utilizzati negli strumenti elettronici intorno al periodo della seconda guerra mondiale. Da molti anni sono di interesse scientifico e tecnologico per la loro praticità e per l’applicabilità in diversi ambiti. I geomagnetometri Fluxgate sono strumenti molto versatili, utilizzati tanto sulla terra che nello spazio per misurare le componenti vettoriali del campo magnetico. La loro gamma tipica si estende da 0.1 nanoTesla circa ad 1 milliTesla. Uno degli strumenti più comunemente impiegato nella ricerca archeologica è il gradiometro di tipo “Fluxgate”, appositamente predisposto per ricerche di questo tipo. Si tratta di una strumentazione portatile, compatta e leggera, alimentata a batteria, costituita da un’unità centrale a microprocessore per la programmazione del sistema di rilievo e dotata di memorie. I Fluxgate trovano impiego anche nella realizzazione di bussole elettroniche comunemente utilizzate nella strumentazione di bordo navale. In campo militare sono utilizzati nella produzione di apparecchiature di rilevazione dei sottomarini, per l'individuazione di mine antiuomo, nel settore spaziale per controllare il posizionamento di satelliti; ma anche in campo tecnologico hanno una notevole versatilità per i metal detectors oppure per i rilevatori di giacimenti sotterranei come il petrolio. I Fluxgate inoltre sono adatti in tutte quelle aree in cui possa essere necessario misurare distorsioni locali dell’intensità del campo magnetico terrestre, spesso associate a movimenti della crosta terrestre, cioè in campo geologico e geofisico. Le loro potenzialità sono in relazione alle ridotte dimensioni e alla grande sensibilità, in grado di apprezzare variazione anche dell’ordine del nT. Gli studi attuali sono indirizzati a migliorarne le prestazioni attraverso la realizzazione di nuovi schemi di funzionamento; grazie inoltre al crescente sviluppo tecnologico, orientato anche alla ricerca di materiali sempre più efficienti, è stato possibile ridurne notevolmente le dimensioni, ampliandone ulteriormente le possibilità di utilizzo. Principio di funzionamento Il funzionamento dei sensori Fluxgate si basa sulla non linearità magnetica di un nucleo di materiale ferromagnetico, quale ad esempio il FeNi. In una semplice schematizzazione, il sensore può essere rappresentato come un nucleo cilindrico di materiale ferromagnetico ad alta permeabilità, intorno al quale sono avvolte due bobine coassiali, denominate “bobina di riferimento” e “bobina di rilevazione”, come rappresentato in figura 7. La bobina di eccitazione (o di riferimento) alimentata in modo alternato (onda triangolare in questo caso) con ampiezza HO, crea un campo magnetico circostante (B); il relativo campo magnetico allinea gli assi magnetici degli atomi nel nucleo Fig.7: Schema di principio del sensore Fluxgate ferromagnetico con la funzione di potenziare il campo stesso. Questo campo causa alternativamente una saturazione periodica del materiale ferromagnetico nei punti massimi, sia nella semionda positiva che in quella negativa (figura 8). 10 Ferdinando_Barbon Esistono determinate ferriti dove la saturazione avviene bruscamente e completamente, ad un definito livello stabile, se una corrente alternata abbastanza grande alimenta una bobina avvolta intorno ad un nucleo di tale materiale; le inversioni magnetiche del nucleo avvengono avanti e indietro e la saturazione si presenta a metà di ogni ciclo in modo simmetrico. Il segnale presente sulla bobina di rilevazione sarà come rappresentato in figura 8 (basso a destra). Se tuttavia questa bobina è situata completamente o parzialmente in un campo magnetico esterno direzionato esattamente o approssimativamente lungo l'asse del nucleo della ferrite HD+HO, la simmetria viene modificata (figura 9). A metà del ciclo in cui il campo della bobina raggiunge la massima ampiezza, la saturazione arriva leggermente in anticipo; questo è causato dalla presenza di un campo maggiore dipendente dall'intensità magnetica esterna statica sommata a quella della bobina. Nell’altra metà del ciclo, in cui il campo esterno statico si oppone a quello della bobina, la saturazione avviene leggermente in ritardo. B Zona di saturazione t H Zona di saturazione t t1 2 H0 e -d0 dt t Fig8: Grafici in assenza di campo esterno B Zona di saturazione H t Zona di saturazione t1 t2 HD+H0 e -d0 dt t Fig.9: Grafici in presenza di campo esterno 11 Ferdinando_Barbon Il segnale presente sulla bobina di rilevazione sarà come rappresentato in fig. 9 (basso a destra). Questa asimmetria (errore di fase) può essere percepita ed elaborata attraverso ulteriori circuiti elettronici. Alcuni blocchi che possono essere utilizzati sono: il PLL (Phase lock loop), il PSD (Phase Sensitive Detection) o altri sistemi di comparazione di fase. Il rumore elettromagnetico che limita la sensibilità del Fluxgate è determinato dall’effetto Barkhausen, associato al movimento oscillatorio delle pareti dei domini nel nucleo, quando si applica il campo di riferimento. La risoluzione dei magnetometri Fluxgate è principalmente limitata dalla stabilità del sensore di riferimento al variare della temperatura. La variazione dell’offset dipende dal livello di rumore e dall’instabilità nel tempo del sensore . Il dispositivo misura la componente secondo l’asse del nucleo di un campo magnetico stazionario o di bassa frequenza, con una sensibilità che può raggiungere il nanoTesla. Nei sistemi commerciali di alta qualità, impiegati in misure di precisione del campo magnetico e nei test non distruttivi, il corrispondente livello di rumore risulta essere inferiore a 20pT/Hz. Capitolo 3 Il fluxgate FGM 03h I sensori magnetometri Fluxgate FGM 03h sono costruiti da Speake & dal Co., I magnetometri sono particolarmente sensibili e sono destinati a misurare le piccole fluttuazioni del campo geomagnetico. Il modello FGM-3h è il più sensibile nella gamma di sensori Speake, ed in effetti è così sensibile che si satura se allineato lungo il flusso terrestre Nord-Sud. Normalmente è usato allineato nella direzione di Est-Ovest, che è equivalente a misurare il vettore Y del campo; ciò approssimativamente proporzionale alla declinazione magnetica D. Il campo a zero del magnetometro è situato in una zona a cui corrispondere una frequenza vicino ai 68 kHz. Per allineare il magnetometro si procede in questo modo: (1) regolando il magnetometro il più vicino all'asse magnetico di Est-Ovest (2) trovando l'allineamento del magnetometro tale che, quando si inverte esattamente il sensore nella stessa direzione, la frequenza dell'uscita rimane la stessa. Notare tuttavia che la curva di risposta ottenuta non dà una risposta lineare concentrata sulla misura del campo zero La risposta non comincia neppure vagamente a diventare lineare fino all’applicazione di campi magnetici positivi. Il punto migliore di funzionamento del sensore è intorno allo zero, corrispondente alle frequenze fra 60 e 70 kHz, dove la risposta è un po’ più di 1 Hz/nT. Si nota dalle caratteristiche fornite dal costruttore, che i sensori sono approssimativamente lineari nel periodo e non nella frequenza, visto che la risposta in Hz/nT varia approssimativamente come il quadrato della frequenza del sensore, a 40 kHz è circa 0.5 Hz/nT, mentre a 80 kHz (due volte la frequenza), è circa 2 Hz/nT, o 4 volte più grandi. Questa sensibilità alla reazione non deve essere confusa con la sensibilità del fluxgate . Caratteristiche tecniche del sensore Tensione di alimentazione: 5v +/- 0.5v Corrente tipica 12 mA Campo di temperatura 0 a 50° C Segnale di uscita: da 50 kHz a 120 kHz proporzionale al campo magnetico misurato. Banda passante: da DC a ~20kHz. 12 Ferdinando_Barbon Figura 10: Dimensioni e collegamenti Grafico 1: Campo magnetico/ Periodo Foto 1: Fluxgate FGM-3 Speake 13 Ferdinando_Barbon Capitolo 4 Il sensore di temperatura Introduzione Il sensore digitale DS18B20 è un integrato prodotto dalla DALLAS SEMICONDUCTORS, viene consegnato in contenitore TO-92 , SOIC o uSOP ( fig. 11 e Tab.1), fornisce misure di temperatura in gradi Centigradi; il valore della misurazione è generato sotto forma di segnale digitale da 9 a 12 bit. 1 Inoltre è provvisto di una funzione di allarme con livelli di trigger alti e bassi programmabili dall’ utente e allocati in memorie non volatili . Il sensore DS18B20 comunica tramite il protocollo 1-Wire®, un protocollo standard che permette di usare un solo filo di comunicazione (e massa) per il colloquio con un microprocessore centrale. E’in grado di misurare temperature da -55°C a 125°C con una precisione di 0.5°C nella gamma compresa tra -10°C a +85°C. Un'altra caratteristica del DS18B20 è la capacità di funzionare senza un’alimentazione esterna. L'alimentazione preferibilmente è assicurata tramite la resistenza di “Pull up” sulla linea 1Wire®; quando il bus è alto, viene caricato un condensatore interno (c), che a sua volta fornisce l'alimentazione necessaria al dispositivo allorquando il bus si trova basso. Questo metodo di prelevare l'alimentazione dal bus 1-Wire® viene classificata come "alimentazione parassita.". In alternativa il DS18B20 può anche essere collegato ad un’alimentazione esterna ( Fig. 12). Figura 12: Configurazione del DS18B20 con alimentazione esterna 14 Ferdinando_Barbon Ogni DS18B20 ha un codice seriale univoco a 64-bit, che permette di fare funzionare più sensori sullo stesso bus 1-Wire®. E’ possibile usare fino a 100 sensori su una linea di lunghezza che potrebbe arrivare fino a 300m, quindi, è facile utilizzare un solo microprocessore per controllare molti DS18B20 distribuiti in un’ampia area. Le applicazioni che possono trarre beneficio da questa tecnica di indirizzamento univoco includono i controlli dell’ambiente, sistemi di controllo della temperatura all'interno delle costruzioni, controlli nelle attrezzature, nei macchinari,nei sistemi di processo e di controllo. Descrizione Come precedentemente indicato, la Figura 11 mostra uno schema a blocchi del DS18B20 e la pedinatura viene elencata in tabella 1 La ROM a 64-bit immagazzina il codice seriale univoco del dispositivo. La memoria tampone contiene un registro da 2 byte per memorizzare l’uscita digitale che proviene dal sensore di temperatura. In più, permette l’accesso ai registri da 1 byte per i trigger di allarme massimo e minimo TH e TL, questi registri sono allocati in EEPROM non volatile, viene mantenuta così l’informazione anche in assenza di alimentazione. In questo specifico progetto, il dispositivo DS18B20 comunica con un PIC modello PIC16C84P tramite l’uscita "open collector" attraverso la porta RA0. Il valore logico uno viene quindi generato da una resistenza di “Pull-up” da 4,7 kOhm collegata da un lato al polo positivo (5V) e dall’altro lato all’uscita RA0, quindi i due dispositivi che dialogano Tabella 1 possono scrivere uno ZERO collegando la linea a massa o scrivere un UNO semplicemente "rilasciando la linea". La comunicazione viene impostata dal "master", cioè dal PIC. Fig. 13 15 Ferdinando_Barbon Comandi: RESET Quando il PIC inizia a dialogare deve inviare sulla linea un "impulso di reset" che consiste nel mettere la linea a ZERO e mantenerla per un tempo compreso fra i 480 e i 960us, nel nostro caso è stato impostato a 500 microsecondi. Dopo l'impulso di reset il PIC si mette in ascolto. A questo punto la sonda, dopo avere interpretato l'impulso di reset risponde con un impulso di presenza che consiste nel mettere la linea a ZERO a partire da 15-60us dall'impulso di reset e per un tempo compreso fra i 60 e i 240us. (Figura 13). Il flag "errore,0" vale UNO se il PIC non ha trovato la sonda, ovvero se non vi è stato alcun impulso di “presence” sulla linea. A questo punto inizia la comunicazione vera e propria. Dopo l'inizializzazione il bus-master, cioè il PIC, può finalmente dialogare con la sonda. Figura 13 SKIP ROM (OXCC) Subito dopo l'inizializzazione il bus master invia alla sonda un comando che si chiama "SKIP ROM" XCC. Quando la sonda riceve questo comando sa che subito dopo deve attendersi un comando diretto a lei che riguarda le sue funzioni di "sonda". Il comando “SKIP ROM” dice alla sonda di "saltare" l'invio del codice univoco da 64 bit che nel nostro caso è perfettamente inutile avendo a che fare con una sola sonda. START CONVERSION (OX44) Quindi dopo il comando di "SKIP ROM" spediamo il comando “START CONVERSION” OX44 Esiste anche all’occorrenza, una "configuration word" che può essere programmata e una memoria in cui memorizzare un valore di temperatura in base al quale la sonda può fare da allarme settando un flag quando la temperatura supera tale valore, in questo caso non è stato utilizzata questa 16 Ferdinando_Barbon opzione. Dopo il comando "converti temperatura" (OX44) la sonda ha esaurito il suo ciclo di operazioni e ha bisogno di essere reindirizzata. La routine principale quindi dovrà eseguire di nuovo un impulso di reset per inizializzare nuovamente la sonda SCRATCHPAD (OXBE) Quello che dobbiamo fare adesso è leggere la "SCRATCHPAD" cioè la memoria in cui viene memorizzato l'ultimo valore di temperatura convertito. Mandiamo il comando "LEGGI SCRATCHPAD" OXBE, il quale dice alla sonda che subito dopo dovrà inviarci il dato di temperatura. I dati dell'uscita DS18B20 sono in gradi centigradi e sono memorizzati a 16 bit nel registro di temperatura (si veda ura 2). I bit contrassegnati con “S” indicano se la temperatura è positiva o negativa: per la positiva, S = 0 e per la negativa, S=1. La tabella 2 fornisce gli esempi dei dati dell'uscita digitale e la corrispondente lettura. Viene effettuata la lettura del dato che ci viene inviato a partire dal bit meno significativo e continua fino al nono byte (Byte 8 – CRC). Inoltre abbiamo il flag di controllo rappresentato dal bit 0 del registro "errore". Nel caso in cui tale bit valga 1 il contenuto dei temp1 e temp2 è da ignorare perchè la sonda non è presente anche se le istruzioni di lettura vengono comunque eseguite. In seguito, il dato viene memorizzato all’interno del PIC16C84P e a mezzo di una apposita routine, contemporaneamente inviato e visualizzato in un display LCD collegato alle uscite RB0 … RB7 del PIC. 17 Ferdinando_Barbon Capitolo 5 La trasmissione seriale Introduzione Lo standard RS-232, di cui si sente spesso parlare, è un protocollo di comunicazione seriale asincrona utile per collegare ad un personal computer dei circuiti esterni. Dato che il canale seriale RS-232 deve essere discretamente immune ai disturbi, i livelli di tensione adoperati sono diversi da quelli di tipo TTL o CMOS. Così è necessario dover traslare le tensioni per adattarle ai circuiti elettronici. Riportiamo la tabella di relazione delle tensione tra lo standard TTL-CMOS e RS-232. TTL - CMOS RS-232 livello logico "0" +12 Volt (+6V...+15V) livello logico "1" -12 Volt (-0V...-15V) Come è possibile vedere, non solo le tensioni sono diverse e ben più alte, per garantire una buon immunità ai disturbi, ma anche sono invertite. E’ necessario disporre di un traslatore ed invertitore di tensione. Per far ciò, ci sono diverse soluzioni, dalle più semplici, che richiedono dei transistors e/o i ±12 Volt, alle più eleganti, che utilizzano dei circuiti integrati appositamente concepiti; uno tra questi è il MAX232, prodotto dalla Maxim. Per quanto riguarda la velocità di comunicazione, si può arrivare anche ad 1Mbit/s. Questo circuito integrato, dispone di 2 canali per la comunicazione RS-232 bidirezionale, come è possibile vedere osservando la piedinatura. Inoltre ha il pregio di richiedere solo i +5Vcc anche per supportare, in trasmissione, lo standard RS-232. Ciò è possibile, grazie a due stadi convertitori DC-DC, ovvero un elevatore di tensione a capacità, da +5Vcc a +12Vcc; cui segue uno stadio invertitore di polarità, sempre a capacità, da +12Vcc a -12Vcc. Queste tensioni, poi sono pure rese disponibili per altri impieghi, ai seguenti piedini: pin 2: +12Vcc, pin 6: -12Vcc. E i condensatori 18 Ferdinando_Barbon Schema applicativo presenti collegati al circuito integrato permettono il regolare funzionamento degli stadi convertitori DC-DC, come è possibile vedere osservando lo schema applicativo, posto più sotto. Sebbene la sola piedinatura di un circuito integrato possa dare molte informazioni, spesso ciò non è sufficiente per l'utilizzo reale. Così disporre di un semplice ma funzionante schema elettrico, può essere davvero utile. Nello schema elettrico riportato qui sotto, è stato utilizzato un solo canale bidirezionale, ma per usi particolari è possibile impiegare entrambi i canali. Foto 2: Centralina master TL30 – vista di fronte 19 Ferdinando_Barbon Foto 3: Centralina master TL30 – vista laterale Foto 4: Unità remota differenziale- vista dall'alto 20 Ferdinando_Barbon Foto 5: Centralina master TL30 montata in rack 21 Ferdinando_Barbon Foto 6: Unita remota - Gradiometro 22 Ferdinando_Barbon Capitolo 6 Magnetometro differenziale Fluxgate Introduzione Questo lavoro consiste nella progettazione e costruzione di un geomagnetometro in grado di misurare il campo magnetico terrestre o piccoli cambiamenti magnetici locali prodotti da veicoli o da oggetti magnetizzati (chiavi, forbici, lame di acciaio, monete,….) in movimento nell’ambiente circostante; inoltre può essere utilizzato per misurare il campo magnetico prodotto dal passaggio di una corrente elettrica in un conduttore . Per questo progetto sono stai utilizzati due sensori Fluxgate prodotto dalla Speake & Co.I Fluxgate sono montati in modalità differenziale ed orientati vicinissimi a l’asse Est – Ovest. Il principio di funzionamento è stato ampiamente sviluppato nel Capitolo 3. Ai capi del sensore si misura, una frequenza che potrà variare proporzionalmente al campo magnetico circostante . In questa applicazione, la linearità non è una preoccupazione, poiché utilizzeremo il sensore per rilevare la presenza di piccolissime anomalie del campo magnetico nell’asse Est-Ovest ossia a circa 70KHz. Presentazione progetto Il progetto si compone di: Una centralina base costruita su cassetto rack 19” Una stazione remota predisposta per i tre assi X – Y – Z organizzata per la misura differenziale sull’ asse Est – Ovest. Il sistema ridistribuisce le varie tensioni di alimentazione in modo da ottenere il massimo isolamento con il resto dell’ apparecchiatura. Un Gradiometro remoto per il rilievo di anomalie locali nel terreno. Il sistema ridistribuisce le varie tensioni di alimentazione in modo da ottenere il massimo isolamento con il resto dell’ apparecchiatura. Un software sviluppato in C in grado di colloquiare con la stazione base. • • • • Centralina master La centralina è un sistema di gestione di unità remote e può amministrare fino a tre magnetometri Fluxgate con relativo controllo delle temperature dei sensori, è in grado di elaborare e fornire i dati provenienti da 3 sensori in modo contemporaneo ( per esempio tre assi geomagnetici X,Y,Z). E’ così composta: Un integrato PIC primario modello: 16F877P dedicato alla lettura dei dati del Fluxgate principale ed elaborazioni primarie, l’organizzazione dei colloqui con i PIC secondari, la raccolta dei dati l’elaborazione e l’invio degli stessi al chip di comunicazione seriale; inoltre gestisce la comunicazione con il display alfanumerico. Due integrati PIC secondari modello: 16C84P per la lettura dei dati dei due Fluxgate rimanenti e dei relativi sensori di temperatura. Questi due PIC colloquiano ininterrottamente con il PIC primario 16F877P. Un visualizzatore a display LCD modello CM16022 a 2 righe e 16 caratteri per la visualizzazione dei dati in tempo reale. Tre oscillatori a quarzo a 4 Mhz per il clock di riferimento dei PIC. • • • • 23 Ferdinando_Barbon • • • Visualizzatori a diodo Led per i vari controlli del sistema pulsanti di settaggio e reset per controllo della centralina. (Vedi allegato 1) Un circuito stampato a doppia faccia (Vedi allegati 2 e 2A) Unita remota differenziale L’ unita remota comprende: un contenitore plastico per l’alloggiamento dei sensori e del gruppo alimentazione. Due sensori fluxgate inseriti in due contenitori cilindrici regolabili nell’asse X e l’asse Z. Un circuito stampato per la distribuzione di alimentazioni e dei dati. Un sensore di temperatura digitale montato direttamente in contatto col sensore. • • • • Software di comunicazione Il software è stato sviluppato per funzionare su Pc IBM o compatibile. Permette l’acquisizione dei dati e registra i dati in vari files con formato ASCII standard Questi files in seguito possono essere letti da programmi appositi o anche fogli elettronici, permettendo ulteriori elaborazioni. Circuito elettrico Come chiarito precedentemente l’apparecchiatura si compone di due parti separate. La prima, chiamata centralina master, dove sono alloggiati i PIC (IC1, IC3, IC4), l’integrato di comunicazione (IC2), il display (LCD1), le segnalazioni (L1, L2, L3, L4, L5, L8, L9) e id i pulsanti (P1, P4, P5, P15); la seconda dove sono allogati i vari sensori (G1, FG2, FG3, T1). Alimentazioni Le due unità possono essere alimentate da una tensione esterna compresa tra 12V e 15V. Nella centralina un circuito stabilizzatore UA7805 adeguatamente filtrato porta la tensione esterna a 5V stabilizzati; nell’unità remota troviamo due integrati stabilizzatori, il primo UA7809 abbassa la tensione e la porta a 9V viene poi ridotta ulteriormente a 5V; l’impiego di due integrati stabilizzatori della serie UA78XXCT in cascata ci permette di per avere un maggiore isolamento ed una ridotta dispersione di calore, i due circuito sono protetti da un diodo al silicio contro l’inversione accidentale della polarità. Procedimento Il cuore del geomagnetometro è formato da un PIC 16F877P (IC1), questo dispositivo è costruito in tecnologia CMOS, contiene una RAM da 368 Byte una EEPROM da 256 Byte, una memoria FLASH da 8K, la frequenza di clock è generata da un quarzo esterno a 4 MHz (Q1) Troviamo nel suo interno: - Tre timer programmabili utilizzabili come contatori. - Otto canali analogici d’ingresso. - Un convertitore analogico digitale a 10 Bit. - L’interfaccia per la porta seriale. - Quattordici diversi segnali di interrupt. La funzione del PIC 16F877P (IC1) che chiameremo “master” è quella di leggere i dati del sensore FG1 (asse Z), come già specificato nelle caratteristiche del sensore di campo magnetico di fluxgate FGM 03h; si tratta di un segnale che può variare da 30 kHz a 120 kHz però nel nostro caso viene utilizzato il punto di maggiore linearità del sensore che si trova intorno alle frequenze 24 Ferdinando_Barbon fra 60 e 70 kHz corrispondente al campo zero ossia intorno all’asse geomagnetico Est-Ovest; in questo contesto il PIC funziona in modalità contatore di frequenza. Inoltre il master pilota altri due PIC secondari “Slave” del tipo 16C84P (IC3, IC4), collegati anch’essi rispettivamente ai sensori FG2 (asse X) e FG3 (asse Y) in modalità conteggio della frequenza. Dopo avere premuto il pulsante R (reset) andiamo a selezionare i rispettivi sensori attraverso i tasti S (select) e C (confirm); i led X, Y, Z (L1, L2, L3) ci indicano quali sono i sensori inclusi per la misura. Se vogliamo avere sullo schermo una maggiore sensibilità ottenuta dalla sola variazione differenziale dei valori assoluti ottenuti dai rispettivi fluxgate,dovremmo premere il pulsante O (offset), la funzione ci verrà segnalata dal led relativo (L4). Il master comincia il ciclo di colloquio azzerando i contatori, inizia ad interrogare il primo PIC secondario (IC3) che gli risponde con un acknowledge ed invia i suoi dati. A questo punto il master interroga il secondo PIC secondario (IC4) che esegue a sua volta l’acknowledge e l’operazione di trasferimento dei dati. Una volta terminato il ciclo di trasferimento delle informazioni provenienti dai rispettivi slave, il master inizia a richiedere i dati delle relative temperature fornite dai sensori digitali DS18B20 T1, T2, T3) in contatto diretto con i fluxgate, sempre che siano stati inseriti nel sistema. Questo dato è molto importante visto che questo tipo di sensore di campo magnetico è particolarmente sensibile alla temperatura; queste informazioni ci serviranno in seguito per compensare automaticamente i valori misurati dai fluxgate. Questi scambi d’informazioni che avvengono tra il master (IC1), i due slaves (IC3, IC4) ed i sensori di temperatura (T1, T2, T3) possono essere visualizzati attraverso degli indicatori a Led (L1, L2, L3, L4, L5, L8, L9) posti sul frontale dell’apparecchiatura. Dopo aver ottenuto i dati richiesti, i valori di frequenza acquisiti dai sensori vengono, attraverso un algoritmo matematico, convertiti in nanoTesla, unità ufficialmente utilizzata per la lettura del campo geomagnetico. Otteniamo così tre blocchi da 3 byte ciascuno per ogni misure del campo magnetico e 1 byte ciascuno per ogni misura di temperatura. A questo punto il master (IC1) invia le informazioni di valore dei rispettivi tre assi contenuti nell’accumulatore ad un display LCD alfanumerico a 16 caratteri su 2 righe, modello CM16022A (LCD1) che verranno così visualizzati direttamente in nanoTesla. Infine, attraverso l’interfaccia MAX232 che utilizza il protocollo di comunicazione seriale RS232 (IC2), il master (IC1) invia le informazioni dei valori di campo magnetico e delle temperature, per mezzo di un cavo seriale, ad una periferica di acquisizione esterna, un personal computer a 9600 bit/sec. Quest’ultimo attraverso un programma apposito scritto in linguaggio C acquisisce i dati permettendoci di vedere sullo schermo gli andamenti temporali, in formato grafico a colori. Essi vengono convertiti in un formato ASCII standard, e salvati nel sistema in più files separati, nominati appositamente ad ogni apertura del programma. Questi dati possono, per esempio, essere trattati dalla maggior parte dei programmi di analisi come per esempio l’ Excel ® della Microsoft. In allegato è possibile osservare alcuni grafici ottenuti per mezzo di questa apparecchiatura. Caratteristiche tecniche geomagnetometro Tensione di alimentazione: da 12 a 15V Corrente tipica (con 2 sensori): 100mA Campo di temperatura 0 – 50° C Segnale di uscita: RS232C Tempo di acquisizione: da 1Sec a 4 Min. Numero sensori: da 1 a 3 magnetici- da 1 a 3 temperatura Banda passante: da DC a ~20kHz. 25 Ferdinando_Barbon Capitolo 7 Schemi e grafici Inizio Configura sistema 1 2 Scelta fluxgate 3 Scelta tempo No Offset Sì misura misura Elabora offset Elabora Assoluto Visualizza LCD Visualizza LCD Connetti porta seriale Connetti porta seriale RS232 RS232 Computer Computer Monitor Grafico Salvataggio dati Monitor Grafico Salvataggio dati 26 Ferdinando_Barbon Architettura Hardware Schema a blocchi unità remota FLUXGATE ASSE X SENSORE TEMPERATURA X ALIMENTAZIONE FLUXGATE ASSE Y CIRCUITO DI ALIMENTAZIONE REMOTA SENSORE TEMPERATURA Y SEGNALI FLUXGATE ASSE Z SENSORE TEMPERATURA Z 27 Ferdinando_Barbon 28 Ferdinando_Barbon Schema a blocchi unità master ALIMENTAZIONE PIC 3 PIC 2 PIC 1 CLOCK 3 CLOCK 2 CLOCK 1 DISPLAY LCD COMANDO PER PROGRAMMAZIONE SERIALE SERIALE 29 Ferdinando_Barbon 30 Ferdinando_Barbon Architettura interna del PIC 16F877 31 Ferdinando_Barbon Datasheet Display LCD DIMENSIONAL DATA Item CM16022A 16 char. x 2 line Module Dimension Viewing Area Character Size Dot size Weight Measurement (W) x(H) x(T) 80.0 x 36.0 x 10.0 (Reflective) Min. -0.3 VDD - 0.3 -0.3 0 -20 mm mm mm mm g 62.2 x 17.9 2.95 x 5.55 0.55 x 0.65 38 ABSOLUTE MAXIMUM RATINGS Item Symbol Condition Supply Voltage (Logic) VDD - VSS Supply Voltage(LCD) VDD - VO Ta = 25 C Input Voltage VI Operating Temp. Topr Storage Temp. Tstg Unit Max. 7 VDD + 0.3 VDD + 0.3 50 70 ELECTRICAL CHARACTERISTIC Test Item Symbol Min. Typical Condition 2.2 Input "High" Voltage VIH Input "Low" Voltage VIL 0 Output "High" 2.4 VOH -IOH=0.205mA Voltage Output "Low" VOL IOL=1.2mA 0 Voltage VDD=5.0V 2.0 Supply Current IDD LED Forward Voltage I=200mA 4.2 EL Operatinc condition AC 100Vrms 400Hz SINE WAVE Unit V V V C C Max. Unit VDD 0.6 V V VDD V 0.4 V 5.0 4.6 mA V 32 Ferdinando_Barbon Datasheet Display LCD BLOCK DIAGRAM PIN ASSIGNMENT Pin Symbol Level Function 1 VSS GND (0V) 2 VDD +5V 3 VO LCD Drive Voltage H-->Data Input 4 RS H/L L-->Instructions input H : Data Read 5 R/W H/L L : Data Write 6 E H,H-->L Enable Signal 7 DB0 H/L 8 DB1 H/L 9 DB2 H/L 10 DB3 H/L Data Bus Input 11 DB4 H/L 12 DB5 H/L 13 DB6 H/L 14 DB7 H/L 15 LEDA +5V LED Power Supply 16 LEDK GND(0V) 33 Ferdinando_Barbon Forma d’onda del segnale d’uscita del Fluxgate 34 Ferdinando_Barbon 1000 800 600 400 200 0 -200 -400 -600 -800 -1000 Campo magnetico Sensore1 & sensore 2 Rilievi dal 29/05/2006 al 01/06/2006 Temperatura sensore Partenza e arrivo automobile a 15 mt dai sensori 2 3 .2 3 .0 0 0 .2 3 .0 0 1 .2 3 .0 0 2 .2 3 .0 0 3 .2 3 .0 0 4 .2 3 .0 0 5 .2 3 .0 0 6 .2 3 .0 0 7 .2 3 .0 0 8 .2 3 .0 0 9 .2 3 .0 0 1 0 .2 3 .0 0 1 1 .2 3 .0 0 1 2 .2 3 .0 0 1 3 .2 3 .0 0 1 4 .2 3 .0 0 1 5 .2 3 .0 0 1 6 .2 3 .0 0 1 7 .2 3 .0 0 1 8 .2 3 .0 0 1 9 .2 3 .0 0 2 0 .2 3 .0 0 2 1 .2 3 .0 0 2 2 .2 3 .0 0 2 3 .2 3 .0 0 0 .2 3 .0 0 1 .2 3 .0 0 2 .2 3 .0 0 3 .2 3 .0 0 4 .2 3 .0 0 5 .2 3 .0 0 6 .2 3 .0 0 7 .2 3 .0 0 8 .2 3 .0 0 9 .2 3 .0 0 1 0 .2 3 .0 0 1 1 .2 3 .0 0 1 2 .2 3 .0 0 1 3 .2 3 .0 0 1 4 .2 3 .0 0 1 5 .2 3 .0 0 1 6 .2 3 .0 0 1 7 .2 3 .0 0 1 8 .2 3 .0 0 1 9 .2 3 .0 0 2 0 .2 3 .0 0 2 1 .2 3 .0 0 2 2 .2 3 .0 0 2 3 .2 3 .0 0 0 .2 3 .0 0 1 .2 3 .0 0 2 .2 3 .0 0 3 .2 3 .0 0 4 .2 3 .0 0 5 .2 3 .0 0 6 .2 3 .0 0 7 .2 3 .0 0 8 .2 3 .0 0 9 .2 3 .0 0 1 0 .2 3 .0 0 1 1 .2 3 .0 0 1 2 .2 3 .0 0 1 3 .2 3 .0 0 1 4 .2 3 .0 0 1 5 .2 3 .0 0 1 6 .2 3 .0 0 1 7 .2 3 .0 0 1 8 .2 3 .0 0 1 9 .2 3 .0 0 2 0 .2 3 .0 0 2 1 .2 3 .0 0 2 2 .2 3 .0 0 2 3 .2 3 .0 0 0 .2 3 .0 0 35 Ferdinando_Barbon 1000 800 600 400 200 0 -200 -400 -600 -800 -1000 8 .5 9 .0 0 1 2 .5 9 .0 0 2 0 .5 9 .0 0 0 .5 9 .0 0 4 .5 9 .0 0 Andamento del campo 1 6 .5 9 .0 0 8 .5 9 .0 0 1 2 .5 9 .0 0 1 6 .5 9 .0 0 2 0 .5 9 .0 0 Rilievi dal 02/06/2006 al 08/06/2006 0 .5 9 .0 0 4 .5 9 .0 0 8 .5 9 .0 0 1 6 .5 9 .0 0 2 0 .5 9 .0 0 Disturbo su sensore 1 2 .5 9 .0 0 0 .5 9 .0 0 8 .5 9 .0 0 1 2 .5 9 .0 0 1 6 .5 9 .0 0 Partenza e arrivo automobile a 15 mt dai sensori 4 .5 9 .0 0 2 0 .5 9 .0 0 0 .5 9 .0 0 4 .5 9 .0 0 8 .5 9 .0 0 1 2 .5 9 .0 0 1 6 .5 9 .0 0 2 0 .5 9 .0 0 0 .5 9 .0 0 4 .5 9 .0 0 8 .5 9 .0 0 1 2 .5 9 .0 0 1 6 .5 9 .0 0 2 0 .5 9 .0 0 0 .5 9 .0 0 36 Ferdinando_Barbon Capitolo 8 Programmi Programma di raccolta dati su PC //velocita' trasmissione 9600 bits/sec //per uscire premere ESC //il programma riceve i dati e li elabora ( non li elabora il PIC// //LA TEMPERATURA VIENE VISUALIZZATA E SALVATA SU FILE// # include <stdlib.h> # include <graphics.h> # include <iostream.h> # include <process.h> # include <conio.h> # include <math.h> # include <string.h> # include <stdio.h> # include <dos.h> #include <bios.h> #include <stdlib.h> void autorilevamento(void); void imposta(void); int ricevi(void); void informa(void); int fine (void); void quadro(void); void stampafx (void); void stampafy (void); void stampafz (void); void stampatemp (void); void converti(float conv); int tasto,x,y,x1,y1; int xx,xy,xx1,xy1,yx,yy,yx1,yy1,zx,zy,zx1,zy1,nx,nx1,ny1; char filex[14000]; char filey[14000]; char filez[14000]; char filet[3000]; char u,d,c,m,dm,flag; char dati[10]={'0','1','2','3','4','5','6','7','8','9'}; FILE *pfilex; FILE *pfiley; FILE *pfilez; FILE *pfilet; double dato1,dato,f,f1,tt,ntx,nty,ntz,ntd,nto,vvoffset,ass; double ntxo,ntyo,ntzo; int voffset,mem1,mem2,mem3,un,deca,cent,migl,migld,pippo; int fxl,fxh,fxhh,fyl,fyh,fyhh,fzl,fzh,fzhh,temp; int mfxl,mfxh,mfxhh,mfyl,mfyh,mfyhh,mfzl,mfzh,mfzhh; 37 Ferdinando_Barbon char stringa[200],a; void main(void) { flag=0; //segnala se memorizzare dati su file cout<<" Si desiderano aprire i file per memorizzare x,y,z e temperatura ? (s/n)\n "; a=getch(); if(a=='s') { flag=1; //segnala che i dati devono essere memorizzati// cout<<" \nNome del filex su cui memorizzare i dati ricevuti: "; gets(filex); //apri file// if((pfilex = fopen(filex,"wt")) !=NULL) goto avanti; else { cout<<"Impossibile aprire file \n"; fine(); } avanti: cout<<" \nNome del filey su cui memorizzare i dati ricevuti: "; gets(filey); //apri file// if((pfiley = fopen(filey,"wt")) !=NULL) goto avanti1; else { cout<<"Impossibile aprire file \n"; fine(); } avanti1: cout<<" \nNome del filez su cui memorizzare i dati ricevuti: "; gets(filez); //apri file// if((pfilez = fopen(filez,"wt")) !=NULL) goto avanti2; else { cout<<"Impossibile aprire file \n"; fine(); } avanti2: cout<<" \nNome del file su cui memorizzare temperatura: "; gets(filet); //apri file// if((pfilet = fopen(filet,"wt")) !=NULL) goto avanti3; else { cout<<"Impossibile aprire file \n"; fine(); } 38 Ferdinando_Barbon } avanti3: bioscom(0,(0xe0|0x03|0x00|0x00),0); //9600baud,8bits dati,1bit stop,no parita'// informa(); //chiama funzioni che inizializzano// autorilevamento(); imposta(); dato=0; //inizializza alcune variabili// pippo=0; nto=0; inizio: setcolor(15); quadro(); moveto(0,480); //inizializza variabili per la grafica// x=20; xx=20; xx1=20; xy1=480; yx=20; yx1=20; yy1=480; zx=20; zx1=20; zy1=480; nx1=20; ny1=480; nx=20; loop: voffset=ricevi(); //ricevi se porre nuovo offset // fxl=ricevi(); //ricevi fx // fxh=ricevi(); fxhh=ricevi(); fyl=ricevi(); //ricevi fy // fyh=ricevi(); fyhh=ricevi(); fzl=ricevi(); //ricevi fz // fzh=ricevi(); fzhh=ricevi(); temp=ricevi(); //ricevi temperatura// stampafx( ); //stampa tre punti// stampafy( ); stampafz( ); stampatemp(); //memorizza temperatura// if(voffset!=0) //vedi se impostare nuovo offset// { pippo=1; ntxo=ntx; ntyo=nty; ntzo=ntz; } if(pippo!=0) { 39 Ferdinando_Barbon x++; } if(x!=633) //controlla se finita schermata// goto loop; else goto inizio; } // *************************AUTORILEVAMENTO***************************** void autorilevamento(void) { int g_driver, g_mode, g_error; detectgraph(&g_driver,&g_mode); if (g_driver < 0) { cout<<"Non ho trovato hardware grafico\n"; exit(1); } initgraph(&g_driver,&g_mode,""); g_error=graphresult(); if (g_error <0) { cout<<"Errore di initgraph: "<<grapherrormsg(g_error)<<"\n"; exit(1); } } // ***************************** IMPOSTA ******************************* void imposta (void) { setbkcolor(1); setcolor(15); setfillstyle(1,9); bar(3,13,636,480); rectangle(0,10,639,479); setviewport(3,12,636,478,0); } int fine(void) { fclose(pfilex); fclose(pfiley); fclose(pfilez); closegraph(); exit(1); return(0); } //************************************** int ricevi(void) { int in,stato; ciclo: 40 Ferdinando_Barbon tasto=kbhit(); if (tasto==0) tasto=kbhit(); if (tasto!=0) { tasto=getche(); if(tasto==27) fine(); } stato=bioscom(3,0,0); //test su bit 8 per controllare se dato in //ricezione pronto// stato=stato&0x100; if(stato!=0) { in=bioscom(2,0,0); //leggi dato// return(in); } goto ciclo; } //***************************************** void informa (void) { int tasto; cout<<" ***** Per uscire premere ESC *****"<<"\n\n\n\n"; cout<<"premere un tasto per continuare................."; cicla: tasto=kbhit(); if (tasto==0) goto cicla; return; } //***************************************** void stampafx(void) { setcolor(12); un=fxl&0x000f; //calcola fx deca=fxl&0x00f0; deca=deca>>4; cent=fxh&0x000f; migl=fxh&0x00f0; migl=migl>>4; migld=fxhh&0x000f; f=float(un)+16*float(deca)+256*float(cent)+4096*float(migl)+65536*float(migld); if(f==0) //se f=0 esci altrimenti overflow e blocco programma// return; tt=1/f; //calcola periodo T ntx=3571000000*tt-50890; //calcola nT ltoa((long)ntx,stringa,10); //converti f in una stringa e visualizza bar(125,30,190,37); outtextxy(125,30,stringa); 41 Ferdinando_Barbon outtextxy(1,30," canale x (nT) "); if(pippo!=0) //controlla se stampare punto// { moveto(xx1,xy1); lineto(x,-int(ntxo-ntx)/5+240); xy1=-int(ntxo-ntx)/5+240; xx1=x-1; } if(flag!=0) { converti(abs(ntx)); //converti in bcd// if(ntx<0) //vedi se valore positivo o negativo// fputc('-',pfilex); else fputc('+',pfilex); fputc(dati[dm],pfilex); //memorizza su file// fputc(dati[m],pfilex); fputc(dati[c],pfilex); fputc(dati[d],pfilex); fputc(dati[u],pfilex); fputc(0x0d,pfilex); //memorizza ritorno a capo } return; } //***************************************** void stampafy(void) { setcolor(10); un=fyl&0x000f; //calcola fy// deca=fyl&0x00f0; deca=deca>>4; cent=fyh&0x000f; migl=fyh&0x00f0; migl=migl>>4; migld=fyhh&0x000f; f=float(un)+16*float(deca)+256*float(cent)+4096*float(migl)+65536*float(migld); if(f==0) //se f=0 esci altrimenti overflow e blocco programma// return; tt=1/f; //calcola T nty=3571000000*tt-50890; //calcola nT ltoa((long)nty,stringa,10); //converti f in una stringa e visualizza bar(325,30,400,37); outtextxy(325,30,stringa); outtextxy(200,30," canale y (nT)"); if(pippo!=0) { moveto(yx1,yy1); lineto(x,-int(ntyo-nty)/5+240); yy1=-int(ntyo-nty)/5+240; yx1=x-1; 42 Ferdinando_Barbon } if(flag!=0) { converti(abs(nty)); //converti in bcd// if(nty<0) //vedi se valore positivo o negativo// fputc('-',pfiley); else fputc('+',pfiley); fputc(dati[dm],pfiley); //memorizza su file// fputc(dati[m],pfiley); fputc(dati[c],pfiley); fputc(dati[d],pfiley); fputc(dati[u],pfiley); fputc(0x0d,pfiley); //memorizza ritorno a capo } return; } //***************************************** void stampafz(void) { setcolor(15); un=fzl&0x000f; //calcola fz deca=fzl&0x00f0; deca=deca>>4; cent=fzh&0x000f; migl=fzh&0x00f0; migl=migl>>4; migld=fzhh&0x000f; f=float(un)+16*float(deca)+256*float(cent)+4096*float(migl)+65536*float(migld); if(f==0) //se f=0 esci altrimenti overflow e blocco programma// return; tt=1/f; //calcola T ntz=3571000000*tt-50890; //calcola nT ltoa((long)ntz,stringa,10); //converti f in una stringa e visualizza bar(525,30,600,37); outtextxy(525,30,stringa); outtextxy(400,30," canale z (nT) "); if(pippo!=0) { moveto(zx1,zy1); lineto(x,-int(ntzo-ntz)/5+240); zy1=-int(ntzo-ntz)/5+240; zx1=x-1; } if(flag!=0) { converti(abs(ntz)); //converti in bcd// if(ntz<0) //vedi se valore positivo o negativo// fputc('-',pfilez); else 43 Ferdinando_Barbon fputc('+',pfilez); fputc(dati[dm],pfilez); //memorizza su file// fputc(dati[m],pfilez); fputc(dati[c],pfilez); fputc(dati[d],pfilez); fputc(dati[u],pfilez); fputc(0x0d,pfilez); //memorizza ritorno a capo } return; } //***************************************** memorizza temperatura void stampatemp(void) { ltoa((long)temp,stringa,10); //converti T in una stringa e visualizza bar(300,40,350,47); outtextxy(300,40,stringa); outtextxy(150,40,"Temp.(øC):"); if(flag!=0) { converti(float(temp)); //converti in bcd// fputc(dati[d],pfilet); //memorizza// fputc(dati[u],pfilet); fputc(0x0d,pfilet); //memorizza ritorno a capo } return; } //***************************************** void quadro (void) { bar(0,0,633,464); for(x=20;x<=633;x=x+3) { putpixel(x,240,15); } for(x=25;x<=633;x=x+3) { putpixel(x,90,15); } for(x=25;x<=633;x=x+3) { putpixel(x,150,15); } for(x=25;x<=633;x=x+3) { putpixel(x,210,15); } for(x=25;x<=633;x=x+3) { 44 Ferdinando_Barbon putpixel(x,270,15); } for(x=25;x<=633;x=x+3) { putpixel(x,330,15); } for(x=25;x<=633;x=x+3) { putpixel(x,390,15); } for(x=25;x<=633;x=x+3) { putpixel(x,420,15); } outtextxy(0,236,"0"); for(x=20;x<=633;x=x+3) { putpixel(x,120,15); } outtextxy(0,55,"900"); for(x=25;x<=633;x=x+3) { putpixel(x,60,15); } outtextxy(0,116,"600"); for(x=20;x<=633;x=x+3) { putpixel(x,360,15); } outtextxy(0,356,"-600"); for(x=20;x<=633;x=x+3) { putpixel(x,300,15); } outtextxy(0,296,"-300"); for(x=20;x<=633;x=x+3) { putpixel(x,180,15); } outtextxy(0,176,"300"); outtextxy(0,416,"-900"); outtextxy(1,10," //outtextxy(1,10,"offset for(y=0;y<=450;y=y+3) { putpixel(20,y,15); } PREMERE ESC PER USCIRE "); nT PREMERE ESC PER USCIRE "); 45 Ferdinando_Barbon outtextxy(18,458,"0"); for(y=0;y<=440;y=y+3) { putpixel(40,y,15); } outtextxy(35,445,"1"); for(y=0;y<=450;y=y+3) { putpixel(60,y,15); } outtextxy(50,458,"2"); for(y=0;y<=440;y=y+3) { putpixel(80,y,15); } outtextxy(75,445,"3"); for(y=0;y<=450;y=y+3) { putpixel(100,y,15); } outtextxy(90,458,"4"); for(y=0;y<=440;y=y+3) { putpixel(120,y,15); } outtextxy(110,445,"5"); for(y=0;y<=450;y=y+3) { putpixel(140,y,15); } outtextxy(130,458,"6"); for(y=0;y<=440;y=y+3) { putpixel(160,y,15); } outtextxy(150,445,"7"); for(y=0;y<=450;y=y+3) { putpixel(180,y,15); } outtextxy(170,458,"8"); for(y=0;y<=440;y=y+3) { putpixel(200,y,15); } outtextxy(190,445,"9"); for(y=0;y<=450;y=y+3) { putpixel(220,y,15); } 46 Ferdinando_Barbon outtextxy(210,458,"10"); for(y=0;y<=440;y=y+3) { putpixel(240,y,15); } outtextxy(230,445,"11"); for(y=0;y<=450;y=y+3) { putpixel(260,y,15); } outtextxy(250,458,"12"); for(y=0;y<=440;y=y+3) { putpixel(280,y,15); } outtextxy(270,445,"13"); for(y=0;y<=450;y=y+3) { putpixel(300,y,15); } outtextxy(290,458,"14"); for(y=0;y<=440;y=y+3) { putpixel(320,y,15); } outtextxy(310,445,"15"); for(y=0;y<=450;y=y+3) { putpixel(340,y,15); } outtextxy(330,458,"16"); for(y=0;y<=440;y=y+3) { putpixel(360,y,15); } outtextxy(350,445,"17"); for(y=0;y<=450;y=y+3) { putpixel(380,y,15); } outtextxy(370,458,"18"); for(y=0;y<=440;y=y+3) { putpixel(400,y,15); } outtextxy(390,445,"19"); for(y=0;y<=450;y=y+3) { putpixel(420,y,15); } outtextxy(410,458,"20"); 47 Ferdinando_Barbon for(y=0;y<=440;y=y+3) { putpixel(440,y,15); } outtextxy(430,445,"21"); for(y=0;y<=450;y=y+3) { putpixel(460,y,15); } outtextxy(450,458,"22"); for(y=0;y<=440;y=y+3) { putpixel(480,y,15); } outtextxy(470,445,"23"); for(y=0;y<=450;y=y+3) { putpixel(500,y,15); } outtextxy(490,458,"24"); for(y=0;y<=440;y=y+3) { putpixel(520,y,15); } outtextxy(510,445,"25"); for(y=0;y<=450;y=y+3) { putpixel(540,y,15); } outtextxy(530,458,"26"); for(y=0;y<=440;y=y+3) { putpixel(560,y,15); } outtextxy(550,445,"27"); for(y=0;y<=450;y=y+3) { putpixel(580,y,15); } outtextxy(570,458,"28"); for(y=0;y<=430;y=y+3) { putpixel(600,y,15); } outtextxy(590,445,"29"); for(y=0;y<=430;y=y+3) { putpixel(620,y,15); } outtextxy(610,458,"30"); return; 48 Ferdinando_Barbon } //***********converti numero float in BCD void converti (float conv) { u=0; d=0; c=0; m=0; dm=0; while(conv>=10000) { conv=conv-10000; dm++; } while(conv>=1000) { conv=conv-1000; m++; } while(conv>=100) { conv=conv-100; c++; } while(conv>=10) { conv=conv-10; d++; } u=conv; return; } 49 Ferdinando_Barbon Software per gestione PIC16C84P MPASM 02.61 Released LOC OBJECT CODE VALUE MAGN84.ASM 3-20-2006 17:45:11 PAGE 1 LINE SOURCE TEXT 00001 ;************************** MAGNETOMETRO******************************* 00002 00003 ;********************* LOGICA DI FUNZIONAMENTO************************* 00004 ;***** QUANDO COMAND (PIN RB4) SI PORTA ALTO PARTE LA MISURA*********** 00005 ;***** LA MISURA DURA FINCHE' COMMAND E' ALTO (1 SECONDO) ** 00006 ;**** TERMINATA LA MISURA SI ATTENDE CHE SELECT (PIN RB3) SI PORTI A 1* 00007 ;**** LA TRASMISSIONE INIZIA PORTANDO ACK (PIN RB2) ALTO PER 2 MS ** 00008 ;**** I DATI (16 BIT) VENGONO TRASMESSI ATTRAVERSO ACK CON BIT TIME 2MS** 00009 00010 #include <p16f84.inc> ;DIRETTIVA DI ASSEMBLAGGIO 00001 LIST 00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. Message[301]: MESSAGE: (Processor-header file mismatch. Verify selected processor.) 00136 LIST 00011 0000000C 00012 MS EQU 0X0C ;DICHIARA LE LOCAZIONI DI RAM UTILIZZATE 0000000D 00013 DS EQU 0X0D 0000000E 00014 SEC EQU 0X0E 0000000F 00015 SAVE_W EQU 0X0F 00000010 00016 SAVE_S EQU 0X10 00000011 00017 DATOL EQU 0X11 00000012 00018 DATOH EQU 0X12 00000013 00019 DATOHH EQU 0X13 00000014 00020 FLAG EQU 0X14 00021 0000 00022 ORG 0 ;VETTORE DI RESET 0000 2805 00023 GOTO MAIN 0004 00024 ORG 4 ;VETTORE DI INTERRUPT 0004 28A8 00025 GOTO INTERRUPT 00026 0005 1683 00027 MAIN BSF STATUS,5 ;SELEZIONA BANCO1 PER CONFIGURARE PIC Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0006 1106 00028 BCF TRISB,2 ;RB2 (ACK) COME USCITA Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 1086 00029 BCF TRISB,1 ;RB1 (LED) COME OUT 0008 3081 00030 MOVLW B'10000001' ;DISABILITA PULL UP PORTB - SELEZIONA CLOCK PER TMR0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0009 0081 00031 MOVWF OPTION_REG ;ASSEGNA PRESCALE A TMR0 - CONFIGURA PRESCALER 000A 1283 00032 BCF STATUS,5 ;BANCO0 000B 1106 00033 BCF PORTB,2 ;ACK BASSO 000C 1486 00034 BSF PORTB,1 ;LED ACCESO PER 1 SECONDO 000D 0194 00035 CLRF FLAG ;SEGNALA INTERRUPT MISURA TEMPO 000E 30A0 00036 MOVLW B'10100000' ;ABILITA INTERRUPT 000F 008B 00037 MOVWF INTCON 0010 2095 00038 CALL SEC1 0011 1086 00039 BCF PORTB,1 ;LED SPENTO 0012 138B 00040 LOOP BCF INTCON,7 ;DISABILITA INTERRUPT 0013 1E06 00041 LP BTFSS PORTB,4 ;CONTROLLA SE COMMAND ALTO 0014 2813 00042 GOTO LP 0015 0192 00043 CLRF DATOH ;AZZERA MISURA 0016 0193 00044 CLRF DATOHH 0017 0181 00045 CLRF TMR0 0018 3001 00046 MOVLW 1 ;INTERRUPT DA MAGNETOMETRO 50 Ferdinando_Barbon MPASM 02.61 Released LOC OBJECT CODE VALUE MAGN84.ASM 3-20-2006 17:45:11 PAGE 2 LINE SOURCE TEXT 0019 0094 00047 MOVWF FLAG 001A 1683 00048 BSF STATUS,5 ;SELEZIONA BANCO1 PER CONFIGURARE OPTION 001B 30AF 00049 MOVLW B'10101111' ;DISABILITA PULL UP PORTB - SELEZIONA CLOCK DA RA4 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 001C 0081 00050 MOVWF OPTION_REG 001D 1283 00051 BCF STATUS,5 ;BANCO0 001E 30A0 00052 MOVLW B'10100000' ;ABILITA INTERRUPT 001F 008B 00053 MOVWF INTCON 0020 1A06 00054 LP1 BTFSC PORTB,4 ;CONTROLLA SE COMMAND BASSO (TIME OUT) 0021 2820 00055 GOTO LP1 0022 138B 00056 BCF INTCON,7 ;DISABILITA INTERRUPT 0023 0801 00057 MOVF TMR0,0 ;SALVA PARTE BASSA MISURA 0024 0091 00058 MOVWF DATOL 0025 1683 00059 BSF STATUS,5 ;SELEZIONA BANCO1 PER CONFIGURARE OPTION 0026 3081 00060 MOVLW B'10000001' ;DISABILITA PULL UP PORTB - SELEZIONA CLOCK PER TMR0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0027 0081 00061 MOVWF OPTION_REG ;ASSEGNA PRESCALE A TMR0 - CONFIGURA PRESCALER 0028 1283 00062 BCF STATUS,5 ;BANCO0 0029 0194 00063 CLRF FLAG ;SEGNALA INTERRUPT MISURA TEMPO 002A 30A0 00064 MOVLW B'10100000' ;ABILITA INTERRUPT 002B 008B 00065 MOVWF INTCON 002C 1D86 00066 LP2 BTFSS PORTB,3 ;CONTROLLA SE SELECT E' ALTO 002D 282C 00067 GOTO LP2 002E 1486 00068 BSF PORTB,1 ;LED ACCESO 002F 3009 00069 MOVLW 9 ;SINCRONIZZA CLOCK 0030 0081 00070 MOVWF TMR0 0031 209C 00071 CALL UNO ;PORTA ACK ALTO PER 2 MS 0032 2038 00072 CALL DATL ;INVIA DATOL 0033 2061 00073 CALL DATH ;INVIA DATOH 0034 208A 00074 CALL DATHH ;INVIA DATOHH 0035 1106 00075 BCF PORTB,2 ;ACK BASSO 0036 1086 00076 BCF PORTB,1 ;LED SPENTO 0037 2812 00077 GOTO LOOP 00078 00079 ;********** INVIA DATOL 0038 1811 00080 DATL BTFSC DATOL,0 0039 283C 00081 GOTO LP3 003A 209F 00082 CALL ZERO 003B 283D 00083 GOTO LP4 003C 209C 00084 LP3 CALL UNO 003D 1891 00085 LP4 BTFSC DATOL,1 003E 2841 00086 GOTO LP5 003F 209F 00087 CALL ZERO 0040 2842 00088 GOTO LP6 0041 209C 00089 LP5 CALL UNO 0042 1911 00090 LP6 BTFSC DATOL,2 0043 2846 00091 GOTO LP7 0044 209F 00092 CALL ZERO 0045 2847 00093 GOTO LP8 0046 209C 00094 LP7 CALL UNO 0047 1991 00095 LP8 BTFSC DATOL,3 0048 284B 00096 GOTO LP9 0049 209F 00097 CALL ZERO 51 Ferdinando_Barbon MPASM 02.61 Released LOC OBJECT CODE VALUE 004A 004B 004C 004D 004E 004F 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005F 0060 0061 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C MAGN84.ASM 3-20-2006 17:45:11 PAGE 3 LINE SOURCE TEXT 284C 209C 1A11 2850 209F 2851 209C 1A91 2855 209F 2856 209C 1B11 285A 209F 285B 209C 1B91 285F 209F 2860 209C 0008 00098 GOTO LP10 00099 LP9 CALL UNO 00100 LP10 BTFSC DATOL,4 00101 GOTO LP11 00102 CALL ZERO 00103 GOTO LP12 00104 LP11 CALL UNO 00105 LP12 BTFSC DATOL,5 00106 GOTO LP13 00107 CALL ZERO 00108 GOTO LP14 00109 LP13 CALL UNO 00110 LP14 BTFSC DATOL,6 00111 GOTO LP15 00112 CALL ZERO 00113 GOTO LP16 00114 LP15 CALL UNO 00115 LP16 BTFSC DATOL,7 00116 GOTO LP17 00117 CALL ZERO 00118 GOTO LP18 00119 LP17 CALL UNO 00120 LP18 RETURN 00121 00122 ;********** INVIA DATOH 1812 00123 DATH BTFSC DATOH,0 2865 00124 GOTO LL3 209F 00125 CALL ZERO 2866 00126 GOTO LL4 209C 00127 LL3 CALL UNO 1892 00128 LL4 BTFSC DATOH,1 286A 00129 GOTO LL5 209F 00130 CALL ZERO 286B 00131 GOTO LL6 209C 00132 LL5 CALL UNO 1912 00133 LL6 BTFSC DATOH,2 286F 00134 GOTO LL7 209F 00135 CALL ZERO 2870 00136 GOTO LL8 209C 00137 LL7 CALL UNO 1992 00138 LL8 BTFSC DATOH,3 2874 00139 GOTO LL9 209F 00140 CALL ZERO 2875 00141 GOTO LL10 209C 00142 LL9 CALL UNO 1A12 00143 LL10 BTFSC DATOH,4 2879 00144 GOTO LL11 209F 00145 CALL ZERO 287A 00146 GOTO LL12 209C 00147 LL11 CALL UNO 1A92 00148 LL12 BTFSC DATOH,5 287E 00149 GOTO LL13 209F 00150 CALL ZERO 52 Ferdinando_Barbon MPASM 02.61 Released LOC OBJECT CODE VALUE 007D 007E 007F 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 MAGN84.ASM 3-20-2006 17:45:11 PAGE 4 LINE SOURCE TEXT 287F 209C 1B12 2883 209F 2884 209C 1B92 2888 209F 2889 209C 0008 00151 GOTO LL14 00152 LL13 CALL UNO 00153 LL14 BTFSC DATOH,6 00154 GOTO LL15 00155 CALL ZERO 00156 GOTO LL16 00157 LL15 CALL UNO 00158 LL16 BTFSC DATOH,7 00159 GOTO LL17 00160 CALL ZERO 00161 GOTO LL18 00162 LL17 CALL UNO 00163 LL18 RETURN 00164 00165 ;********** INVIA DATOHH (2 BIT) 008A 1813 00166 DATHH BTFSC DATOHH,0 008B 288E 00167 GOTO LA3 008C 209F 00168 CALL ZERO 008D 288F 00169 GOTO LA4 008E 209C 00170 LA3 CALL UNO 008F 1893 00171 LA4 BTFSC DATOHH,1 0090 2893 00172 GOTO LA5 0091 209F 00173 CALL ZERO 0092 2894 00174 GOTO LA6 0093 209C 00175 LA5 CALL UNO 0094 0008 00176 LA6 RETURN 00177 00178 ;********** RITARDO DI 1 SECONDO 0095 018C 00179 SEC1 CLRF MS 0096 018D 00180 CLRF DS 0097 018E 00181 CLRF SEC Message[305]: Using default destination of 1 (file). 0098 088E 00182 RSEC MOVF SEC 0099 1903 00183 BTFSC STATUS,2 009A 2898 00184 GOTO RSEC 009B 0008 00185 RETURN 00186 00187 ;********** INVIA 1 009C 1506 00188 UNO BSF PORTB,2 009D 20A2 00189 CALL MS2 009E 0008 00190 RETURN 00191 00192 ;********** INVIA 0 009F 1106 00193 ZERO BCF PORTB,2 00A0 20A2 00194 CALL MS2 00A1 0008 00195 RETURN 00196 00197 ;********** RITARDO DI 2 MS 00A2 018C 00198 MS2 CLRF MS 00A3 3002 00199 MS22 MOVLW 2 00A4 020C 00200 SUBWF MS,0 00A5 1D03 00201 BTFSS STATUS,2 00A6 28A3 00202 GOTO MS22 53 Ferdinando_Barbon MPASM 02.61 Released LOC OBJECT CODE VALUE MAGN84.ASM 3-20-2006 17:45:11 PAGE 5 LINE SOURCE TEXT 00A7 0008 00203 RETURN 00204 00205 ;********** RISPOSTA AD INTERRUPT 00A8 00206 INTERRUPT 00A8 008F 00207 MOVWF SAVE_W ;salva contesto ( accumulatore e registro di stato ) 00A9 0E03 00208 SWAPF STATUS,0 00AA 0090 00209 MOVWF SAVE_S Message[305]: Using default destination of 1 (file). 00AB 0894 00210 MOVF FLAG ;CONTROLLA SE MISURARE TEMPO O IMPULSI 00AC 1D03 00211 BTFSS STATUS,2 00AD 28C3 00212 GOTO PULS 00AE 3009 00213 MOVLW 9 ;reinizializza TMR0 00AF 0081 00214 MOVWF TMR0 Message[305]: Using default destination of 1 (file). 00B0 0A8C 00215 INCF MS ;aggiorna millisecondi 00B1 3064 00216 MOVLW D'100' 00B2 020C 00217 SUBWF MS,0 00B3 1D03 00218 BTFSS STATUS,2 00B4 28BD 00219 GOTO EXIT 00B5 018C 00220 CLRF MS Message[305]: Using default destination of 1 (file). 00B6 0A8D 00221 INCF DS ;aggiorna decimi di secondo 00B7 300A 00222 MOVLW D'10' 00B8 020D 00223 SUBWF DS,0 00B9 1D03 00224 BTFSS STATUS,2 00BA 28BD 00225 GOTO EXIT 00BB 018D 00226 CLRF DS Message[305]: Using default destination of 1 (file). 00BC 0A8E 00227 INCF SEC ;aggiorna secondi 00BD 110B 00228 EXIT BCF INTCON,2 ;Azzera flag interrupt 00BE 0E10 00229 SWAPF SAVE_S,0 ;Ripristina contesto 00BF 0083 00230 MOVWF STATUS Message[305]: Using default destination of 1 (file). 00C0 0E8F 00231 SWAPF SAVE_W 00C1 0E0F 00232 SWAPF SAVE_W,0 00C2 0009 00233 RETFIE Message[305]: Using default destination of 1 (file). 00C3 0A92 00234 PULS INCF DATOH ;OGNI 256 IMPULSI DATOH INCREMENTA DI 1 Message[305]: Using default destination of 1 (file). 00C4 0892 00235 MOVF DATOH ;CONTROLLA SE DATOH VA IN OVERFLOW 00C5 1D03 00236 BTFSS STATUS,2 00C6 28BD 00237 GOTO EXIT Message[305]: Using default destination of 1 (file). 00C7 0A93 00238 INCF DATOHH ;AGGIORNA CONTEGGIO 00C8 28BD 00239 GOTO EXIT 00240 END 54 Ferdinando_Barbon MPASM 02.61 Released SYMBOL TABLE LABEL C DATH DATHH DATL DATOH DATOHH DATOL DC DS EEADR EECON1 EECON2 EEDATA EEIE EEIF EXIT F FLAG FSR GIE INDF INTCON INTE INTEDG INTERRUPT INTF IRP LA3 LA4 LA5 LA6 LL10 LL11 LL12 LL13 LL14 LL15 LL16 LL17 LL18 LL3 LL4 LL5 LL6 LL7 LL8 LL9 LOOP LP LP1 LP10 LP11 LP12 MAGN84.ASM 3-20-2006 17:45:11 PAGE 6 VALUE 00000000 00000061 0000008A 00000038 00000012 00000013 00000011 00000001 0000000D 00000009 00000088 00000089 00000008 00000006 00000004 000000BD 00000001 00000014 00000004 00000007 00000000 0000000B 00000004 00000006 000000A8 00000001 00000007 0000008E 0000008F 00000093 00000094 00000075 00000079 0000007A 0000007E 0000007F 00000083 00000084 00000088 00000089 00000065 00000066 0000006A 0000006B 0000006F 00000070 00000074 00000012 00000013 00000020 0000004C 00000050 00000051 55 Ferdinando_Barbon MPASM 02.61 Released SYMBOL TABLE LABEL LP13 LP14 LP15 LP16 LP17 LP18 LP2 LP3 LP4 LP5 LP6 LP7 LP8 LP9 MAIN MS MS2 MS22 NOT_PD NOT_RBPU NOT_TO OPTION_REG PCL PCLATH PORTA PORTB PS0 PS1 PS2 PSA PULS RBIE RBIF RD RP0 RP1 RSEC SAVE_S SAVE_W SEC SEC1 STATUS T0CS T0IE T0IF T0SE TMR0 TRISA TRISB UNO W WR WREN MAGN84.ASM 3-20-2006 17:45:11 PAGE 7 VALUE 00000055 00000056 0000005A 0000005B 0000005F 00000060 0000002C 0000003C 0000003D 00000041 00000042 00000046 00000047 0000004B 00000005 0000000C 000000A2 000000A3 00000003 00000007 00000004 00000081 00000002 0000000A 00000005 00000006 00000000 00000001 00000002 00000003 000000C3 00000003 00000000 00000000 00000005 00000006 00000098 00000010 0000000F 0000000E 00000095 00000003 00000005 00000005 00000002 00000004 00000001 00000085 00000086 0000009C 00000000 00000001 00000002 56 Ferdinando_Barbon MPASM 02.61 Released SYMBOL TABLE LABEL WRERR Z ZERO _CP_OFF _CP_ON _HS_OSC _LP_OSC _PWRTE_OFF _PWRTE_ON _RC_OSC _WDT_OFF _WDT_ON _XT_OSC __16F876 MAGN84.ASM 3-20-2006 17:45:11 PAGE 8 VALUE 00000003 00000002 0000009F 00003FFF 0000000F 00003FFE 00003FFC 00003FFF 00003FF7 00003FFF 00003FFB 00003FFF 00003FFD 00000001 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXX------- ---------------- ---------------- ---------------All other memory blocks unused. Program Memory Words Used: 198 Program Memory Words Free: 7994 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 15 reported, 0 suppressed 57 Ferdinando_Barbon Software per gestione PIC16F877P MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 1 LINE SOURCE TEXT 00001 ;******************************** MAGMETOMETRO ********************** 00002 ;**************************** GESTIONE DEL SISTEMA******************* 00003 #include <p16f877.inc> 00001 LIST 00002 ; P16F877.INC Standard Header File, Version 1.00 Microchip Technology, Inc. 00373 LIST 00004 ;DICHIARA LE LOCAZIONI DI RAM UTILIZZATE 00000020 00005 SAVE_W EQU 0X20 00000021 00006 SAVE_S EQU 0X21 00000022 00007 MS EQU 0X22 00000023 00008 DS EQU 0X23 00000024 00009 SEC EQU 0X24 00000025 00010 FZL EQU 0X25 00000026 00011 FZH EQU 0X26 00000027 00012 FZHH EQU 0X27 00000029 00013 FLAG EQU 0X29 0000002A 00014 FXL EQU 0X2A 0000002B 00015 FXH EQU 0X2B 0000002C 00016 FXHH EQU 0X2C 0000002D 00017 FYL EQU 0X2D 0000002E 00018 FYH EQU 0X2E 0000002F 00019 FYHH EQU 0X2F 00000030 00020 MEM1 EQU 0X30 00000031 00021 MEM2 EQU 0X31 00000032 00022 MEM3 EQU 0X32 00000033 00023 MIGLIAIA_C EQU 0X33 00000034 00024 MIGLIAIA_D EQU 0X34 00000035 00025 MIGLIAIA EQU 0X35 00000036 00026 CENTINAIA EQU 0X36 00000037 00027 DECINE EQU 0X37 00000038 00028 UNITA EQU 0X38 00000039 00029 DATO EQU 0X39 0000003A 00030 ZER EQU 0X3A 0000003B 00031 LTCL EQU 0X3B 0000003C 00032 LTCH EQU 0X3C 0000003D 00033 LTCHH EQU 0X3D 0000003E 00034 LTCL1 EQU 0X3E 0000003F 00035 LTCH1 EQU 0X3F 00000040 00036 LTCHH1 EQU 0X40 00000041 00037 LTCL2 EQU 0X41 00000042 00038 LTCH2 EQU 0X42 00000043 00039 LTCHH2 EQU 0X43 00000044 00040 SEGNO EQU 0X44 00000045 00041 MSEC EQU 0X45 00042 00000007 00043 E EQU 7 ;PIN CONTROLLO LCD 00000006 00044 RS EQU 6 00045 00046 ;*********************************************** 0000 00047 ORG 0 ;VETTORE DI RESET 0000 2805 00048 GOTO MAIN 0004 00049 ORG 4 ;VETTORE DI INTERRUPT 0004 2DAE 00050 GOTO INTERRUPT 58 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 2 LINE SOURCE TEXT 00051 00052 ;*********************************************** 0005 1683 00053 MAIN BSF STATUS,5 ;********* SELEZIONA BANCO1 PER CONFIGURARE PIC 0006 3081 00054 MOVLW B'10000001' ;SELEZIONA CLOCK PER TMR0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 0081 00055 MOVWF OPTION_REG ;ASSEGNA PRESCALE A TMR0 - CONFIGURA PRESCALER PER 4MHz 0008 3007 00056 MOVLW B'00000111' ;PORTA INGRESSI DIGITALI Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0009 009F 00057 MOVWF ADCON1 000A 3019 00058 MOVLW D'25' ;BAUD RATE 9600 BIT/SEC Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000B 0099 00059 MOVWF SPBRG 000C 3024 00060 MOVLW B'00100100' ;CONFIGURA TXSTA Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000D 0098 00061 MOVWF TXSTA Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000E 0186 00062 CLRF TRISB ;COMANDO LCD 000F 3010 00063 MOVLW B'00010000' ;CONFIGURA PORTD (RD4 E' NC CONFIGURATO COME IN ) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0010 0088 00064 MOVWF TRISD 0011 30F8 00065 MOVLW B'11111000' ;CONFIGURA PORTA Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0012 0085 00066 MOVWF TRISA Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0013 1187 00067 BCF TRISC,3 ;CONFIGURA USCITA PER LED 00068 ;PORTE E' TUTTO INGRESSO 0014 1283 00069 BCF STATUS,5 ;********* BANCO0 0015 3080 00070 MOVLW B'10000000' ;CONFIGURA RCSTA 0016 0098 00071 MOVWF RCSTA 0017 3007 00072 MOVLW B'00000111' ;CONFIGURA TMR1 COME CONTATORE 0018 0090 00073 MOVWF T1CON 0019 30A0 00074 MOVLW B'10100000' ;ABILITA INTERRUPT 001A 008B 00075 MOVWF INTCON 001B 1187 00076 BCF PORTC,3 ;**SPEGNI TUTTI I LED 001C 1008 00077 BCF PORTD,0 001D 1088 00078 BCF PORTD,1 001E 1108 00079 BCF PORTD,2 001F 1188 00080 BCF PORTD,3 0020 1105 00081 BCF PORTA,2 ;COMMAND BASSO 0021 1005 00082 BCF PORTA,0 ;SELECT1 BASSO 0022 1085 00083 BCF PORTA,1 ;SELECT2 BASSO 0023 1288 00084 BCF PORTD,5 ;BUZZER OFF 0024 01A9 00085 CLRF FLAG ;SEGNALATORE FG ATTIVI 0025 01BA 00086 CLRF ZER ;SEGNALATORE OFFSET 0026 01AA 00087 CLRF FXL ;AZZERA TUTTI I DATI 0027 01AB 00088 CLRF FXH 0028 01AC 00089 CLRF FXHH 0029 01AD 00090 CLRF FYL 002A 01AE 00091 CLRF FYH 002B 01AF 00092 CLRF FYHH 002C 01A5 00093 CLRF FZL 002D 01A6 00094 CLRF FZH 002E 01A7 00095 CLRF FZHH 59 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 3 LINE SOURCE TEXT 002F 22A7 00096 CALL SEC1 ;RITARDO 1 SECONDO 0030 22B6 00097 CALL CONFIGURA_LCD 0031 22EA 00098 CALL RIGA1 0032 230D 00099 CALL RIGA2 0033 2071 00100 CALL SELEZ ;SELEZIONA FLUX 0034 2330 00101 CALL TIME1 0035 2353 00102 CALL TIME2 0036 2376 00103 CALL S_TIME ;SELEZIONA TEMPO 0037 23EE 00104 CALL START ;CONTROLLA SE ATTIVARE MISURAZIONE 0038 1988 00105 LOOPA BTFSC PORTD,3 ;CONTROLLA SE MISURE ASSOLUTE O RELATIVE 0039 285F 00106 GOTO RELATIVO ;SE DIODO RELATIVO E' ON ESEGUI MISURE RELATIVE 003A 2435 00107 CALL LCDA ;VISUALIZZA SU DISPLAY FLUX ATTIVI E DISATTIVI 003B 1988 00108 LOOPAA BTFSC PORTD,3 ;CONTROLLA SE MISURE ASSOLUTE O RELATIVE 003C 285F 00109 GOTO RELATIVO ;SE DIODO RELATIVO E' ON ESEGUI MISURE RELATIVE 003D 22AE 00110 CALL P_RITARDO ;RITARDO PROGRAMMATO 003E 2094 00111 CALL MISURA ;START MISURA 003F 20AE 00112 CALL LEGGI ;LEGGI I FLUX X E Y DAI PIC16F84 0040 082A 00113 MOVF FXL,0 ;CONVERTI IN BCD LETTURA FX 0041 00B0 00114 MOVWF MEM1 0042 082B 00115 MOVF FXH,0 0043 00B1 00116 MOVWF MEM2 0044 082C 00117 MOVF FXHH,0 0045 00B2 00118 MOVWF MEM3 0046 2131 00119 CALL BCD 0047 2500 00120 CALL VISX ;VISUALIZZA LETTURA FX 0048 1CA9 00121 BTFSS FLAG,1 ;CONTROLLA SE ATTIVO FY 0049 283B 00122 GOTO LOOPAA 004A 082D 00123 MOVF FYL,0 ;CONVERTI IN BCD LETTURA FY 004B 00B0 00124 MOVWF MEM1 004C 082E 00125 MOVF FYH,0 004D 00B1 00126 MOVWF MEM2 004E 082F 00127 MOVF FYHH,0 004F 00B2 00128 MOVWF MEM3 0050 2131 00129 CALL BCD 0051 2519 00130 CALL VISY ;VISUALIZZA LETTURA FY 0052 3003 00131 MOVLW 3 ;CONTROLLA SE VISUALIZZARE FZ 0053 0229 00132 SUBWF FLAG,0 0054 1D03 00133 BTFSS STATUS,2 0055 283B 00134 GOTO LOOPAA 0056 0825 00135 MOVF FZL,0 ;CONVERTI IN BCD LETTURA FY 0057 00B0 00136 MOVWF MEM1 0058 0826 00137 MOVF FZH,0 0059 00B1 00138 MOVWF MEM2 005A 0827 00139 MOVF FZHH,0 005B 00B2 00140 MOVWF MEM3 005C 2131 00141 CALL BCD 005D 2531 00142 CALL VISZ ;VISUALIZZA LETTURA FZ 005E 283B 00143 GOTO LOOPAA 005F 00144 RELATIVO 005F 2549 00145 CALL LCDREL 0060 2094 00146 LPPRR CALL MISURA ;START MISURA 0061 20AE 00147 CALL LEGGI ;LEGGI I FLUX X E Y DAI PIC16F84 Message[305]: Using default destination of 1 (file). 60 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 0062 0063 0064 0065 0066 0067 0068 0069 006A 006B 006C 006D 006E 006F 0070 MAGN77.ASM 4-8-2006 12:06:09 PAGE 4 LINE SOURCE TEXT 08BA 1D03 21C8 21FC 083E 00B0 083F 00B1 0840 00B2 2131 258E 2278 22AE 2860 00148 MOVF ZER 00149 BTFSS STATUS,2 00150 CALL MEMORIA ;MEMORIZZA NUOVO OFFSET 00151 CALL SOTTRAI ;ESEGUI LA SOTTRAZIONE 00152 MOVF LTCL1,0 ;CONVERTI IN BCD 00153 MOVWF MEM1 00154 MOVF LTCH1,0 00155 MOVWF MEM2 00156 MOVF LTCHH1,0 00157 MOVWF MEM3 00158 CALL BCD 00159 CALL LCDOFF 00160 CALL SERIALE 00161 CALL P_RITARDO ;RITARDO PROGRAMMATO 00162 GOTO LPPRR 00163 00164 ;******************ROUTINE SELEZIONA FLUX GATE 0071 1889 00165 SELEZ BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 0072 2871 00166 GOTO SELEZ 0073 3004 00167 MOVLW 4 Message[305]: Using default destination of 1 (file). 0074 0688 00168 XORWF PORTD ;COMMUTA LED FG1 0075 22E4 00169 CALL MS20 ;ELIMINA RIMBALZI 0076 1C89 00170 S1 BTFSS PORTE,1 ;CONTROLLA SE RILASCIATO SELECT 0077 2876 00171 GOTO S1 0078 22E4 00172 CALL MS20 0079 1C09 00173 S2 BTFSS PORTE,0 ;CONTROLLA SE USCIRE 007A 2890 00174 GOTO SFUORI 007B 1889 00175 BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 007C 2879 00176 GOTO S2 007D 3002 00177 MOVLW 2 Message[305]: Using default destination of 1 (file). 007E 0688 00178 XORWF PORTD ;COMMUTA LED FG2 007F 22E4 00179 CALL MS20 0080 3002 00180 MOVLW 2 0081 00A9 00181 MOVWF FLAG 0082 1C89 00182 S3 BTFSS PORTE,1 ;CONTROLLA SE RILASCIATO SELECT 0083 2882 00183 GOTO S3 0084 22E4 00184 CALL MS20 0085 1C09 00185 S4 BTFSS PORTE,0 ;CONTROLLA SE USCIRE 0086 2890 00186 GOTO SFUORI 0087 1889 00187 BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 0088 2885 00188 GOTO S4 0089 3008 00189 MOVLW 8 Message[305]: Using default destination of 1 (file). 008A 0687 00190 XORWF PORTC ;COMMUTA LED FG3 008B 22E4 00191 CALL MS20 008C 3003 00192 MOVLW 3 008D 00A9 00193 MOVWF FLAG 008E 1C89 00194 S5 BTFSS PORTE,1 ;CONTROLLA SE RILASCIATO SELECT 008F 288E 00195 GOTO S5 0090 22E4 00196 SFUORI CALL MS20 0091 1C09 00197 BTFSS PORTE,0 ;CONTROLLA SE RILASCIATO 61 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 5 LINE SOURCE TEXT 0092 2890 0093 0008 00198 GOTO SFUORI 00199 RETURN 00200 00201 ;******************ROUTINE MISURA 0094 1408 00202 MISURA BSF PORTD,0 ;ACCENDI LED MISURA 0095 3006 00203 MOVLW D'6' ;RESET TEMPO 0096 0081 00204 MOVWF TMR0 0097 01A2 00205 CLRF MS 0098 01A3 00206 CLRF DS 0099 01A4 00207 CLRF SEC 009A 1505 00208 BSF PORTA,2 ;COMMAND ALTO 009B 018E 00209 CLRF TMR1L ;AZZERA CONTEGGIO IMPULSI 009C 018F 00210 CLRF TMR1H 009D 01A7 00211 CLRF FZHH 009E 100C 00212 BCF PIR1,0 ;Azzera flag interrupt TMR1 Message[305]: Using default destination of 1 (file). 009F 08A4 00213 LPT MOVF SEC 00A0 1903 00214 BTFSC STATUS,2 ;TRASCORSO 1 SECONDO? 00A1 28A9 00215 GOTO LPTMR 00A2 080E 00216 MOVF TMR1L,0 ;SALVA CONTEGGIO 00A3 00A5 00217 MOVWF FZL 00A4 080F 00218 MOVF TMR1H,0 00A5 00A6 00219 MOVWF FZH 00A6 1105 00220 BCF PORTA,2 ;COMMAND BASSO 00A7 1008 00221 BCF PORTD,0 ;SPEGNI LED MISURA 00A8 0008 00222 RETURN 00A9 1C0C 00223 LPTMR BTFSS PIR1,0 ;CONTROLLA SE TRABOCCAMENTO TMR1 00AA 289F 00224 GOTO LPT Message[305]: Using default destination of 1 (file). 00AB 0AA7 00225 INCF FZHH 00AC 100C 00226 BCF PIR1,0 ;Azzera flag interrupt TMR1 00AD 289F 00227 GOTO LPT 00228 00229 ;******************ROUTINE LEGGI 00AE 01AA 00230 LEGGI CLRF FXL 00AF 01AB 00231 CLRF FXH 00B0 01AC 00232 CLRF FXHH 00B1 1485 00233 BSF PORTA,1 ;SELECT2 ALTO 00B2 1E05 00234 LG1 BTFSS PORTA,4 ;CONTROLLA SE RISPOSTA DA PIC 00B3 28B2 00235 GOTO LG1 00B4 1085 00236 BCF PORTA,1 ;SELECT2 BASSO 00B5 3009 00237 MOVLW 9 ;SINCRONIZZA CLOCK 00B6 0081 00238 MOVWF TMR0 00B7 22D8 00239 CALL MS1 ;PORTATI A CENTRO BIT 00B8 22DE 00240 CALL MS2 00B9 1A05 00241 BTFSC PORTA,4 ;LEGGI 18 BIT 00BA 142A 00242 BSF FXL,0 00BB 22DE 00243 CALL MS2 00BC 1A05 00244 BTFSC PORTA,4 00BD 14AA 00245 BSF FXL,1 00BE 22DE 00246 CALL MS2 00BF 1A05 00247 BTFSC PORTA,4 00C0 152A 00248 BSF FXL,2 62 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 00C1 00C2 00C3 00C4 00C5 00C6 00C7 00C8 00C9 00CA 00CB 00CC 00CD 00CE 00CF 00D0 00D1 00D2 00D3 00D4 00D5 00D6 00D7 00D8 00D9 00DA 00DB 00DC 00DD 00DE 00DF 00E0 00E1 00E2 00E3 00E4 00E5 00E6 00E7 00E8 00E9 00EA 00EB 00EC 00ED 00EE 00EF 00F0 00F1 00F2 00F3 00F4 00F5 22DE 1A05 15AA 22DE 1A05 162A 22DE 1A05 16AA 22DE 1A05 172A 22DE 1A05 17AA 22DE 1A05 142B 22DE 1A05 14AB 22DE 1A05 152B 22DE 1A05 15AB 22DE 1A05 162B 22DE 1A05 16AB 22DE 1A05 172B 22DE 1A05 17AB 22DE 1A05 142C 22DE 1A05 14AC 1CA9 0008 01AD 01AE 01AF 1405 1E85 28F4 MAGN77.ASM 4-8-2006 12:06:09 PAGE 6 LINE SOURCE TEXT 00249 CALL MS2 00250 BTFSC PORTA,4 00251 BSF FXL,3 00252 CALL MS2 00253 BTFSC PORTA,4 00254 BSF FXL,4 00255 CALL MS2 00256 BTFSC PORTA,4 00257 BSF FXL,5 00258 CALL MS2 00259 BTFSC PORTA,4 00260 BSF FXL,6 00261 CALL MS2 00262 BTFSC PORTA,4 00263 BSF FXL,7 00264 CALL MS2 00265 BTFSC PORTA,4 ;-00266 BSF FXH,0 00267 CALL MS2 00268 BTFSC PORTA,4 00269 BSF FXH,1 00270 CALL MS2 00271 BTFSC PORTA,4 00272 BSF FXH,2 00273 CALL MS2 00274 BTFSC PORTA,4 00275 BSF FXH,3 00276 CALL MS2 00277 BTFSC PORTA,4 00278 BSF FXH,4 00279 CALL MS2 00280 BTFSC PORTA,4 00281 BSF FXH,5 00282 CALL MS2 00283 BTFSC PORTA,4 00284 BSF FXH,6 00285 CALL MS2 00286 BTFSC PORTA,4 00287 BSF FXH,7 00288 CALL MS2 00289 BTFSC PORTA,4 ;-00290 BSF FXHH,0 00291 CALL MS2 00292 BTFSC PORTA,4 00293 BSF FXHH,1 00294 BTFSS FLAG,1 ;CONTROLLA SE LEGGERE FGY 00295 RETURN 00296 CLRF FYL 00297 CLRF FYH 00298 CLRF FYHH 00299 BSF PORTA,0 ;SELECT1 ALTO 00300 LG2 BTFSS PORTA,5 ;CONTROLLA SE RISPOSTA DA PIC 00301 GOTO LG2 63 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 00F6 00F7 00F8 00F9 00FA 00FB 00FC 00FD 00FE 00FF 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E 010F 0110 0111 0112 0113 0114 0115 0116 0117 0118 0119 011A 011B 011C 011D 011E 011F 0120 0121 0122 0123 0124 0125 0126 0127 0128 0129 012A 1005 3009 0081 22D8 22DE 1A85 142D 22DE 1A85 14AD 22DE 1A85 152D 22DE 1A85 15AD 22DE 1A85 162D 22DE 1A85 16AD 22DE 1A85 172D 22DE 1A85 17AD 22DE 1A85 142E 22DE 1A85 14AE 22DE 1A85 152E 22DE 1A85 15AE 22DE 1A85 162E 22DE 1A85 16AE 22DE 1A85 172E 22DE 1A85 17AE 22DE MAGN77.ASM 4-8-2006 12:06:09 PAGE 7 LINE SOURCE TEXT 00302 00303 00304 00305 00306 00307 00308 00309 00310 00311 00312 00313 00314 00315 00316 00317 00318 00319 00320 00321 00322 00323 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 00337 00338 00339 00340 00341 00342 00343 00344 00345 00346 00347 00348 00349 00350 00351 00352 00353 00354 BCF PORTA,0 ;SELECT1 BASSO MOVLW 9 ;SINCRONIZZA CLOCK MOVWF TMR0 CALL MS1 ;PORTATI A CENTRO BIT CALL MS2 BTFSC PORTA,5 ;LEGGI 18 BIT BSF FYL,0 CALL MS2 BTFSC PORTA,5 BSF FYL,1 CALL MS2 BTFSC PORTA,5 BSF FYL,2 CALL MS2 BTFSC PORTA,5 BSF FYL,3 CALL MS2 BTFSC PORTA,5 BSF FYL,4 CALL MS2 BTFSC PORTA,5 BSF FYL,5 CALL MS2 BTFSC PORTA,5 BSF FYL,6 CALL MS2 BTFSC PORTA,5 BSF FYL,7 CALL MS2 BTFSC PORTA,5 ;-BSF FYH,0 CALL MS2 BTFSC PORTA,5 BSF FYH,1 CALL MS2 BTFSC PORTA,5 BSF FYH,2 CALL MS2 BTFSC PORTA,5 BSF FYH,3 CALL MS2 BTFSC PORTA,5 BSF FYH,4 CALL MS2 BTFSC PORTA,5 BSF FYH,5 CALL MS2 BTFSC PORTA,5 BSF FYH,6 CALL MS2 BTFSC PORTA,5 BSF FYH,7 CALL MS2 64 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 012B 012C 012D 012E 012F 0130 MAGN77.ASM 4-8-2006 12:06:09 PAGE 8 LINE SOURCE TEXT 1A85 142F 22DE 1A85 14AF 0008 00355 BTFSC PORTA,5 ;-00356 BSF FYHH,0 00357 CALL MS2 00358 BTFSC PORTA,5 00359 BSF FYHH,1 00360 RETURN 00361 00362 ;************************************** BCD 00363 ;NOTE: 100.000 IN HEX VALE "186A0" 0131 01B4 00364 BCD CLRF MIGLIAIA_D 0132 01B3 00365 CLRF MIGLIAIA_C 0133 01B6 00366 CLRF CENTINAIA ;inizializza locazioni di memoria 0134 01B5 00367 CLRF MIGLIAIA 0135 01B7 00368 CLRF DECINE 0136 3002 00369 BCD1 MOVLW 2 ;CONTROLLA SE NUMERO>DI 100.000 0137 0232 00370 SUBWF MEM3,0 0138 1C03 00371 BTFSS STATUS,0 0139 2949 00372 GOTO BCD11 Message[305]: Using default destination of 1 (file). 013A 0AB3 00373 INCF MIGLIAIA_C 013B 30A0 00374 MOVLW 0XA0 Message[305]: Using default destination of 1 (file). 013C 02B0 00375 SUBWF MEM1 013D 1803 00376 BTFSC STATUS,0 013E 2943 00377 GOTO BCD111 013F 3001 00378 MOVLW 1 Message[305]: Using default destination of 1 (file). 0140 02B1 00379 SUBWF MEM2 0141 1C03 00380 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0142 03B2 00381 DECF MEM3 0143 3086 00382 BCD111 MOVLW 0X86 Message[305]: Using default destination of 1 (file). 0144 02B1 00383 SUBWF MEM2 0145 1C03 00384 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0146 03B2 00385 DECF MEM3 Message[305]: Using default destination of 1 (file). 0147 03B2 00386 DECF MEM3 0148 2936 00387 GOTO BCD1 0149 3001 00388 BCD11 MOVLW 1 014A 0232 00389 SUBWF MEM3,0 014B 1C03 00390 BTFSS STATUS,0 014C 2968 00391 GOTO BCD2 014D 3087 00392 MOVLW 0X87 014E 0231 00393 SUBWF MEM2,0 014F 1C03 00394 BTFSS STATUS,0 0150 295A 00395 GOTO BCDU Message[305]: Using default destination of 1 (file). 0151 0AB3 00396 INCF MIGLIAIA_C 0152 30A0 00397 MOVLW 0XA0 Message[305]: Using default destination of 1 (file). 0153 02B0 00398 SUBWF MEM1 65 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 9 LINE SOURCE TEXT 0154 1C03 00399 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0155 03B1 00400 DECF MEM2 0156 3086 00401 MOVLW 0X86 Message[305]: Using default destination of 1 (file). 0157 02B1 00402 SUBWF MEM2 Message[305]: Using default destination of 1 (file). 0158 03B2 00403 DECF MEM3 0159 2968 00404 GOTO BCD2 015A 3086 00405 BCDU MOVLW 0X86 015B 0231 00406 SUBWF MEM2,0 015C 1C03 00407 BTFSS STATUS,0 015D 2968 00408 GOTO BCD2 015E 30A0 00409 MOVLW 0XA0 015F 0230 00410 SUBWF MEM1,0 0160 1C03 00411 BTFSS STATUS,0 0161 2968 00412 GOTO BCD2 Message[305]: Using default destination of 1 (file). 0162 0AB3 00413 INCF MIGLIAIA_C 0163 30A0 00414 MOVLW 0XA0 Message[305]: Using default destination of 1 (file). 0164 02B0 00415 SUBWF MEM1 0165 3086 00416 MOVLW 0X86 Message[305]: Using default destination of 1 (file). 0166 02B1 00417 SUBWF MEM2 Message[305]: Using default destination of 1 (file). 0167 03B2 00418 DECF MEM3 0168 3001 00419 BCD2 MOVLW 1 ;CALCOLA DECINE MIGLIAIA (10000=2710) 0169 0232 00420 SUBWF MEM3,0 016A 1C03 00421 BTFSS STATUS,0 016B 297A 00422 GOTO BCD22 Message[305]: Using default destination of 1 (file). 016C 0AB4 00423 INCF MIGLIAIA_D 016D 3010 00424 MOVLW 0X10 Message[305]: Using default destination of 1 (file). 016E 02B0 00425 SUBWF MEM1 016F 1803 00426 BTFSC STATUS,0 0170 2975 00427 GOTO BCD222 0171 3001 00428 MOVLW 1 Message[305]: Using default destination of 1 (file). 0172 02B1 00429 SUBWF MEM2 0173 1C03 00430 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0174 03B2 00431 DECF MEM3 0175 3027 00432 BCD222 MOVLW 0X27 Message[305]: Using default destination of 1 (file). 0176 02B1 00433 SUBWF MEM2 0177 1C03 00434 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0178 03B2 00435 DECF MEM3 0179 2968 00436 GOTO BCD2 017A 3028 00437 BCD22 MOVLW 0X28 017B 0231 00438 SUBWF MEM2,0 66 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 10 LINE SOURCE TEXT 017C 1C03 00439 BTFSS STATUS,0 017D 2986 00440 GOTO BCD2U Message[305]: Using default destination of 1 (file). 017E 0AB4 00441 INCF MIGLIAIA_D 017F 3010 00442 MOVLW 0X10 Message[305]: Using default destination of 1 (file). 0180 02B0 00443 SUBWF MEM1 0181 1C03 00444 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 0182 03B1 00445 DECF MEM2 0183 3027 00446 MOVLW 0X27 Message[305]: Using default destination of 1 (file). 0184 02B1 00447 SUBWF MEM2 0185 297A 00448 GOTO BCD22 0186 3027 00449 BCD2U MOVLW 0X27 0187 0231 00450 SUBWF MEM2,0 0188 1C03 00451 BTFSS STATUS,0 0189 2993 00452 GOTO BCD3 018A 3010 00453 MOVLW 0X10 018B 0230 00454 SUBWF MEM1,0 018C 1C03 00455 BTFSS STATUS,0 018D 2993 00456 GOTO BCD3 Message[305]: Using default destination of 1 (file). 018E 0AB4 00457 INCF MIGLIAIA_D 018F 3010 00458 MOVLW 0X10 Message[305]: Using default destination of 1 (file). 0190 02B0 00459 SUBWF MEM1 0191 3027 00460 MOVLW 0X27 Message[305]: Using default destination of 1 (file). 0192 02B1 00461 SUBWF MEM2 0193 3004 00462 BCD3 MOVLW 4 ;CONTROLLA SE DATO DA CONVERTIRE >=1000 (3E8 IN HEX) 0194 0231 00463 SUBWF MEM2,0 0195 1C03 00464 BTFSS STATUS,0 0196 299F 00465 GOTO BCD33 Message[305]: Using default destination of 1 (file). 0197 0AB5 00466 INCF MIGLIAIA 0198 30E8 00467 MOVLW 0XE8 Message[305]: Using default destination of 1 (file). 0199 02B0 00468 SUBWF MEM1 019A 1C03 00469 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 019B 03B1 00470 DECF MEM2 019C 3003 00471 MOVLW 3 Message[305]: Using default destination of 1 (file). 019D 02B1 00472 SUBWF MEM2 019E 2993 00473 GOTO BCD3 019F 3003 00474 BCD33 MOVLW 3 01A0 0231 00475 SUBWF MEM2,0 01A1 1C03 00476 BTFSS STATUS,0 01A2 29AC 00477 GOTO BCD4 01A3 30E8 00478 MOVLW 0XE8 01A4 0230 00479 SUBWF MEM1,0 01A5 1C03 00480 BTFSS STATUS,0 67 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 11 LINE SOURCE TEXT 01A6 29AC 00481 GOTO BCD4 Message[305]: Using default destination of 1 (file). 01A7 0AB5 00482 INCF MIGLIAIA 01A8 30E8 00483 MOVLW 0XE8 Message[305]: Using default destination of 1 (file). 01A9 02B0 00484 SUBWF MEM1 01AA 3003 00485 MOVLW 3 Message[305]: Using default destination of 1 (file). 01AB 02B1 00486 SUBWF MEM2 Message[305]: Using default destination of 1 (file). 01AC 08B1 00487 BCD4 MOVF MEM2 ;CONTROLLA SE DATO >=100 (64 in hex) 01AD 1903 00488 BTFSC STATUS,2 01AE 29B5 00489 GOTO BCD5 Message[305]: Using default destination of 1 (file). 01AF 0AB6 00490 INCF CENTINAIA 01B0 3064 00491 MOVLW 0X64 Message[305]: Using default destination of 1 (file). 01B1 02B0 00492 SUBWF MEM1 01B2 1C03 00493 BTFSS STATUS,0 Message[305]: Using default destination of 1 (file). 01B3 03B1 00494 DECF MEM2 01B4 29AC 00495 GOTO BCD4 01B5 3064 00496 BCD5 MOVLW 0X64 01B6 0230 00497 SUBWF MEM1,0 01B7 1C03 00498 BTFSS STATUS,0 01B8 29BD 00499 GOTO BCD6 Message[305]: Using default destination of 1 (file). 01B9 0AB6 00500 INCF CENTINAIA 01BA 3064 00501 MOVLW 0X64 Message[305]: Using default destination of 1 (file). 01BB 02B0 00502 SUBWF MEM1 01BC 29B5 00503 GOTO BCD5 01BD 300A 00504 BCD6 MOVLW D'10' 01BE 0230 00505 SUBWF MEM1,0 01BF 1C03 00506 BTFSS STATUS,0 01C0 29C5 00507 GOTO BCD7 Message[305]: Using default destination of 1 (file). 01C1 0AB7 00508 INCF DECINE 01C2 300A 00509 MOVLW D'10' Message[305]: Using default destination of 1 (file). 01C3 02B0 00510 SUBWF MEM1 01C4 29BD 00511 GOTO BCD6 01C5 0830 00512 BCD7 MOVF MEM1,0 ;salva unita' 01C6 00B8 00513 MOVWF UNITA 01C7 0008 00514 RETURN 00515 00516 ;******************ROUTINE MEMORIA 01C8 082A 00517 MEMORIA MOVF FXL,0 ;SALVA DATI FX 01C9 00BB 00518 MOVWF LTCL 01CA 082B 00519 MOVF FXH,0 01CB 00BC 00520 MOVWF LTCH 01CC 082C 00521 MOVF FXHH,0 01CD 00BD 00522 MOVWF LTCHH 68 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 12 LINE SOURCE TEXT Message[305]: Using default destination of 1 (file). 01CE 08A9 00523 MOVF FLAG ;CONTROLLA SE ATTIVO SOLO FX 01CF 1903 00524 BTFSC STATUS,2 01D0 0008 00525 RETURN 01D1 082D 00526 MOVF FYL,0 Message[305]: Using default destination of 1 (file). 01D2 07BB 00527 ADDWF LTCL 01D3 1803 00528 BTFSC STATUS,0 ;CONTROLLA RIPORTO 01D4 29F2 00529 GOTO MM1 01D5 082E 00530 MM2 MOVF FYH,0 Message[305]: Using default destination of 1 (file). 01D6 07BC 00531 ADDWF LTCH 01D7 1803 00532 BTFSC STATUS,0 ;CONTROLLA RIPORTO Message[305]: Using default destination of 1 (file). 01D8 0ABD 00533 INCF LTCHH 01D9 082F 00534 MOVF FYHH,0 Message[305]: Using default destination of 1 (file). 01DA 07BD 00535 ADDWF LTCHH 01DB 1003 00536 BCF STATUS,0 ;DIVIDI PER 2 Message[305]: Using default destination of 1 (file). 01DC 0CBD 00537 RRF LTCHH Message[305]: Using default destination of 1 (file). 01DD 0CBC 00538 RRF LTCH Message[305]: Using default destination of 1 (file). 01DE 0CBB 00539 RRF LTCL 01DF 3003 00540 MOVLW 3 ;CONTROLLA SE ATTIVI 3 FLUX 01E0 0229 00541 SUBWF FLAG,0 01E1 1D03 00542 BTFSS STATUS,2 01E2 0008 00543 RETURN 01E3 0825 00544 MOVF FZL,0 Message[305]: Using default destination of 1 (file). 01E4 07BB 00545 ADDWF LTCL 01E5 1803 00546 BTFSC STATUS,0 ;CONTROLLA RIPORTO 01E6 29F7 00547 GOTO MM3 01E7 0826 00548 MM4 MOVF FZH,0 Message[305]: Using default destination of 1 (file). 01E8 07BC 00549 ADDWF LTCH 01E9 1803 00550 BTFSC STATUS,0 ;CONTROLLA RIPORTO Message[305]: Using default destination of 1 (file). 01EA 0ABD 00551 INCF LTCHH 01EB 0827 00552 MOVF FZHH,0 Message[305]: Using default destination of 1 (file). 01EC 07BD 00553 ADDWF LTCHH 01ED 1003 00554 BCF STATUS,0 ;DIVIDI PER 2 Message[305]: Using default destination of 1 (file). 01EE 0CBD 00555 RRF LTCHH Message[305]: Using default destination of 1 (file). 01EF 0CBC 00556 RRF LTCH Message[305]: Using default destination of 1 (file). 01F0 0CBB 00557 RRF LTCL 01F1 0008 00558 RETURN 01F2 3001 00559 MM1 MOVLW 1 Message[305]: Using default destination of 1 (file). 69 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 13 LINE SOURCE TEXT 01F3 07BC 00560 ADDWF LTCH 01F4 1803 00561 BTFSC STATUS,0 Message[305]: Using default destination of 1 (file). 01F5 0ABD 00562 INCF LTCHH 01F6 29D5 00563 GOTO MM2 01F7 3001 00564 MM3 MOVLW 1 Message[305]: Using default destination of 1 (file). 01F8 07BC 00565 ADDWF LTCH 01F9 1803 00566 BTFSC STATUS,0 Message[305]: Using default destination of 1 (file). 01FA 0ABD 00567 INCF LTCHH 01FB 29E7 00568 GOTO MM4 00569 00570 ;******************ROUTINE SOTTRAI 01FC 082A 00571 SOTTRAI MOVF FXL,0 ;SALVA DATI FX 01FD 00BE 00572 MOVWF LTCL1 01FE 082B 00573 MOVF FXH,0 01FF 00BF 00574 MOVWF LTCH1 0200 082C 00575 MOVF FXHH,0 0201 00C0 00576 MOVWF LTCHH1 Message[305]: Using default destination of 1 (file). 0202 08A9 00577 MOVF FLAG ;CONTROLLA SE ATTIVO SOLO FX 0203 1903 00578 BTFSC STATUS,2 0204 2A30 00579 GOTO STT 0205 082D 00580 MOVF FYL,0 Message[305]: Using default destination of 1 (file). 0206 07BE 00581 ADDWF LTCL1 0207 1803 00582 BTFSC STATUS,0 ;CONTROLLA RIPORTO 0208 2A26 00583 GOTO MM11 0209 082E 00584 MM21 MOVF FYH,0 Message[305]: Using default destination of 1 (file). 020A 07BF 00585 ADDWF LTCH1 020B 1803 00586 BTFSC STATUS,0 ;CONTROLLA RIPORTO Message[305]: Using default destination of 1 (file). 020C 0AC0 00587 INCF LTCHH1 020D 082F 00588 MOVF FYHH,0 Message[305]: Using default destination of 1 (file). 020E 07C0 00589 ADDWF LTCHH1 020F 1003 00590 BCF STATUS,0 ;DIVIDI PER 2 Message[305]: Using default destination of 1 (file). 0210 0CC0 00591 RRF LTCHH1 Message[305]: Using default destination of 1 (file). 0211 0CBF 00592 RRF LTCH1 Message[305]: Using default destination of 1 (file). 0212 0CBE 00593 RRF LTCL1 0213 3003 00594 MOVLW 3 ;CONTROLLA SE ATTIVI 3 FLUX 0214 0229 00595 SUBWF FLAG,0 0215 1D03 00596 BTFSS STATUS,2 0216 2A30 00597 GOTO STT 0217 0825 00598 MOVF FZL,0 Message[305]: Using default destination of 1 (file). 0218 07BE 00599 ADDWF LTCL1 0219 1803 00600 BTFSC STATUS,0 ;CONTROLLA RIPORTO 70 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 14 LINE SOURCE TEXT 021A 2A2B 00601 GOTO MM31 021B 0826 00602 MM41 MOVF FZH,0 Message[305]: Using default destination of 1 (file). 021C 07BF 00603 ADDWF LTCH1 021D 1803 00604 BTFSC STATUS,0 ;CONTROLLA RIPORTO Message[305]: Using default destination of 1 (file). 021E 0AC0 00605 INCF LTCHH1 021F 0827 00606 MOVF FZHH,0 Message[305]: Using default destination of 1 (file). 0220 07C0 00607 ADDWF LTCHH1 0221 1003 00608 BCF STATUS,0 ;DIVIDI PER 2 Message[305]: Using default destination of 1 (file). 0222 0CC0 00609 RRF LTCHH1 Message[305]: Using default destination of 1 (file). 0223 0CBF 00610 RRF LTCH1 Message[305]: Using default destination of 1 (file). 0224 0CBE 00611 RRF LTCL1 0225 2A30 00612 GOTO STT 0226 3001 00613 MM11 MOVLW 1 Message[305]: Using default destination of 1 (file). 0227 07BF 00614 ADDWF LTCH1 0228 1803 00615 BTFSC STATUS,0 Message[305]: Using default destination of 1 (file). 0229 0AC0 00616 INCF LTCHH1 022A 2A09 00617 GOTO MM21 022B 3001 00618 MM31 MOVLW 1 Message[305]: Using default destination of 1 (file). 022C 07BF 00619 ADDWF LTCH1 022D 1803 00620 BTFSC STATUS,0 Message[305]: Using default destination of 1 (file). 022E 0AC0 00621 INCF LTCHH1 022F 2A1B 00622 GOTO MM41 0230 083D 00623 STT MOVF LTCHH,0 ;ESEGUI SOTTRAZIONE 0231 0240 00624 SUBWF LTCHH1,0 0232 1C03 00625 BTFSS STATUS,0 ;SE C=0 OFFSET CON SEGNO0233 2A46 00626 GOTO MENO 0234 1D03 00627 BTFSS STATUS,2 ;SE Z=1 SONO UGUALI- NECESSARIO NUOVO CONTROLLO 0235 2A64 00628 GOTO PIU 0236 083C 00629 MOVF LTCH,0 ;CONTROLLA ANCORA 0237 023F 00630 SUBWF LTCH1,0 0238 1C03 00631 BTFSS STATUS,0 ;SE C=0 OFFSET CON SEGNO0239 2A46 00632 GOTO MENO 023A 1D03 00633 BTFSS STATUS,2 ;SE Z=1 SONO UGUALI- NECESSARIO NUOVO CONTROLLO 023B 2A64 00634 GOTO PIU 023C 083B 00635 MOVF LTCL,0 ;CONTROLLA ANCORA 023D 023E 00636 SUBWF LTCL1,0 023E 1C03 00637 BTFSS STATUS,0 ;SE C=0 OFFSET CON SEGNO023F 2A46 00638 GOTO MENO 0240 1D03 00639 BTFSS STATUS,2 ;SE Z=1 SONO UGUALI- NECESSARIO NUOVO CONTROLLO 0241 2A64 00640 GOTO PIU 0242 01BE 00641 CLRF LTCL1 0243 01BF 00642 CLRF LTCH1 0244 01C0 00643 CLRF LTCHH1 71 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 15 LINE SOURCE TEXT 0245 0008 00644 RETURN 0246 3001 00645 MENO MOVLW 1 0247 00C4 00646 MOVWF SEGNO 0248 083B 00647 MOVF LTCL,0 0249 00C1 00648 MOVWF LTCL2 024A 083C 00649 MOVF LTCH,0 024B 00C2 00650 MOVWF LTCH2 024C 083D 00651 MOVF LTCHH,0 024D 00C3 00652 MOVWF LTCHH2 024E 083E 00653 MOVF LTCL1,0 024F 0241 00654 SUBWF LTCL2,0 0250 00BE 00655 MOVWF LTCL1 0251 1803 00656 BTFSC STATUS,0 0252 2A59 00657 GOTO SS 0253 3001 00658 MOVLW 1 Message[305]: Using default destination of 1 (file). 0254 02C2 00659 SUBWF LTCH2 0255 1803 00660 BTFSC STATUS,0 0256 2A59 00661 GOTO SS 0257 3001 00662 MOVLW 1 Message[305]: Using default destination of 1 (file). 0258 02C3 00663 SUBWF LTCHH2 0259 083F 00664 SS MOVF LTCH1,0 025A 0242 00665 SUBWF LTCH2,0 025B 00BF 00666 MOVWF LTCH1 025C 1803 00667 BTFSC STATUS,0 025D 2A60 00668 GOTO SS1 025E 3001 00669 MOVLW 1 Message[305]: Using default destination of 1 (file). 025F 02C3 00670 SUBWF LTCHH2 0260 0840 00671 SS1 MOVF LTCHH1,0 0261 0243 00672 SUBWF LTCHH2,0 0262 00C0 00673 MOVWF LTCHH1 0263 0008 00674 RETURN 0264 01C4 00675 PIU CLRF SEGNO 0265 083B 00676 MOVF LTCL,0 Message[305]: Using default destination of 1 (file). 0266 02BE 00677 SUBWF LTCL1 0267 1803 00678 BTFSC STATUS,0 0268 2A6F 00679 GOTO SS2 0269 3001 00680 MOVLW 1 Message[305]: Using default destination of 1 (file). 026A 02BF 00681 SUBWF LTCH1 026B 1803 00682 BTFSC STATUS,0 026C 2A6F 00683 GOTO SS2 026D 3001 00684 MOVLW 1 Message[305]: Using default destination of 1 (file). 026E 02C0 00685 SUBWF LTCHH1 026F 083C 00686 SS2 MOVF LTCH,0 Message[305]: Using default destination of 1 (file). 0270 02BF 00687 SUBWF LTCH1 0271 1803 00688 BTFSC STATUS,0 0272 2A75 00689 GOTO SS3 ;MEMORIZZA SEGNO ;MEMORIZZA SEGNO 72 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 16 LINE SOURCE TEXT 0273 3001 00690 MOVLW 1 Message[305]: Using default destination of 1 (file). 0274 02C0 00691 SUBWF LTCHH1 0275 083D 00692 SS3 MOVF LTCHH,0 Message[305]: Using default destination of 1 (file). 0276 02C0 00693 SUBWF LTCHH1 0277 0008 00694 RETURN 00695 00696 ;******************ROUTINE TRASMISSIONE SERIALE 1 DATO OGNI 4 SECONDI********* 00697 ;** SI INVIANO 7 BYTE: IL PRIMO E' IL FLAG CHE SE A 1 SIGNIFICA NUOVO OFFSET 00698 ;** ALTRIMENTI NESSUNA MODIFICA--SEGUONO FX, FY,FZ DAL BYTE LSB AL MSB 0278 1408 00699 SERIALE BSF PORTD,0 ;ACCENDI LED 0279 083A 00700 MOVF ZER,0 ;TRASMETTI UNO SE ATTIVATO OFFSET ALTRIMENTI ZERO 027A 0099 00701 MOVWF TXREG 027B 01BA 00702 CLRF ZER ;AZZERA FLAG OFFSET 027C 1E0C 00703 SERF BTFSS PIR1,4 ;CONTROLLA SE INVIATO DATO 027D 2A7C 00704 GOTO SERF 027E 082A 00705 MOVF FXL,0 ;INVIA BYTE FX 027F 0099 00706 MOVWF TXREG 0280 1E0C 00707 SER1X BTFSS PIR1,4 ;CONTROLLA SE INVIATO DATO 0281 2A80 00708 GOTO SER1X 0282 082B 00709 MOVF FXH,0 0283 0099 00710 MOVWF TXREG 0284 1E0C 00711 SER2X BTFSS PIR1,4 0285 2A84 00712 GOTO SER2X 0286 082C 00713 MOVF FXHH,0 0287 0099 00714 MOVWF TXREG 0288 1E0C 00715 SER3X BTFSS PIR1,4 0289 2A88 00716 GOTO SER3X 028A 082D 00717 MOVF FYL,0 ;INVIA BYTE FY 028B 0099 00718 MOVWF TXREG 028C 1E0C 00719 SER1Y BTFSS PIR1,4 ;CONTROLLA SE INVIATO DATO 028D 2A8C 00720 GOTO SER1Y 028E 082E 00721 MOVF FYH,0 028F 0099 00722 MOVWF TXREG 0290 1E0C 00723 SER2Y BTFSS PIR1,4 0291 2A90 00724 GOTO SER2Y 0292 082F 00725 MOVF FYHH,0 0293 0099 00726 MOVWF TXREG 0294 1E0C 00727 SER3Y BTFSS PIR1,4 0295 2A94 00728 GOTO SER3Y 0296 0825 00729 MOVF FZL,0 ;INVIA BYTE FZ 0297 0099 00730 MOVWF TXREG 0298 1E0C 00731 SER1Z BTFSS PIR1,4 ;CONTROLLA SE INVIATO DATO 0299 2A98 00732 GOTO SER1Z 029A 0826 00733 MOVF FZH,0 029B 0099 00734 MOVWF TXREG 029C 1E0C 00735 SER2Z BTFSS PIR1,4 029D 2A9C 00736 GOTO SER2Z 029E 0827 00737 MOVF FZHH,0 029F 0099 00738 MOVWF TXREG 02A0 1E0C 00739 SER3Z BTFSS PIR1,4 02A1 2AA0 00740 GOTO SER3Z 73 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 02A2 02A3 02A4 02A5 02A6 MAGN77.ASM 4-8-2006 12:06:09 PAGE 17 LINE SOURCE TEXT 1008 22A7 22A7 22A7 0008 00741 BCF PORTD,0 ;SPEGNI LED 00742 CALL SEC1 00743 CALL SEC1 00744 CALL SEC1 00745 RETURN 00746 00747 ;******************ROUTINE RITARDO 1 SECONDO ****************** 02A7 01A2 00748 SEC1 CLRF MS 02A8 01A3 00749 CLRF DS 02A9 01A4 00750 CLRF SEC Message[305]: Using default destination of 1 (file). 02AA 08A4 00751 LPSEC MOVF SEC 02AB 1903 00752 BTFSC STATUS,2 02AC 2AAA 00753 GOTO LPSEC 02AD 0008 00754 RETURN 00755 00756 ;******************ROUTINE RITARDO PROGRAMMATO ****************** 02AE 00757 P_RITARDO 02AE 01A2 00758 CLRF MS 02AF 01A3 00759 CLRF DS 02B0 01A4 00760 CLRF SEC 02B1 0845 00761 LPSECP MOVF MSEC,0 02B2 0224 00762 SUBWF SEC,0 02B3 1D03 00763 BTFSS STATUS,2 02B4 2AB1 00764 GOTO LPSECP 02B5 0008 00765 RETURN 00766 00767 ;**********ROUTINE CONFIGURAZIONE LCD 02B6 00768 CONFIGURA_LCD 02B6 1308 00769 BCF PORTD,RS ;PROGRAMMAZIONE LCD RS=0 02B7 3038 00770 MOVLW 0x38 ;DATI A 8 BIT - 2 RIGHE - FORMATO CARATTERE 02B8 22C8 00771 CALL DISPLAY 02B9 300C 00772 MOVLW 0x0C ;DISPLAY ON - CURSORE OFF - BLINKING OFF 02BA 22C8 00773 CALL DISPLAY 02BB 3006 00774 MOVLW 6 ;AVANZAMENTO AUTOMATICO CURSORE 02BC 22C8 00775 CALL DISPLAY 02BD 3001 00776 MOVLW 1 ;PULISCI DISPLAY 02BE 22C8 00777 CALL DISPLAY 02BF 22D8 00778 CALL MS1 ;ULTERIORE RITARDO 02C0 3002 00779 MOVLW 2 ;CURSORE INIZIO RIGA 02C1 22C8 00780 CALL DISPLAY 02C2 22D8 00781 CALL MS1 ;ULTERIORE RITARDO 02C3 3040 00782 MOVLW 0x40 ;INDIRIZZO CGRAM 02C4 22C8 00783 CALL DISPLAY 02C5 3080 00784 MOVLW 0X80 ;INDIRIZZO DDRAM 02C6 22C8 00785 CALL DISPLAY 02C7 0008 00786 RETURN 00787 00788 ;**********ROUTINE INVIO DATI DISPLAY 02C8 00789 DISPLAY 02C8 0086 00790 MOVWF PORTB ;PRESENTA DATO SU BUS LCD 02C9 1788 00791 BSF PORTD,E ;IMPULSO DI ABILITAZIONE LETTURA 02CA 0000 00792 NOP 74 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 18 LINE SOURCE TEXT 02CB 1388 02CC 22D8 02CD 0008 02CE 02CF 02D0 02D1 02D2 02D3 02D4 02D5 02D6 02D7 02D8 02D9 02DA 02DB 02DC 02DD 02DE 02DF 02E0 02E1 02E2 02E3 02E4 02E5 02E6 02E7 02E8 02E9 02EA 02EB 02EC 02ED 02EE 02EF 02F0 02F1 02F2 02F3 00793 BCF PORTD,E 00794 CALL MS1 ;RITARDO 1 MS 00795 RETURN 00796 00797 ;**********ROUTINE COMANDO CURSORE INIZIO SECONDA RIGA 1308 00798 HOME2 BCF PORTD,RS 0000 00799 NOP 30C0 00800 MOVLW 0xC0 22C8 00801 CALL DISPLAY 0008 00802 RETURN 00803 00804 ;**********ROUTINE COMANDO CURSORE INIZIO PRIMA RIGA 1308 00805 HOME1 BCF PORTD,RS 0000 00806 NOP 3080 00807 MOVLW 0x80 22C8 00808 CALL DISPLAY 0008 00809 RETURN 00810 00811 ;********** ROUTINE RITARDO 1 MS 01A2 00812 MS1 CLRF MS 3001 00813 LP_MS MOVLW 1 0222 00814 SUBWF MS,0 1D03 00815 BTFSS STATUS,2 2AD9 00816 GOTO LP_MS 0008 00817 RETURN 00818 00819 ;********** ROUTINE RITARDO 2 MS 01A2 00820 MS2 CLRF MS 3002 00821 LP_MS2 MOVLW 2 0222 00822 SUBWF MS,0 1D03 00823 BTFSS STATUS,2 2ADF 00824 GOTO LP_MS2 0008 00825 RETURN 00826 00827 ;********** ROUTINE RITARDO 20 MS 01A2 00828 MS20 CLRF MS 3014 00829 LP20 MOVLW D'20' 0222 00830 SUBWF MS,0 1D03 00831 BTFSS STATUS,2 2AE5 00832 GOTO LP20 0008 00833 RETURN 00834 00835 ;**********ROUTINE INIZIALIZZAZIONE PRIMA RIGA 22D3 00836 RIGA1 CALL HOME1 1708 00837 BSF PORTD,RS ;INVIA DATI 3053 00838 MOVLW 'S' 22C8 00839 CALL DISPLAY 3045 00840 MOVLW 'E' 22C8 00841 CALL DISPLAY 304C 00842 MOVLW 'L' 22C8 00843 CALL DISPLAY 3045 00844 MOVLW 'E' 22C8 00845 CALL DISPLAY 75 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 02F4 02F5 02F6 02F7 02F8 02F9 02FA 02FB 02FC 02FD 02FE 02FF 0300 0301 0302 0303 0304 0305 0306 0307 0308 0309 030A 030B 030C 030D 030E 030F 0310 0311 0312 0313 0314 0315 0316 0317 0318 0319 031A 031B 031C 031D 031E 031F 0320 0321 0322 0323 0324 0325 0326 MAGN77.ASM 4-8-2006 12:06:09 PAGE 19 LINE SOURCE TEXT 3043 22C8 3054 22C8 3020 22C8 3046 22C8 3047 22C8 3020 22C8 3050 22C8 3055 22C8 3053 22C8 3048 22C8 3020 22C8 3053 22C8 0008 00846 MOVLW 'C' 00847 CALL DISPLAY 00848 MOVLW 'T' 00849 CALL DISPLAY 00850 MOVLW ' ' 00851 CALL DISPLAY 00852 MOVLW 'F' 00853 CALL DISPLAY 00854 MOVLW 'G' 00855 CALL DISPLAY 00856 MOVLW ' ' 00857 CALL DISPLAY 00858 MOVLW 'P' 00859 CALL DISPLAY 00860 MOVLW 'U' 00861 CALL DISPLAY 00862 MOVLW 'S' 00863 CALL DISPLAY 00864 MOVLW 'H' 00865 CALL DISPLAY 00866 MOVLW ' ' 00867 CALL DISPLAY 00868 MOVLW 'S' 00869 CALL DISPLAY 00870 RETURN 00871 00872 ;********** ROUTINE INIZIALIZZAZIONE SECONDA RIGA 22CE 00873 RIGA2 CALL HOME2 1708 00874 BSF PORTD,RS ;INVIA DATI 3043 00875 MOVLW 'C' 22C8 00876 CALL DISPLAY 304F 00877 MOVLW 'O' 22C8 00878 CALL DISPLAY 304E 00879 MOVLW 'N' 22C8 00880 CALL DISPLAY 3046 00881 MOVLW 'F' 22C8 00882 CALL DISPLAY 3049 00883 MOVLW 'I' 22C8 00884 CALL DISPLAY 3052 00885 MOVLW 'R' 22C8 00886 CALL DISPLAY 304D 00887 MOVLW 'M' 22C8 00888 CALL DISPLAY 3020 00889 MOVLW ' ' 22C8 00890 CALL DISPLAY 3050 00891 MOVLW 'P' 22C8 00892 CALL DISPLAY 3055 00893 MOVLW 'U' 22C8 00894 CALL DISPLAY 3053 00895 MOVLW 'S' 22C8 00896 CALL DISPLAY 3048 00897 MOVLW 'H' 22C8 00898 CALL DISPLAY 76 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 0327 0328 0329 032A 032B 032C 032D 032E 032F 3020 22C8 3043 22C8 3020 22C8 3020 22C8 0008 0330 0331 0332 0333 0334 0335 0336 0337 0338 0339 033A 033B 033C 033D 033E 033F 0340 0341 0342 0343 0344 0345 0346 0347 0348 0349 034A 034B 034C 034D 034E 034F 0350 0351 0352 22D3 1708 3053 22C8 3045 22C8 304C 22C8 3045 22C8 3043 22C8 3054 22C8 3020 22C8 3054 22C8 3049 22C8 304D 22C8 3045 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 0008 0353 0354 0355 0356 0357 22CE 1708 3043 22C8 3020 MAGN77.ASM 4-8-2006 12:06:09 PAGE 20 LINE SOURCE TEXT 00899 MOVLW ' ' 00900 CALL DISPLAY 00901 MOVLW 'C' 00902 CALL DISPLAY 00903 MOVLW ' ' 00904 CALL DISPLAY 00905 MOVLW ' ' 00906 CALL DISPLAY 00907 RETURN 00908 00909 ;**********ROUTINE INIZIALIZZAZIONE PRIMA RIGA 00910 TIME1 CALL HOME1 00911 BSF PORTD,RS ;INVIA DATI 00912 MOVLW 'S' 00913 CALL DISPLAY 00914 MOVLW 'E' 00915 CALL DISPLAY 00916 MOVLW 'L' 00917 CALL DISPLAY 00918 MOVLW 'E' 00919 CALL DISPLAY 00920 MOVLW 'C' 00921 CALL DISPLAY 00922 MOVLW 'T' 00923 CALL DISPLAY 00924 MOVLW ' ' 00925 CALL DISPLAY 00926 MOVLW 'T' 00927 CALL DISPLAY 00928 MOVLW 'I' 00929 CALL DISPLAY 00930 MOVLW 'M' 00931 CALL DISPLAY 00932 MOVLW 'E' 00933 CALL DISPLAY 00934 MOVLW ' ' 00935 CALL DISPLAY 00936 MOVLW ' ' 00937 CALL DISPLAY 00938 MOVLW ' ' 00939 CALL DISPLAY 00940 MOVLW ' ' 00941 CALL DISPLAY 00942 MOVLW ' ' 00943 CALL DISPLAY 00944 RETURN 00945 00946 ;**********ROUTINE INIZIALIZZAZIONE PRIMA RIGA 00947 TIME2 CALL HOME2 00948 BSF PORTD,RS ;INVIA DATI 00949 MOVLW 'C' 00950 CALL DISPLAY 00951 MOVLW ' ' 77 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 0358 0359 035A 035B 035C 035D 035E 035F 0360 0361 0362 0363 0364 0365 0366 0367 0368 0369 036A 036B 036C 036D 036E 036F 0370 0371 0372 0373 0374 0375 22C8 3028 22C8 3059 22C8 3029 22C8 3020 22C8 3053 22C8 3020 22C8 3028 22C8 304E 22C8 3029 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 0008 0376 0377 0378 0379 037A 037B 037C 037D 037E 037F 0380 0381 0382 0383 0384 0385 0386 0387 0388 0389 038A 1308 0000 30CC 22C8 1708 3031 22C8 3020 22C8 3053 22C8 1889 2B8A 22E4 1C89 2B84 22E4 3001 00C5 0008 1809 MAGN77.ASM 4-8-2006 12:06:09 PAGE 21 LINE SOURCE TEXT 00952 CALL DISPLAY 00953 MOVLW '(' 00954 CALL DISPLAY 00955 MOVLW 'Y' 00956 CALL DISPLAY 00957 MOVLW ')' 00958 CALL DISPLAY 00959 MOVLW ' ' 00960 CALL DISPLAY 00961 MOVLW 'S' 00962 CALL DISPLAY 00963 MOVLW ' ' 00964 CALL DISPLAY 00965 MOVLW '(' 00966 CALL DISPLAY 00967 MOVLW 'N' 00968 CALL DISPLAY 00969 MOVLW ')' 00970 CALL DISPLAY 00971 MOVLW ' ' 00972 CALL DISPLAY 00973 MOVLW ' ' 00974 CALL DISPLAY 00975 MOVLW ' ' 00976 CALL DISPLAY 00977 MOVLW ' ' 00978 CALL DISPLAY 00979 MOVLW ' ' 00980 CALL DISPLAY 00981 RETURN 00982 00983 ;**********ROUTINE COMANDO CURSORE INIZIO SECONDA RIGA 00984 S_TIME BCF PORTD,RS 00985 NOP 00986 MOVLW 0xCC 00987 CALL DISPLAY 00988 BSF PORTD,RS ;INVIA DATI 00989 MOVLW '1' 00990 CALL DISPLAY 00991 MOVLW ' ' 00992 CALL DISPLAY 00993 MOVLW 'S' 00994 CALL DISPLAY 00995 TT BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 00996 GOTO TT1 00997 CALL MS20 ;RIMBALZI 00998 TT2 BTFSS PORTE,1 ;RILASCIO 00999 GOTO TT2 01000 CALL MS20 01001 MOVLW 1 01002 MOVWF MSEC 01003 RETURN 01004 TT1 BTFSC PORTE,0 ;CONTROLLA SE PREMUTO CONFERMA 78 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 038B 038C 038D 038E 038F 0390 0391 0392 0393 0394 0395 0396 0397 0398 0399 039A 039B 039C 039D 039E 039F 03A0 03A1 03A2 03A3 03A4 03A5 03A6 03A7 03A8 03A9 03AA 03AB 03AC 03AD 03AE 03AF 03B0 03B1 03B2 03B3 03B4 03B5 03B6 03B7 03B8 03B9 03BA 03BB 03BC 03BD 03BE 03BF 2B81 22E4 1C09 2B8D 1308 0000 30CC 22C8 1708 3035 22C8 3020 22C8 3053 22C8 1889 2BA3 22E4 1C89 2B9D 22E4 3005 00C5 0008 1809 2B9A 22E4 1C09 2BA6 1308 0000 30CC 22C8 1708 3033 22C8 3030 22C8 3020 22C8 3053 22C8 1889 2BBE 22E4 1C89 2BB8 22E4 301E 00C5 0008 1809 2BB5 MAGN77.ASM 4-8-2006 12:06:09 PAGE 22 LINE SOURCE TEXT 01005 GOTO TT 01006 CALL MS20 ;RIMBALZI 01007 TT3 BTFSS PORTE,0 ;RILASCIO 01008 GOTO TT3 01009 BCF PORTD,RS 01010 NOP 01011 MOVLW 0xCC 01012 CALL DISPLAY 01013 BSF PORTD,RS ;INVIA DATI 01014 MOVLW '5' 01015 CALL DISPLAY 01016 MOVLW ' ' 01017 CALL DISPLAY 01018 MOVLW 'S' 01019 CALL DISPLAY 01020 TTA BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 01021 GOTO TT1A 01022 CALL MS20 ;RIMBALZI 01023 TT2A BTFSS PORTE,1 ;RILASCIO 01024 GOTO TT2A 01025 CALL MS20 01026 MOVLW 5 01027 MOVWF MSEC 01028 RETURN 01029 TT1A BTFSC PORTE,0 01030 GOTO TTA 01031 CALL MS20 ;RIMBALZI 01032 TT3A BTFSS PORTE,0 ;RILASCIO 01033 GOTO TT3A 01034 BCF PORTD,RS 01035 NOP 01036 MOVLW 0xCC 01037 CALL DISPLAY 01038 BSF PORTD,RS ;INVIA DATI 01039 MOVLW '3' 01040 CALL DISPLAY 01041 MOVLW '0' 01042 CALL DISPLAY 01043 MOVLW ' ' 01044 CALL DISPLAY 01045 MOVLW 'S' 01046 CALL DISPLAY 01047 TTB BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 01048 GOTO TT1B 01049 CALL MS20 ;RIMBALZI 01050 TT2B BTFSS PORTE,1 ;RILASCIO 01051 GOTO TT2B 01052 CALL MS20 01053 MOVLW D'30' 01054 MOVWF MSEC 01055 RETURN 01056 TT1B BTFSC PORTE,0 01057 GOTO TTB 79 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 03C0 03C1 03C2 03C3 03C4 03C5 03C6 03C7 03C8 03C9 03CA 03CB 03CC 03CD 03CE 03CF 03D0 03D1 03D2 03D3 03D4 03D5 03D6 03D7 03D8 03D9 03DA 03DB 03DC 03DD 03DE 03DF 03E0 03E1 03E2 03E3 03E4 03E5 03E6 03E7 03E8 03E9 03EA 03EB 03EC 03ED 03EE 03EF 03F0 03F1 03F2 MAGN77.ASM 4-8-2006 12:06:09 PAGE 23 LINE SOURCE TEXT 22E4 01058 CALL MS20 ;RIMBALZI 1C09 01059 TT3B BTFSS PORTE,0 ;RILASCIO 2BC1 01060 GOTO TT3B 1308 01061 BCF PORTD,RS 0000 01062 NOP 30CC 01063 MOVLW 0xCC 22C8 01064 CALL DISPLAY 1708 01065 BSF PORTD,RS ;INVIA DATI 3036 01066 MOVLW '6' 22C8 01067 CALL DISPLAY 3030 01068 MOVLW '0' 22C8 01069 CALL DISPLAY 3020 01070 MOVLW ' ' 22C8 01071 CALL DISPLAY 3053 01072 MOVLW 'S' 22C8 01073 CALL DISPLAY 1889 01074 TTC BTFSC PORTE,1 ;CONTROLLA SE PREMUTO SELECT 2BD9 01075 GOTO TT1C 22E4 01076 CALL MS20 ;RIMBALZI 1C89 01077 TT2C BTFSS PORTE,1 ;RILASCIO 2BD3 01078 GOTO TT2C 22E4 01079 CALL MS20 303C 01080 MOVLW D'60' 00C5 01081 MOVWF MSEC 0008 01082 RETURN 1809 01083 TT1C BTFSC PORTE,0 2BD0 01084 GOTO TTC 22E4 01085 CALL MS20 ;RIMBALZI 1C09 01086 TT3C BTFSS PORTE,0 ;RILASCIO 2BDC 01087 GOTO TT3C 1308 01088 BCF PORTD,RS 0000 01089 NOP 30CC 01090 MOVLW 0xCC 22C8 01091 CALL DISPLAY 1708 01092 BSF PORTD,RS ;INVIA DATI 3039 01093 MOVLW '9' 22C8 01094 CALL DISPLAY 3030 01095 MOVLW '0' 22C8 01096 CALL DISPLAY 3020 01097 MOVLW ' ' 22C8 01098 CALL DISPLAY 3053 01099 MOVLW 'S' 22C8 01100 CALL DISPLAY 305A 01101 MOVLW D'90' 00C5 01102 MOVWF MSEC 0008 01103 RETURN 01104 01105 ;********** ROUTINE START 22D3 01106 START CALL HOME1 1708 01107 BSF PORTD,RS 3046 01108 MOVLW 'F' 22C8 01109 CALL DISPLAY 304F 01110 MOVLW 'O' 80 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 03F3 03F4 03F5 03F6 03F7 03F8 03F9 03FA 03FB 03FC 03FD 03FE 03FF 0400 0401 0402 0403 0404 0405 0406 0407 0408 0409 040A 040B 040C 040D 040E 040F 0410 0411 0412 0413 0414 0415 0416 0417 0418 0419 041A 041B 041C 041D 041E 041F 0420 0421 0422 0423 0424 0425 0426 0427 22C8 3052 22C8 3020 22C8 304D 22C8 3045 22C8 3041 22C8 3053 22C8 3055 22C8 3052 22C8 3045 22C8 304D 22C8 3045 22C8 304E 22C8 3054 22C8 3020 22C8 22CE 1708 3050 22C8 3055 22C8 3053 22C8 3048 22C8 3020 22C8 3042 22C8 3055 22C8 3054 22C8 3054 22C8 304F 22C8 304E 22C8 MAGN77.ASM 4-8-2006 12:06:09 PAGE 24 LINE SOURCE TEXT 01111 01112 01113 01114 01115 01116 01117 01118 01119 01120 01121 01122 01123 01124 01125 01126 01127 01128 01129 01130 01131 01132 01133 01134 01135 01136 01137 01138 01139 01140 01141 01142 01143 01144 01145 01146 01147 01148 01149 01150 01151 01152 01153 01154 01155 01156 01157 01158 01159 01160 01161 01162 01163 CALL DISPLAY MOVLW 'R' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW 'M' CALL DISPLAY MOVLW 'E' CALL DISPLAY MOVLW 'A' CALL DISPLAY MOVLW 'S' CALL DISPLAY MOVLW 'U' CALL DISPLAY MOVLW 'R' CALL DISPLAY MOVLW 'E' CALL DISPLAY MOVLW 'M' CALL DISPLAY MOVLW 'E' CALL DISPLAY MOVLW 'N' CALL DISPLAY MOVLW 'T' CALL DISPLAY MOVLW ' ' CALL DISPLAY CALL HOME2 BSF PORTD,RS MOVLW 'P' CALL DISPLAY MOVLW 'U' CALL DISPLAY MOVLW 'S' CALL DISPLAY MOVLW 'H' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW 'B' CALL DISPLAY MOVLW 'U' CALL DISPLAY MOVLW 'T' CALL DISPLAY MOVLW 'T' CALL DISPLAY MOVLW 'O' CALL DISPLAY MOVLW 'N' CALL DISPLAY 81 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 0428 0429 042A 042B 042C 042D 042E 042F 0430 0431 0432 0433 0434 3020 22C8 3043 22C8 3020 22C8 3020 22C8 3020 22C8 1809 2C32 0008 0435 0436 0437 0438 0439 043A 043B 043C 043D 043E 043F 0440 0441 0442 0443 0444 0445 0446 0447 0448 0449 044A 044B 044C 044D 044E 044F 0450 0451 0452 0453 0454 0455 0456 0457 0458 0459 045A 22D3 1987 2C80 1708 305A 22C8 3020 22C8 304F 22C8 3046 22C8 3046 22C8 3020 22C8 1888 2CC7 3059 22C8 3020 22C8 304F 22C8 3046 22C8 3046 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 MAGN77.ASM 4-8-2006 12:06:09 PAGE 25 LINE SOURCE TEXT 01164 MOVLW ' ' 01165 CALL DISPLAY 01166 MOVLW 'C' 01167 CALL DISPLAY 01168 MOVLW ' ' 01169 CALL DISPLAY 01170 MOVLW ' ' 01171 CALL DISPLAY 01172 MOVLW ' ' 01173 CALL DISPLAY 01174 LCD1L BTFSC PORTE,0 ;CONTROLLA SE START MISURA 01175 GOTO LCD1L 01176 RETURN 01177 01178 ;********** ROUTINE LCDA 01179 LCDA CALL HOME1 01180 BTFSC PORTC,3 ;Z E' OFF? 01181 GOTO LCDR1 01182 BSF PORTD,RS 01183 MOVLW 'Z' 01184 CALL DISPLAY 01185 MOVLW ' ' 01186 CALL DISPLAY 01187 MOVLW 'O' 01188 CALL DISPLAY 01189 MOVLW 'F' 01190 CALL DISPLAY 01191 MOVLW 'F' 01192 CALL DISPLAY 01193 MOVLW ' ' 01194 CALL DISPLAY 01195 BTFSC PORTD,1 ;Y E' OFF? 01196 GOTO LCDR2 01197 MOVLW 'Y' 01198 CALL DISPLAY 01199 MOVLW ' ' 01200 CALL DISPLAY 01201 MOVLW 'O' 01202 CALL DISPLAY 01203 MOVLW 'F' 01204 CALL DISPLAY 01205 MOVLW 'F' 01206 CALL DISPLAY 01207 MOVLW ' ' 01208 CALL DISPLAY 01209 MOVLW ' ' 01210 CALL DISPLAY 01211 MOVLW ' ' 01212 CALL DISPLAY 01213 MOVLW ' ' 01214 CALL DISPLAY 01215 MOVLW ' ' 01216 CALL DISPLAY 82 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 045B 045C 045D 045E 045F 0460 0461 0462 0463 0464 0465 0466 0467 0468 0469 046A 046B 046C 046D 046E 046F 0470 0471 0472 0473 0474 0475 0476 0477 0478 0479 047A 047B 047C 047D 047E 047F 0480 0481 0482 0483 0484 0485 0486 0487 0488 0489 048A 048B 048C 048D 048E 048F 22CE 1708 3058 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3001 00A9 0008 22D3 1708 305A 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 MAGN77.ASM 4-8-2006 12:06:09 PAGE 26 LINE SOURCE TEXT 01217 CALL HOME2 01218 BSF PORTD,RS 01219 MOVLW 'X' 01220 CALL DISPLAY 01221 MOVLW ' ' 01222 CALL DISPLAY 01223 MOVLW ' ' 01224 CALL DISPLAY 01225 MOVLW ' ' 01226 CALL DISPLAY 01227 MOVLW ' ' 01228 CALL DISPLAY 01229 MOVLW ' ' 01230 CALL DISPLAY 01231 MOVLW ' ' 01232 CALL DISPLAY 01233 MOVLW ' ' 01234 CALL DISPLAY 01235 MOVLW ' ' 01236 CALL DISPLAY 01237 MOVLW ' ' 01238 CALL DISPLAY 01239 MOVLW ' ' 01240 CALL DISPLAY 01241 MOVLW ' ' 01242 CALL DISPLAY 01243 MOVLW ' ' 01244 CALL DISPLAY 01245 MOVLW ' ' 01246 CALL DISPLAY 01247 MOVLW ' ' 01248 CALL DISPLAY 01249 MOVLW ' ' 01250 CALL DISPLAY 01251 MOVLW 1 01252 MOVWF FLAG 01253 RETURN 01254 LCDR1 CALL HOME1 01255 BSF PORTD,RS ;INVIA DATI 01256 MOVLW 'Z' 01257 CALL DISPLAY 01258 MOVLW ' ' 01259 CALL DISPLAY 01260 MOVLW ' ' 01261 CALL DISPLAY 01262 MOVLW ' ' 01263 CALL DISPLAY 01264 MOVLW ' ' 01265 CALL DISPLAY 01266 MOVLW ' ' 01267 CALL DISPLAY 01268 MOVLW ' ' 01269 CALL DISPLAY 83 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 0490 0491 0492 0493 0494 0495 0496 0497 0498 0499 049A 049B 049C 049D 049E 049F 04A0 04A1 04A2 04A3 04A4 04A5 04A6 04A7 04A8 04A9 04AA 04AB 04AC 04AD 04AE 04AF 04B0 04B1 04B2 04B3 04B4 04B5 04B6 04B7 04B8 04B9 04BA 04BB 04BC 04BD 04BE 04BF 04C0 04C1 04C2 04C3 04C4 3020 22C8 3059 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 22CE 1708 3058 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3003 MAGN77.ASM 4-8-2006 12:06:09 PAGE 27 LINE SOURCE TEXT 01270 01271 01272 01273 01274 01275 01276 01277 01278 01279 01280 01281 01282 01283 01284 01285 01286 01287 01288 01289 01290 01291 01292 01293 01294 01295 01296 01297 01298 01299 01300 01301 01302 01303 01304 01305 01306 01307 01308 01309 01310 01311 01312 01313 01314 01315 01316 01317 01318 01319 01320 01321 01322 MOVLW ' ' CALL DISPLAY MOVLW 'Y' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY CALL HOME2 BSF PORTD,RS MOVLW 'X' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW ' ' CALL DISPLAY MOVLW 3 84 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 04C5 04C6 04C7 04C8 04C9 04CA 04CB 04CC 04CD 04CE 04CF 04D0 04D1 04D2 04D3 04D4 04D5 04D6 04D7 04D8 04D9 04DA 04DB 04DC 04DD 04DE 04DF 04E0 04E1 04E2 04E3 04E4 04E5 04E6 04E7 04E8 04E9 04EA 04EB 04EC 04ED 04EE 04EF 04F0 04F1 04F2 04F3 04F4 04F5 04F6 04F7 04F8 04F9 00A9 0008 3020 22C8 3020 22C8 3059 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 22CE 1708 3058 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 MAGN77.ASM 4-8-2006 12:06:09 PAGE 28 LINE SOURCE TEXT 01323 MOVWF FLAG 01324 RETURN 01325 LCDR2 MOVLW ' ' 01326 CALL DISPLAY 01327 MOVLW ' ' 01328 CALL DISPLAY 01329 MOVLW 'Y' 01330 CALL DISPLAY 01331 MOVLW ' ' 01332 CALL DISPLAY 01333 MOVLW ' ' 01334 CALL DISPLAY 01335 MOVLW ' ' 01336 CALL DISPLAY 01337 MOVLW ' ' 01338 CALL DISPLAY 01339 MOVLW ' ' 01340 CALL DISPLAY 01341 MOVLW ' ' 01342 CALL DISPLAY 01343 MOVLW ' ' 01344 CALL DISPLAY 01345 CALL HOME2 01346 BSF PORTD,RS 01347 MOVLW 'X' 01348 CALL DISPLAY 01349 MOVLW ' ' 01350 CALL DISPLAY 01351 MOVLW ' ' 01352 CALL DISPLAY 01353 MOVLW ' ' 01354 CALL DISPLAY 01355 MOVLW ' ' 01356 CALL DISPLAY 01357 MOVLW ' ' 01358 CALL DISPLAY 01359 MOVLW ' ' 01360 CALL DISPLAY 01361 MOVLW ' ' 01362 CALL DISPLAY 01363 MOVLW ' ' 01364 CALL DISPLAY 01365 MOVLW ' ' 01366 CALL DISPLAY 01367 MOVLW ' ' 01368 CALL DISPLAY 01369 MOVLW ' ' 01370 CALL DISPLAY 01371 MOVLW ' ' 01372 CALL DISPLAY 01373 MOVLW ' ' 01374 CALL DISPLAY 01375 MOVLW ' ' 85 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 04FA 04FB 04FC 04FD 04FE 04FF 22C8 3020 22C8 3002 00A9 0008 0500 0501 0502 0503 0504 0505 0506 0507 0508 0509 050A 050B 050C 050D 050E 050F 0510 0511 0512 0513 0514 0515 0516 0517 0518 22CE 1708 3058 22C8 3020 22C8 0833 2700 22C8 0834 2700 22C8 0835 2700 22C8 0836 2700 22C8 0837 2700 22C8 0838 2700 22C8 0008 0519 051A 051B 051C 051D 051E 051F 0520 0521 0522 0523 0524 0525 0526 0527 0528 0529 052A 1308 0000 3089 22C8 1708 0833 2700 22C8 0834 2700 22C8 0835 2700 22C8 0836 2700 22C8 0837 MAGN77.ASM 4-8-2006 12:06:09 PAGE 29 LINE SOURCE TEXT 01376 CALL DISPLAY 01377 MOVLW ' ' 01378 CALL DISPLAY 01379 MOVLW 2 01380 MOVWF FLAG 01381 RETURN 01382 01383 ;******************ROUTINE VISX 01384 VISX CALL HOME2 01385 BSF PORTD,RS 01386 MOVLW 'X' 01387 CALL DISPLAY 01388 MOVLW ' ' 01389 CALL DISPLAY 01390 MOVF MIGLIAIA_C,0 01391 CALL TABELLA 01392 CALL DISPLAY 01393 MOVF MIGLIAIA_D,0 01394 CALL TABELLA 01395 CALL DISPLAY 01396 MOVF MIGLIAIA,0 01397 CALL TABELLA 01398 CALL DISPLAY 01399 MOVF CENTINAIA,0 01400 CALL TABELLA 01401 CALL DISPLAY 01402 MOVF DECINE,0 01403 CALL TABELLA 01404 CALL DISPLAY 01405 MOVF UNITA,0 01406 CALL TABELLA 01407 CALL DISPLAY 01408 RETURN 01409 01410 ;******************ROUTINE VISY 01411 VISY BCF PORTD,RS 01412 NOP 01413 MOVLW 0x89 01414 CALL DISPLAY 01415 BSF PORTD,RS 01416 MOVF MIGLIAIA_C,0 01417 CALL TABELLA 01418 CALL DISPLAY 01419 MOVF MIGLIAIA_D,0 01420 CALL TABELLA 01421 CALL DISPLAY 01422 MOVF MIGLIAIA,0 01423 CALL TABELLA 01424 CALL DISPLAY 01425 MOVF CENTINAIA,0 01426 CALL TABELLA 01427 CALL DISPLAY 01428 MOVF DECINE,0 86 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 052B 052C 052D 052E 052F 0530 2700 22C8 0838 2700 22C8 0008 0531 0532 0533 0534 0535 0536 0537 0538 0539 053A 053B 053C 053D 053E 053F 0540 0541 0542 0543 0544 0545 0546 0547 0548 1308 0000 3081 22C8 1708 0833 2700 22C8 0834 2700 22C8 0835 2700 22C8 0836 2700 22C8 0837 2700 22C8 0838 2700 22C8 0008 0549 054A 054B 054C 054D 054E 054F 0550 0551 0552 0553 0554 0555 0556 0557 0558 0559 055A 055B 22D3 1708 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 304F 22C8 3046 22C8 3046 22C8 3053 MAGN77.ASM 4-8-2006 12:06:09 PAGE 30 LINE SOURCE TEXT 01429 CALL TABELLA 01430 CALL DISPLAY 01431 MOVF UNITA,0 01432 CALL TABELLA 01433 CALL DISPLAY 01434 RETURN 01435 01436 ;******************ROUTINE VISZ 01437 VISZ BCF PORTD,RS 01438 NOP 01439 MOVLW 0x81 01440 CALL DISPLAY 01441 BSF PORTD,RS 01442 MOVF MIGLIAIA_C,0 01443 CALL TABELLA 01444 CALL DISPLAY 01445 MOVF MIGLIAIA_D,0 01446 CALL TABELLA 01447 CALL DISPLAY 01448 MOVF MIGLIAIA,0 01449 CALL TABELLA 01450 CALL DISPLAY 01451 MOVF CENTINAIA,0 01452 CALL TABELLA 01453 CALL DISPLAY 01454 MOVF DECINE,0 01455 CALL TABELLA 01456 CALL DISPLAY 01457 MOVF UNITA,0 01458 CALL TABELLA 01459 CALL DISPLAY 01460 RETURN 01461 01462 ;********** ROUTINE LCDREL 01463 LCDREL CALL HOME1 01464 BSF PORTD,RS 01465 MOVLW ' ' 01466 CALL DISPLAY 01467 MOVLW ' ' 01468 CALL DISPLAY 01469 MOVLW ' ' 01470 CALL DISPLAY 01471 MOVLW ' ' 01472 CALL DISPLAY 01473 MOVLW ' ' 01474 CALL DISPLAY 01475 MOVLW 'O' 01476 CALL DISPLAY 01477 MOVLW 'F' 01478 CALL DISPLAY 01479 MOVLW 'F' 01480 CALL DISPLAY 01481 MOVLW 'S' 87 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE 055C 055D 055E 055F 0560 0561 0562 0563 0564 0565 0566 0567 0568 0569 056A 056B 056C 056D 056E 056F 0570 0571 0572 0573 0574 0575 0576 0577 0578 0579 057A 057B 057C 057D 057E 057F 0580 0581 0582 0583 0584 0585 0586 0587 0588 0589 058A 058B 058C 058D MAGN77.ASM 4-8-2006 12:06:09 PAGE 31 LINE SOURCE TEXT 22C8 3045 22C8 3054 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 22CE 1708 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 3020 22C8 0008 01482 CALL DISPLAY 01483 MOVLW 'E' 01484 CALL DISPLAY 01485 MOVLW 'T' 01486 CALL DISPLAY 01487 MOVLW ' ' 01488 CALL DISPLAY 01489 MOVLW ' ' 01490 CALL DISPLAY 01491 MOVLW ' ' 01492 CALL DISPLAY 01493 MOVLW ' ' 01494 CALL DISPLAY 01495 MOVLW ' ' 01496 CALL DISPLAY 01497 CALL HOME2 01498 BSF PORTD,RS 01499 MOVLW ' ' 01500 CALL DISPLAY 01501 MOVLW ' ' 01502 CALL DISPLAY 01503 MOVLW ' ' 01504 CALL DISPLAY 01505 MOVLW ' ' 01506 CALL DISPLAY 01507 MOVLW ' ' 01508 CALL DISPLAY 01509 MOVLW ' ' 01510 CALL DISPLAY 01511 MOVLW ' ' 01512 CALL DISPLAY 01513 MOVLW ' ' 01514 CALL DISPLAY 01515 MOVLW ' ' 01516 CALL DISPLAY 01517 MOVLW ' ' 01518 CALL DISPLAY 01519 MOVLW ' ' 01520 CALL DISPLAY 01521 MOVLW ' ' 01522 CALL DISPLAY 01523 MOVLW ' ' 01524 CALL DISPLAY 01525 MOVLW ' ' 01526 CALL DISPLAY 01527 MOVLW ' ' 01528 CALL DISPLAY 01529 MOVLW ' ' 01530 CALL DISPLAY 01531 RETURN 01532 01533 ;******************ROUTINE LCDOF 058E 1308 01534 LCDOFF BCF PORTD,RS 88 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 32 LINE SOURCE TEXT 058F 0000 01535 NOP 0590 30C4 01536 MOVLW 0xC4 0591 22C8 01537 CALL DISPLAY 0592 1708 01538 BSF PORTD,RS Message[305]: Using default destination of 1 (file). 0593 08C4 01539 MOVF SEGNO 0594 1D03 01540 BTFSS STATUS,2 0595 2D99 01541 GOTO MENO1 0596 302B 01542 MOVLW '+' 0597 22C8 01543 CALL DISPLAY 0598 2D9B 01544 GOTO LCDOF1 0599 302D 01545 MENO1 MOVLW '-' 059A 22C8 01546 CALL DISPLAY 059B 0833 01547 LCDOF1 MOVF MIGLIAIA_C,0 059C 2700 01548 CALL TABELLA 059D 22C8 01549 CALL DISPLAY 059E 0834 01550 MOVF MIGLIAIA_D,0 059F 2700 01551 CALL TABELLA 05A0 22C8 01552 CALL DISPLAY 05A1 0835 01553 MOVF MIGLIAIA,0 05A2 2700 01554 CALL TABELLA 05A3 22C8 01555 CALL DISPLAY 05A4 0836 01556 MOVF CENTINAIA,0 05A5 2700 01557 CALL TABELLA 05A6 22C8 01558 CALL DISPLAY 05A7 0837 01559 MOVF DECINE,0 05A8 2700 01560 CALL TABELLA 05A9 22C8 01561 CALL DISPLAY 05AA 0838 01562 MOVF UNITA,0 05AB 2700 01563 CALL TABELLA 05AC 22C8 01564 CALL DISPLAY 05AD 0008 01565 RETURN 01566 01567 ;******************ROUTINE INTERRUPT ****************** 05AE 01568 INTERRUPT 05AE 00A0 01569 MOVWF SAVE_W ;SALVA CONTESTO 05AF 0E03 01570 SWAPF STATUS,0 05B0 00A1 01571 MOVWF SAVE_S 05B1 0000 01572 NOP 05B2 3009 01573 MOVLW 9 05B3 0081 01574 MOVWF TMR0 Message[305]: Using default destination of 1 (file). 05B4 0AA2 01575 INCF MS 05B5 3064 01576 MOVLW D'100' 05B6 0222 01577 SUBWF MS,0 05B7 1D03 01578 BTFSS STATUS,2 05B8 2DC1 01579 GOTO ESCI Message[305]: Using default destination of 1 (file). 05B9 0AA3 01580 INCF DS 05BA 01A2 01581 CLRF MS 05BB 300A 01582 MOVLW D'10' 05BC 0223 01583 SUBWF DS,0 05BD 1D03 01584 BTFSS STATUS,2 89 Ferdinando_Barbon MPASM 02.40 Released LOC OBJECT CODE VALUE MAGN77.ASM 4-8-2006 12:06:09 PAGE 33 LINE SOURCE TEXT 05BE 2DC1 01585 GOTO ESCI Message[305]: Using default destination of 1 (file). 05BF 0AA4 01586 INCF SEC 05C0 01A3 01587 CLRF DS 05C1 1909 01588 ESCI BTFSC PORTE,2 ;CONTROLLA SE AZIONATO PULSANTE OFFSET 05C2 2DC6 01589 GOTO ESCIF 05C3 3001 01590 MOVLW 1 05C4 00BA 01591 MOVWF ZER 05C5 1588 01592 BSF PORTD,3 ;ACCENDI LED MISURA RELATIVA 05C6 110B 01593 ESCIF BCF INTCON,2 ;Azzera flag interrupt 05C7 0E21 01594 SWAPF SAVE_S,0 ;Ripristina contesto 05C8 0083 01595 MOVWF STATUS Message[305]: Using default destination of 1 (file). 05C9 0EA0 01596 SWAPF SAVE_W 05CA 0E20 01597 SWAPF SAVE_W,0 05CB 0009 01598 RETFIE 01599 01600 ;*********************************************** 0700 01601 ORG 700 ;TABELLA IN PAGINA 7 01602 ;******** CODICI PER DISPLAY LCD 0700 00B9 01603 TABELLA MOVWF DATO ;SALVA DATO 0701 3007 01604 MOVLW 7 ;PREDISPONI PCLATH PER RITORNO 0702 008A 01605 MOVWF PCLATH 0703 0839 01606 MOVF DATO,0 ;RIPRENDI DATO Message[305]: Using default destination of 1 (file). 0704 0782 01607 ADDWF PCL 0705 3430 01608 RETLW '0' 0706 3431 01609 RETLW '1' 0707 3432 01610 RETLW '2' 0708 3433 01611 RETLW '3' 0709 3434 01612 RETLW '4' 070A 3435 01613 RETLW '5' 070B 3436 01614 RETLW '6' 070C 3437 01615 RETLW '7' 070D 3438 01616 RETLW '8' 070E 3439 01617 RETLW '9' 01618 01619 ;******************* 01620 END ;*** 90 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL ACKDT ACKEN ACKSTAT ADCON0 ADCON1 ADCS0 ADCS1 ADDEN ADFM ADIE ADIF ADON ADRESH ADRESL BCD BCD1 BCD11 BCD111 BCD2 BCD22 BCD222 BCD2U BCD3 BCD33 BCD4 BCD5 BCD6 BCD7 BCDU BCLIE BCLIF BF BRGH C CCP1CON CCP1IE CCP1IF CCP1M0 CCP1M1 CCP1M2 CCP1M3 CCP1X CCP1Y CCP2CON CCP2IE CCP2IF CCP2M0 CCP2M1 CCP2M2 CCP2M3 CCP2X CCP2Y CCPR1H MAGN77.ASM 4-8-2006 12:06:09 PAGE 34 VALUE 00000005 00000004 00000006 0000001F 0000009F 00000006 00000007 00000003 00000007 00000006 00000006 00000000 0000001E 0000009E 00000131 00000136 00000149 00000143 00000168 0000017A 00000175 00000186 00000193 0000019F 000001AC 000001B5 000001BD 000001C5 0000015A 00000003 00000003 00000000 00000002 00000000 00000017 00000002 00000002 00000000 00000001 00000002 00000003 00000005 00000004 0000001D 00000000 00000000 00000000 00000001 00000002 00000003 00000005 00000004 00000016 91 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL CCPR1L CCPR2H CCPR2L CENTINAIA CHS0 CHS1 CHS2 CKE CKP CONFIGURA_LCD CREN CSRC D DATA_ADDRESS DATO DC DECINE DISPLAY DS D_A E EEADR EEADRH EECON1 EECON2 EEDATA EEDATH EEIE EEIF EEPGD ESCI ESCIF F FERR FLAG FSR FXH FXHH FXL FYH FYHH FYL FZH FZHH FZL GCEN GIE GO GO_DONE HOME1 HOME2 I2C_DATA I2C_READ MAGN77.ASM 4-8-2006 12:06:09 PAGE 35 VALUE 00000015 0000001C 0000001B 00000036 00000003 00000004 00000005 00000006 00000004 000002B6 00000004 00000007 00000005 00000005 00000039 00000001 00000037 000002C8 00000023 00000005 00000007 0000010D 0000010F 0000018C 0000018D 0000010C 0000010E 00000004 00000004 00000007 000005C1 000005C6 00000001 00000002 00000029 00000004 0000002B 0000002C 0000002A 0000002E 0000002F 0000002D 00000026 00000027 00000025 00000007 00000007 00000002 00000002 000002D3 000002CE 00000005 00000002 92 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL I2C_START I2C_STOP IBF IBOV INDF INTCON INTE INTEDG INTERRUPT INTF IRP LCD1L LCDA LCDOF1 LCDOFF LCDR1 LCDR2 LCDREL LEGGI LG1 LG2 LOOPA LOOPAA LP20 LPPRR LPSEC LPSECP LPT LPTMR LP_MS LP_MS2 LTCH LTCH1 LTCH2 LTCHH LTCHH1 LTCHH2 LTCL LTCL1 LTCL2 MAIN MEM1 MEM2 MEM3 MEMORIA MENO MENO1 MIGLIAIA MIGLIAIA_C MIGLIAIA_D MISURA MM1 MM11 MAGN77.ASM 4-8-2006 12:06:09 PAGE 36 VALUE 00000003 00000004 00000007 00000005 00000000 0000000B 00000004 00000006 000005AE 00000001 00000007 00000432 00000435 0000059B 0000058E 00000480 000004C7 00000549 000000AE 000000B2 000000F4 00000038 0000003B 000002E5 00000060 000002AA 000002B1 0000009F 000000A9 000002D9 000002DF 0000003C 0000003F 00000042 0000003D 00000040 00000043 0000003B 0000003E 00000041 00000005 00000030 00000031 00000032 000001C8 00000246 00000599 00000035 00000033 00000034 00000094 000001F2 00000226 93 Ferdinando_Barbon MPASM 02.40 Released MAGN77.ASM 4-8-2006 12:06:09 SYMBOL TABLE LABEL VALUE MM2 MM21 MM3 MM31 MM4 MM41 MS MS1 MS2 MS20 MSEC NOT_A NOT_ADDRESS NOT_BO NOT_BOR NOT_DONE NOT_PD NOT_POR NOT_RBPU NOT_RC8 NOT_T1SYNC NOT_TO NOT_TX8 NOT_W NOT_WRITE OBF OERR OPTION_REG P PCFG0 PCFG1 PCFG2 PCFG3 PCL PCLATH PCON PEIE PEN PIE1 PIE2 PIR1 PIR2 PIU PORTA PORTB PORTC PORTD PORTE PR2 PS0 PS1 PS2 PSA 000001D5 00000209 000001F7 0000022B 000001E7 0000021B 00000022 000002D8 000002DE 000002E4 00000045 00000005 00000005 00000000 00000000 00000002 00000003 00000001 00000007 00000006 00000002 00000004 00000006 00000002 00000002 00000006 00000001 00000081 00000004 00000000 00000001 00000002 00000003 00000002 0000000A 0000008E 00000006 00000002 0000008C 0000008D 0000000C 0000000D 00000264 00000005 00000006 00000007 00000008 00000009 00000092 00000000 00000001 00000002 00000003 PAGE 37 94 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL PSPIE PSPIF PSPMODE P_RITARDO R RBIE RBIF RC8_9 RC9 RCD8 RCEN RCIE RCIF RCREG RCSTA RD READ_WRITE RELATIVO RIGA1 RIGA2 RP0 RP1 RS RSEN RX9 RX9D R_W S S1 S2 S3 S4 S5 SAVE_S SAVE_W SEC SEC1 SEGNO SELEZ SEN SER1X SER1Y SER1Z SER2X SER2Y SER2Z SER3X SER3Y SER3Z SERF SERIALE SFUORI SMP MAGN77.ASM 4-8-2006 12:06:09 PAGE 38 VALUE 00000007 00000007 00000004 000002AE 00000002 00000003 00000000 00000006 00000006 00000000 00000003 00000005 00000005 0000001A 00000018 00000000 00000002 0000005F 000002EA 0000030D 00000005 00000006 00000006 00000001 00000006 00000000 00000002 00000003 00000076 00000079 00000082 00000085 0000008E 00000021 00000020 00000024 000002A7 00000044 00000071 00000000 00000280 0000028C 00000298 00000284 00000290 0000029C 00000288 00000294 000002A0 0000027C 00000278 00000090 00000007 95 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL SOTTRAI SPBRG SPEN SREN SS SS1 SS2 SS3 SSPADD SSPBUF SSPCON SSPCON2 SSPEN SSPIE SSPIF SSPM0 SSPM1 SSPM2 SSPM3 SSPOV SSPSTAT START STATUS STT SYNC S_TIME T0CS T0IE T0IF T0SE T1CKPS0 T1CKPS1 T1CON T1INSYNC T1OSCEN T1SYNC T2CKPS0 T2CKPS1 T2CON TABELLA TIME1 TIME2 TMR0 TMR1CS TMR1H TMR1IE TMR1IF TMR1L TMR1ON TMR2 TMR2IE TMR2IF TMR2ON MAGN77.ASM 4-8-2006 12:06:09 PAGE 39 VALUE 000001FC 00000099 00000007 00000005 00000259 00000260 0000026F 00000275 00000093 00000013 00000014 00000091 00000005 00000003 00000003 00000000 00000001 00000002 00000003 00000006 00000094 000003EE 00000003 00000230 00000004 00000376 00000005 00000005 00000002 00000004 00000004 00000005 00000010 00000002 00000003 00000002 00000000 00000001 00000012 00000700 00000330 00000353 00000001 00000001 0000000F 00000000 00000000 0000000E 00000000 00000011 00000001 00000001 00000002 96 Ferdinando_Barbon MPASM 02.40 Released SYMBOL TABLE LABEL MAGN77.ASM 4-8-2006 12:06:09 PAGE 40 VALUE TOUTPS0 00000003 TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000085 TRISB 00000086 TRISC 00000087 TRISD 00000088 TRISE 00000089 TRISE0 00000000 TRISE1 00000001 TRISE2 00000002 TRMT 00000001 TT 00000381 TT1 0000038A TT1A 000003A3 TT1B 000003BE TT1C 000003D9 TT2 00000384 TT2A 0000039D TT2B 000003B8 TT2C 000003D3 TT3 0000038D TT3A 000003A6 TT3B 000003C1 TT3C 000003DC TTA 0000039A TTB 000003B5 TTC 000003D0 TX8_9 00000006 TX9 00000006 TX9D 00000000 TXD8 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXREG 00000019 TXSTA 00000098 UA 00000001 UNITA 00000038 VISX 00000500 VISY 00000519 VISZ 00000531 W 00000000 WCOL 00000007 WR 00000001 WREN 00000002 WRERR 00000003 Z 00000002 ZER 0000003A _BODEN_OFF 00003FBF _BODEN_ON 00003FFF _CPD_OFF 00003FFF MPASM 02.40 Released MAGN77.ASM 4-8-2006 12:06:09 SYMBOL TABLE LABEL VALUE _CPD_ON _CP_ALL _CP_HALF _CP_OFF _CP_UPPER_256 _DEBUG_OFF _DEBUG_ON _HS_OSC _LP_OSC _LVP_OFF _LVP_ON _PWRTE_OFF 00003EFF 00000FCF 00001FDF 00003FFF 00002FEF 00003FFF 000037FF 00003FFE 00003FFC 00003F7F 00003FFF 00003FFF PAGE 41 97 Ferdinando_Barbon _PWRTE_ON _RC_OSC _WDT_OFF _WDT_ON _WRT_ENABLE_OFF _WRT_ENABLE_ON _XT_OSC __16F877 00003FF7 00003FFF 00003FFB 00003FFF 00003DFF 00003FFF 00003FFD 00000001 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : X---XXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0400 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0440 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 04C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0500 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0540 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX MPASM 02.40 Released MAGN77.ASM 4-8-2006 12:06:09 PAGE 42 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 05C0 : XXXXXXXXXXXX---- ---------------- ---------------- ---------------0700 : XXXXXXXXXXXXXXX- ---------------- ---------------- ---------------All other memory blocks unused. Program Memory Words Used: 1496 Program Memory Words Free: 6696 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 112 reported, 0 suppressed 98 Ferdinando_Barbon Bibliografia Collegamento al sito internet www.fatquarterssoftware.com Collegamento al sito internet www.speakesensors.com Collegamento al sito internet www.thunting.com/cgi-bin/geotech Collegamento al sito internet www.spacew.com/forum Collegamento al sito internet www.sec.noaa.gov Collegamento al sito internet http://crocus.physics.mcmaster.ca/Magnetometer/TW Collegamento al sito internet http://ourworld.compuserve.com/homepages/demerson/magnet.htm Collegamento al sito internet http://www.da4e.nl/magno.html Collegamento al sito internet http://geomag.usgs.gov/ Collegamento al sito internet www.fisica.unipg.it/tesi/20040226/landonio/tesifinale Magnetism, E. W. Lee, Dover publication Inc., New York, 1970 99