AIUTO CON Interfacciamento PIC16F84A CON LCD

S

SUPER-eZee

Guest
Auguri ragazzi.Attualmente sto lavorando su un progetto con il PIC dove sono io uno PIC programmazione e l'interfacciamento con un display LCD 16x2 HD44100H,
la programmazione in assembler.Ho usato uno dei bit sulla porta un po 'come input.Ogni volta che l'ingresso è a basso bit si attiva il PIC per visualizzare un messaggio sul display LCD.C'è un contatore che conta quante volte il pin RA3 è bassa e ogni limite viene visualizzato un messaggio diverso.
c'è solo il 4 messaggi, e ogni volta che raggiunge il limite di 4 contare, si reimposta a zero.

Il Problema: Dopo la programmazione, quando si accende il PIC la stampa solo 4 messaggi uno dopo l'altro senza il trigger pin essere premuto.In secondo luogo, ho perfezionato il codice, ma non vogliono lavorare.Ho bisogno di aiuto.
Ho allegato il codice e le eventuali suggerimenti sono i benvenuti.

================================================== ===/ / Titolo: Design Project 3 Treno Programma

/ / Autore: Nikkie & Enoch

/ / Rev.& Data: 23 marzo 2009

# define LCD_E PORTA, RA0 / / LCD Attiva comando
# define LCD_RW PORTA, RA1 / / LCD di lettura / scrittura di comando
# define LCD_RS PORTA, RA2 / / LCD Registrati Seleziona-comando
# define BUSYFLAG PORTB, 7 / / LCD 'Busy' uscita di bandiera
# define INPUTBIT PORTA, RA3 / / ingresso linea

COUNTER EQU 0C
CNT1 EQU 0D / / Counter variabili utilizzate per la realizzazione del ritardo
CNT2 EQU 0E
CNT3 EQU 0F
LCD_TEMP EQU 10

//************************************************ **************
INIT: BSF Status, RP0 / / Memory Bank 1

MOVLW 0x00 / / Impostazione della porta B e come output
MOVWF TRISB / / uscita dei dati LCD a linee

MOVLW 0x08 / / Bit 3 di Porto Un po 'di input e uno di uscita di 0-2 LCD RS, RW, E
MOVWF Trisa

BCF STATUS, RP0 / / Passaggio a memoria 0

CLRF PORTB / / Svuotare la porta di uscita
CLRF PORTA / / Svuotare la porta di ingresso

NOP / /
cancellazione di tutte le variabili
CLRF COUNTER
CLRF LCD_TEMP
CLRF CNT1
CLRF CNT2
CLRF CNT3
INVITO LCD_INIT / / Inizializzazione del display LCD
INVITO LCDCLR

//************************************************ **************
INIZIO: APPELLO CHECK

MOVF COUNTER, w / / Verifica se il codice di ingresso è di 1 stazione
XORLW 0x01
BTFSC STATUS, Z
INVITO DISPST1MOVF Counter, w
XORLW 0x02 / / Verifica se l'input è il codice della stazione 2
BTFSC STATUS, Z
INVITO DISPST2

MOVF COUNTER, w / / Verifica se il codice di ingresso è di 3 stazioni
XORLW 0x03
BTFSC STATUS, Z
INVITO DISPST3MOVF COUNTER, w / / Verifica se il codice di ingresso è di 4 stazioni
XORLW 0x04
BTFSC STATUS, Z
INVITO DISPST4

GOTO START

//************************************************ **************
/ / Funzioni di visualizzazione LCD
DISPST4: CALL WAIT
MOVLW 0x50 / / Visualizzazione 'P'
INVITO WR_DATA

CALL WAIT
MOVLW 0x61 / / Visualizzazione 'A'
INVITO WR_DATA

CALL WAIT
MOVLW 0x72 / / Visualizzazione 'R'
INVITO WR_DATA

CALL WAIT
MOVLW 0x6F / / Visualizzazione 'O'
INVITO WR_DATA

CALL WAIT
MOVLW 0x77 / / Visualizzazione 'W'
INVITO WR_DATA

INVITO DEL2S
INVITO LCDCLR
INVITO DEL20MS
RETURN

//************************************************ **************
DISPST3: CALL WAIT
MOVLW 0x45 / / Visualizzazione 'E'
INVITO WR_DATA

CALL WAIT
MOVLW 0x7C / / Visualizzazione 'L'
INVITO WR_DATA

CALL WAIT
MOVLW 0x73 / / Visualizzazione 'S'
INVITO WR_DATA

CALL WAIT
MOVLW 0x69 / / Visualizzazione 'I'
INVITO WR_DATA

CALL WAIT
MOVLW 0x65 / / Visualizzazione 'E'
INVITO WR_DATA

CALL WAIT
MOVLW 0x73 / / Visualizzazione 'S'
INVITO WR_DATA

INVITO DEL2S
INVITO LCDCLR
INVITO DEL20MS
RETURN

//************************************************ **************
DISPST2: CALL WAIT
MOVLW 0x56 / / Visualizzazione 'V'
INVITO WR_DATA

CALL WAIT
MOVLW 0x61 / / Visualizzazione 'A'
INVITO WR_DATA

