Menu English Ukrainian Russo Casa

Libreria tecnica gratuita per hobbisti e professionisti Libreria tecnica gratuita


ENCICLOPEDIA DELLA RADIOELETTRONICA ED ELETTRICA
Libreria gratuita / Schemi di dispositivi radioelettronici ed elettrici

Programmatori principianti di microcontrollori PIC. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica

Libreria tecnica gratuita

Enciclopedia della radioelettronica e dell'elettrotecnica / Radioamatore principiante

Commenti sull'articolo Commenti sull'articolo

[Si è verificato un errore durante il processo di questa direttiva]

Sulla base della mia esperienza di inizio dello studio della programmazione di microcontrollori, cercherò di dare alcuni consigli pratici su come scrivere programmi in assembler. Tutti gli esempi di programmazione forniti di seguito sono forniti in relazione ai controller Pic della famiglia Microchip di fascia media, come i più adatti per iniziare a padroneggiare, grazie alla loro architettura relativamente semplice e al sistema semplice di comandi assemblatore.

I programmi proposti possono essere utilizzati sotto forma di macro già pronte (sottoroutine complete), non sono legati a un controller specifico, quindi durante l'applicazione è necessario tenere conto dei dati delle schede tecniche.

1.Utilizzo degli interrupt di overflow del timer TMR0 (RTCC)

Prendiamo la frequenza dell'orologio - Fclock. = 4,096 MHz (quarzo standard). Quindi il tempo di ciclo sarà tc = 1 / Ftact. * 4 = 0,97656 µs

INI_TMR ; inizializzazione della modalità di interruzione da RTCC
bsf STATO,RP0 ; seleziona la banca 1
movlw b'00000100'
OPZIONE movwf; prescaler per RTCC 1:32
STATO bcf,RP0 ; banca 0
movlw b'10100000'
movwfINTCON; Interruzione RTCC abilitata
movlw.96; caricare il numero preliminare 96 in RTCC
movwf TMR0

Ottieni il tempo di interruzione:
ti = tc * 32 * (256 - 96 = 160)
ti = 0,97656 * 32 * 160 = 5 µs = 000 ms

Ora, se introduciamo un ciclo infinito in un qualsiasi programma (il cosiddetto ciclo di attesa di interruzione) e la fine del programma viene trasferita in questo ciclo, otteniamo un riferimento temporale di 5 ms. E dopo l'interruzione, il programma tornerà all'indirizzo indicato dal vettore di interruzione (di solito 04h). Per cosa può essere utilizzato: guarda oltre.

Quindi:

;
organizzazione 0
INIZIO ; inizio dell'esecuzione del programma dopo
; accendere
ore 04:XNUMX; e questo è l'indirizzo del vettore di interruzione, al quale
principale ; verrà eseguito il programma principale
;
INIZIO ; Qui è dove di solito avviene l'inizializzazione obbligatoria.
INI_TMR ; Centralizzazione di porti, modi, registri, ecc.
INI_PORT
loop
vai al ciclo; e questo è un ciclo infinito
;------------------------------------------------- -

principale
; Poi arriva il corpo del programma principale,
; in cui è necessario creare un programma di servizio di interruzione da RTCC,
; chiamato dal comando CALL:

ServTMR
btfscINTCON,RTIF ; controllare il flag di interruzione da RTCC e
chiama SET_TMR ; se "sì", inizializzare nuovamente TMR0
ritorno ; se "no" - torna al luogo in cui è stato chiamato ServTMR
; programma principale
;
SET_TMR movimento .96
movwf TMR0; caricare nuovamente il numero 96
bcfINTCON,RTIF ; reimpostare il flag di attivazione
ritirare; ritorno con abilitazione dell'interrupt in ServTMR e
; quindi nel programma principale

Un esempio di utilizzo di un'interruzione da RTCC per ricevere un secondo impulso su una delle uscite, ad esempio la porta B - RB0: utilizziamo il registro Rsec, che deve essere precedentemente dichiarato nel campo dell'indirizzo dei registri di lavoro.

