da
Brianz » 22 feb 2017, 19:29
Il problema essenziale, quando si affronta qualcosa di nuovo, è quello di affrontarlo con chiarezza.
1.- 16F84 è un chip extra obsoleto. Il fatto che esistano in rete tutorial deriva dal fatto che essendo così vecchio, c'è stato il tempo di scrivere molto.
Ma, in generale, chi ha scritto lo ha fatto magari con profusione di esempi, ma in realtà senza spiegare un bel niente di come sono strutturati i PIC
2.- infatti 16F84 è classificato da Microchip come Midrange, mentre 10F200 è nella famiglia dei Baseline. Tra le due ci sono serie differenze, tra le quali:
- il registro di direzione TRISIO nei Baseline NON è mappato in memoria ed è raggiungibile solo in scrittura con l'istruzione speciale TRIS.
Nei Midrange, invece, il registro TRIS è in memoria ed è accessibile con le normali. istruzioni
Per cui, volendo accendere un LED collegato a GP2 occorrerà
- Codice: Seleziona tutto
clrf GPIO ; preset GPIO latch a 0
; disabilita la funzione T0CKI da GP2
movlw b'11011111'
OPTION ; al registro OPTION_REG
; TRISGPIO --111011 GP2 out
movlw b'11111011'
TRIS GPIO ; al registro direzione
; accende LED
bsf GPIO,GP2
Per farlo su un Midrange, ad esempio 16F684 con RA2
- Codice: Seleziona tutto
; operazioni in bank 0
; inizializzazioni dell' I/O al reset
clrf PORTA ; latch azzerati per i LED spenti
; escludi comparatore per avere I/O digitali
movlw 0x07
banksel CM1CON0
movwf CM1CON0
; escludi T0CKI per avere RA2
banksel OPTION_REG
bcf OPTION_REG,T0CS
; direzione pin tutti out
banksel TRISA
bcf TRISA,2
; escludi AD
banksel ANSEL
clrf ANSEL
ledon:
banksel PORTA
bsf PORTA,2
3. - Microchip designa GPIO gli array di I/O dei chip a 6 e 8 pin, mentre designa come PORT quelli dei chip maggiori.
4.- in questi PIC il WREG NON è mappato in memoria e non si può "leggere". Si può usare solo per spostare dati o elaborarli.
Altri info si posso trovare a
http://www.microcontroller.it/con un corso sui Baseline in Assembly