CALL WAIT
MOVLW 0x73 / / Visualizzazione 'S'
INVITO WR_DATA

CALL WAIT
MOVLW 0x63 / / Displaying'C '
INVITO WR_DATA

CALL WAIT
MOVLW 0x6F / / Displaying'O '
INVITO WR_DATA

INVITO DEL2S
INVITO LCDCLR
INVITO DEL20MS
RETURN

//************************************************ **************
DISPST1: CALL WAIT
MOVLW 0x4D / / Displaying'M '
INVITO WR_DATA

CALL WAIT
MOVLW 0x75 / / Displaying'U '
INVITO WR_DATA

CALL WAIT
MOVLW 0x74 / / Displaying'T '
INVITO WR_DATA

CALL WAIT
MOVLW 0x75 / / Displaying'U '
INVITO WR_DATA

CALL WAIT
MOVLW 0x61 / / Displaying'A '
INVITO WR_DATA

CALL WAIT
MOVLW 0x7C / / Displaying'L '
INVITO WR_DATA

INVITO DEL2S
INVITO LCDCLR
INVITO DEL20MS
RETURN

//************************************************ **************
/ / Una funzione che definisce il display LCD per essere pronti per l'accettazione dei dati

WR_DATA: MOVWF LCD_TEMP / / caratteri per essere inviati in W
CALL WAIT / / Attendere LCD per essere pronti
BCF LCD_RW / / Set LCD in modalità di lettura
BSF LCD_RS / / Set LCD in modalità dati
BSF LCD_E / / Abilita linea LCD ALTA
MOVF LCD_TEMP, w
MOVWF PORTB / / Invia dati LCD
BCF LCD_E / / LCD linea Attiva BASSA
RETURN//************************************************ **************
CHECK: BTFSC INPUTBIT / / Controllo se l'ingresso si preme il pulsante
GOTO CHECK
INVITO DEL20MS
BTFSC INPUTBIT
GOTO CHECK
INCF COUNTER, f / / Incremento della stazione variabile contatore
MOVLW 0x00
MOVF COUNTER, w / / Spostamento del valore della variabile COUNTER
XORLW 0x05 / / Verifica se il valore del contatore è pari a 5
BTFSC STATUS, Z / / Z bandiera sarà pari a zero se il valore del contatore è 5
INVITO DOWN / / ridurre il valore di COUNTER
RETURN

DOWN: CLRF COUNTER / / Riavviare il conteggio delle stazioni a partire dal 1
RETURN

//************************************************ **************
/ / 20 milli-secondo ritardo

DEL20MS: MOVLW 0x1A
MOVWF CNT2
Loop1: MOVLW 0xFF
MOVWF CNT1

LOOP2: DECFSZ CNT1, f
GOTO LOOP2
DECFSZ CNT2, f
GOTO Loop1
RETURN

//************************************************ **************
/ / Funzione LCD Inizializzazione

LCD_INIT: APPELLO DEL20MS
MOVLW 0x38
MOVWF PORTB
BCF LCD_RS
BCF LCD_RW
BSF LCD_E
BCF LCD_E
INVITO DEL20MS
CALL WAIT
MOVLW 0x0F
MOVWF PORTB
BCF LCD_RS
BCF LCD_RW
BSF LCD_E
BCF LCD_E
INVITO DEL20MS
CALL WAIT
MOVLW 0x01
MOVWF PORTB
BCF LCD_RS
BCF LCD_RW
BSF LCD_E
BCF LCD_E
INVITO DEL20MS
CALL WAIT
MOVLW 0x06
BCF LCD_RS
BCF LCD_RW
BSF LCD_E
BCF LCD_E
INVITO DEL20MS
CALL WAIT
RETURN

//************************************************ **************
/ / Una funzione di controllo LCD occupato se il flag è impostato

WAIT: BTFSC BUSYFLAG
GOTO WAIT
INVITO DEL20MS
BTFSC BUSYFLAG
GOTO WAIT
RETURN
//************************************************ **************
/ / 2 secondi
DEL2S: MOVLW 0x0A
MOVWF CNT3

PART1: MOVLW 0xFF
MOVWF CNT2

PART1A: MOVLW 0xFF
MOVWF CNT1

PART1B: DECFSZ CNT1, f
GOTO PART1B
NOP

PART2: DECFSZ CNT2, f
GOTO PART1A

DECFSZ CNT3, f
GOTO PART1
RETURN
//************************************************ **************
/ / Una funzione per azzerare il display
LCDCLR: MOVLW 0x01
INVITO WR_DATA
RETURN
//************************************************ **************
ORG 0x2007 / / Configurazione di Word

DW 0x3FF1

FINE
Ultimo a cura di SUPER-eZee il 16 maggio 2009 21:54, edited 1 volta in totale

 
salve,

Collegare un pullup resistore tra RA3 e VDD.
Questo è causato b'coz RA3 è stato in basso.

Per me il montaggio è di codice difficile da correggere.Usa alcuni compilatori C.

Saluti,
M. Sukumar

 

Welcome to EDABoard.com

Sponsor

Back
Top