Pertanto, all'uscita della porta RB0, il livello del segnale cambierà da '0' a '1' ogni secondo.

Nei registri del controller, le informazioni sono solitamente in forma binaria (in codice binario). Ma spesso è necessario ottenere informazioni in forma decimale binaria (codice BCD), ad esempio, per controllare un indicatore a sette segmenti.

Diamo un'occhiata agli esempi di conversione del codice binario b2 in BCD decimale binario e viceversa.

In un registro a 8 bit è possibile scrivere un numero da 0 a 255 (da b'00000000' a b'11111111') in codice binario. Convertiamo il numero binario in tre cifre del codice decimale binario: "centinaia", "decine" e "unità". Per fare ciò utilizzeremo i seguenti registri, che dovranno essere preventivamente dichiarati nel campo indirizzo dei registri di lavoro:

Rbin - registro per la memorizzazione di un numero nel codice binario b2
Rhan: centinaia di registri di codice BCD
Rdec - registra le "decine" del codice BCD
Rsim - Registro "uno" del codice BCD

Eseguiamo trasformazioni utilizzando le operazioni di sottrazione dei numeri 100 e poi 10, contando il numero di sottrazioni positive.

FORM_1S ; in ogni ciclo e dura a causa dell'interruzione RTCC
incf Rsec,w ; 5 MS, incrementare il registro Rsec di 1 fino al numero 200
xorlw.200; (5 ms * 200 = 1 secondo)
btfsc STATO,z
vai a OUT_PORT ; con Rsec = 200 flag z = '1' e passaggio al controllo
; Pin RB0 della porta B
ritorno ; tornare al programma principale
;
OUT_PORT btfss PORTB,0 ; verificare lo stato del pin RB0
vai a OUT_ON ; se RB0 ='0', imposta su '1'
bcf PORTAB,0 ; altrimenti imposta su '0'
vai al principale; tornare al programma principale
;
OUT_ON bsf PORTAB,0 ; imposta RB0 = '1'
vai al principale

CON_100 movlw .100 ; sottrai 100 da Rbin e controllalo
subwf Rbin,w ; il risultato non è negativo. Flag 'c' = 1 quando
STATO btfss,c; risultato > o = 0 e 'c' = 0 quando < 0
vai a CON_10
incf Rhan,f ; contando il numero di "centinaia"
movwf Rbin ; il risultato della sottrazione viene prima memorizzato in un registro
vai a CON_100 ;batteria e solo dopo torna a Rbin
; per non perdere il resto in caso negativo
; risultato della sottrazione.
CON_10 movlw .10 ; definiamo le “decine” allo stesso modo
subwf Rbin,w
STATO btfss, c
vai a end_con
incf Rdec,f
movwf Rbin
vai a CON_10;
end_con
movf Rbin,w
movwf Rsim ; dopo le sottrazioni, inserisci il resto in “unità”
;proseguire l'esecuzione del programma

Conversione inversa del codice BCD in b2. Utilizziamo gli stessi registri Rhan, Rdec, Rsim dove il numero si trova nel codice BCD, i registri RbinH - la cifra più significativa e RbinL - la cifra meno significativa per i numeri (> 255) nel codice b2 e i registri ausiliari RM1 - “ moltiplicando", RM2 - "moltiplicatore". Per convertire BCD in b2 è necessario moltiplicare "centinaia" per 100, "decine" per 10 e sommare il tutto insieme alle "unità" e, se necessario, tenendo conto del trasferimento alla cifra più significativa Per la moltiplicazione utilizziamo l'operazione di addizione.

B2X_100 movimento .99 ; conversione "centinaia".
movimento RM2; moltiplicatore = numero di addizioni (100) meno uno
movf Rhan, w
movwfRM1; moltiplicando = "centinaia"
loopX100 addwf RM1,w btfsc STATO,c ; verificando il trasferimento alla cifra più significativa
incf RbinH,f ; se c'è un trasferimento
decfsz RM2,f ; controllare il numero di aggiunte
vai a loopX100
movwfRbinL; Il risultato dell'addizione viene inserito nel registro ml. categoria
;
B2X_10 movimento .9 ; conversione delle "decine".
movimento RM2; moltiplicatore = numero di addizioni (10) meno uno
movf Rdec,w
movwfRM1; moltiplicando = "decine"
loopX10 addwf RM1,w ; qui il trasferimento non può essere controllato, perché risultato
decfsz RM2,f ; sempre < 255
vai a loopX10
addwf RbinL,f ; aggiungi il risultato della conversione delle "decine".
btfsc STATO,c ; tenendo conto del possibile riporto negli scarichi
incfr
RbinH,f
movf Rsim,w
addwf Rbin,f ; aggiungendo “unità” tenendo conto del possibile trasferimento
STATO btfsc,c
incf RbinH,f

Fine delle trasformazioni e ulteriore attuazione del programma. Nei registri RbinL e RbinH hanno ricevuto un numero a 16 bit nel codice b2.

Per eseguire l'operazione aritmetica di divisione, in analogia con la moltiplicazione discussa sopra, si utilizza l'operazione di sottrazione. Diciamo che dobbiamo dividere un numero situato nei registri RHsum (bit di ordine alto) e RLsum (bit di ordine basso) per un divisore (prendiamo un divisore non > 255) situato nel registro Rdel.

Inseriremo il risultato nei registri RHrez e RLrez (rispettivamente cifre alte e basse):

OP_DEL
movf Rdel,w
subwf Rlsum,w
STATO btfss,c; Controlliamo se il risultato è negativo?
vai a DEF_carry; se “sì”, allora effettuiamo un prestito dall'art. categoria
incf RLrez,f ; contare il numero di sottrazioni tenendo conto
btfsc STATO,c ; possibile passaggio al grado senior
incf RHrez,f
movwf somma RL; ripristiniamo il resto per non perdere
vai a OP_DEL ; se il risultato della sottrazione è negativo
;
DEF_carry
movlw 0h
xorwf RHsomma,w ; sono passati tutti dal grado senior a quello junior?
btfsc STATO,z ; se "sì", cioè RHdel = 0 e in OP_DEL neg-
vai a OUT_DEL ; tsat. risultato: fine della divisione e uscita
decf Somma RH,f ; se "no" - un prestito dalla categoria senior e pro-
incf RLrez,f ; continuiamo
btfsc STATO,c ; verificando la necessità di trasferimento alla cifra standard
incf RHrez,f
vai a OP_DEL

Autore: Vladimir D., degvv@mail.ru; Pubblicazione: cxem.net

Vedi altri articoli sezione Radioamatore principiante.

Leggere e scrivere utile commenti su questo articolo.

<< Indietro

Ultime notizie di scienza e tecnologia, nuova elettronica:

Macchina per diradare i fiori nei giardini 02.05.2024

Nell'agricoltura moderna si sta sviluppando il progresso tecnologico volto ad aumentare l'efficienza dei processi di cura delle piante. Presentata in Italia l'innovativa macchina per il diradamento dei fiori Florix, progettata per ottimizzare la fase di raccolta. Questo attrezzo è dotato di bracci mobili, che permettono di adattarlo facilmente alle esigenze del giardino. L'operatore può regolare la velocità dei fili sottili controllandoli dalla cabina del trattore tramite joystick. Questo approccio aumenta significativamente l'efficienza del processo di diradamento dei fiori, offrendo la possibilità di adattamento individuale alle condizioni specifiche del giardino, nonché alla varietà e al tipo di frutto in esso coltivato. Dopo due anni di test della macchina Florix su diverse tipologie di frutta, i risultati sono stati molto incoraggianti. Agricoltori come Filiberto Montanari, che utilizza una macchina Florix da diversi anni, hanno riscontrato una significativa riduzione del tempo e della manodopera necessari per diluire i fiori. ... >>

Microscopio infrarosso avanzato 02.05.2024

I microscopi svolgono un ruolo importante nella ricerca scientifica, consentendo agli scienziati di approfondire strutture e processi invisibili all'occhio. Tuttavia, vari metodi di microscopia hanno i loro limiti e tra questi c'è la limitazione della risoluzione quando si utilizza la gamma degli infrarossi. Ma gli ultimi risultati dei ricercatori giapponesi dell'Università di Tokyo aprono nuove prospettive per lo studio del micromondo. Gli scienziati dell'Università di Tokyo hanno presentato un nuovo microscopio che rivoluzionerà le capacità della microscopia a infrarossi. Questo strumento avanzato consente di vedere le strutture interne dei batteri viventi con sorprendente chiarezza su scala nanometrica. In genere, i microscopi nel medio infrarosso sono limitati dalla bassa risoluzione, ma l’ultimo sviluppo dei ricercatori giapponesi supera queste limitazioni. Secondo gli scienziati, il microscopio sviluppato consente di creare immagini con una risoluzione fino a 120 nanometri, ovvero 30 volte superiore alla risoluzione dei microscopi tradizionali. ... >>

Trappola d'aria per insetti 01.05.2024

L’agricoltura è uno dei settori chiave dell’economia e il controllo dei parassiti è parte integrante di questo processo. Un team di scienziati dell’Indian Council of Agricultural Research-Central Potato Research Institute (ICAR-CPRI), Shimla, ha trovato una soluzione innovativa a questo problema: una trappola per insetti alimentata dal vento. Questo dispositivo risolve le carenze dei metodi tradizionali di controllo dei parassiti fornendo dati sulla popolazione di insetti in tempo reale. La trappola è alimentata interamente dall'energia eolica, il che la rende una soluzione ecologica che non richiede energia. Il suo design unico consente il monitoraggio sia degli insetti dannosi che utili, fornendo una panoramica completa della popolazione in qualsiasi area agricola. “Valutando i parassiti target al momento giusto, possiamo adottare le misure necessarie per controllare sia i parassiti che le malattie”, afferma Kapil ... >>

Notizie casuali dall'Archivio

Transistori della famiglia MDMESH V 30.06.2010

I transistor MDMESH V sono i migliori transistor al mondo in termini di resistenza a canale aperto nell'intervallo di tensione operativa di 500...650 V.

Ad esempio, i transistor della serie STW77N65M5 della famiglia MDMESH V hanno un valore Rdson massimo di 650 ohm per una tensione operativa di 0,033 V e una corrente statica massima di 69 A. Allo stesso tempo, la carica di gate di un tale transistor è solo 200 nK. L'STL21N65M5 è il primo transistor MDMESH V in un pacchetto PowerFlat.

Con una tensione di esercizio di 650 V, il transistor STL21N65M5 ha una resistenza a canale aperto di 0,190 ohm e una corrente statica massima di 17 A, mentre la sua carica di gate è di 50 nK.

Altre notizie interessanti:

▪ Bici elettriche Himiway modelli Pony, Rambler e Rhino

▪ Ottimizzazione della risonanza magnetica

▪ I droni possono odorare

▪ cura degli scarafaggi

▪ Gli inverni saranno freddi

News feed di scienza e tecnologia, nuova elettronica

 

Materiali interessanti della Biblioteca Tecnica Libera:

▪ sezione del sito Televisione. Selezione di articoli

▪ articolo Che tipo di fermata è questa, Bologoe o Popovka? Espressione popolare

▪ articolo Quale azienda calzaturiera regala un altro paio di scarpe ai bambini poveri per ogni paio di scarpe che vende? Risposta dettagliata

▪ articolo Omezhnik acqua. Leggende, coltivazione, metodi di applicazione

▪ articolo Breadboard per microcircuiti. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica

▪ articolo Norme delle prove di accettazione. Condensatori. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica

Lascia il tuo commento su questo articolo:

Nome:


E-mail (opzionale):


commento:





Tutte le lingue di questa pagina

Homepage | Biblioteca | Articoli | Mappa del sito | Recensioni del sito

www.diagram.com.ua

www.diagram.com.ua
2000-2024