HJELP MED samvirking PIC16F84A med LCD

S

SUPER-EZEE

Guest
Hilsen gutta.Jeg jobber på et prosjekt ved hjelp av PIC der jeg er programmering en PIC og samvirking den med en 16x2 HD44100H LCD, programmering i Assembler.Jeg har brukt en av de biter på Port En som et innspill bit.Hver gang input bit er lavt det utløser PIC å vise en melding på LCD.Det
er en teller som teller hvor mange ganger RA3 pin er lav, og hver utløse viser en annen melding.
det
er bare 4 meldinger, og hver gang utløse telle når 4, den tilbakestilles til null.

Problem: Etter programmering, når jeg slår på PIC de 4 meldinger bare skrive ut den ene etter den andre uten at det utløser pin blir trykket.Dernest har jeg raffinerte koden men det vil ikke fungere.Jeg trenger hjelp.
Jeg har vedlagt koden og eventuelle forslag er velkomne.

================================================== ===/ / Tittel: Design Project 3 Train Program

/ / Author: Nikkie & Enoch

/ /
Rev

& Dato:
23. mars 2009

# define LCD_E Porta, RA0 / / LCD Aktiver kontrolledning
# define LCD_RW Porta, RA1 / / LCD lese-/skrivehastighet kontrolledning
# define LCD_RS Porta, RA2 / / LCD Registrer-Velg kontrolledning
# define BUSYFLAG PORTB, 7 / / LCD "Opptatt" flagge produksjonen
# define INPUTBIT Porta, RA3 / / inngangsstrøm

Counter EQU 0C
CNT1 EQU 0D / / Counter-variabler brukt i utførelsen av forsinkelsen
CNT2 EQU 0E
CNT3 EQU 0F
LCD_TEMP EQU 10

//************************************************ **************
Init: BSF status RP0 / / Memory Bank 1

MOVLW 0x00 / / Innstilling port B og som utdata
MOVWF TRISB / / Output til LCD Data linjer

MOVLW 0x08 / / Bit 3 av Port A en inngang bits og 0-2 utgang til LCD RS, RW, E
MOVWF TRISA

BCF status RP0 / / Bytte til minne banken 0

CLRF PORTB / / Clearing utdataene port
CLRF Porta / / Tømme Input Port

Nov / / Clearing alle variablene
CLRF Counter
CLRF LCD_TEMP
CLRF CNT1
CLRF CNT2
CLRF CNT3
CALL LCD_INIT / / Initialising LCD display
CALL LCDCLR

//************************************************ **************
START:
Ring CHECK

MOVF telleren, w / / Kontrollerer om skriving koden av stasjon 1
XORLW 0x01
BTFSC STATUS, Z
CALL DISPST1MOVF telleren, w
XORLW 0x02 / / Kontrollerer om skriving koden av stasjon 2
BTFSC STATUS, Z
CALL DISPST2

MOVF telleren, w / / Kontrollerer om skriving koden av station 3
XORLW 0x03
BTFSC STATUS, Z
CALL DISPST3MOVF telleren, w / / Kontrollerer om skriving koden av stasjon 4
XORLW 0x04
BTFSC STATUS, Z
CALL DISPST4

GOTO START

//************************************************ **************
/ / LCD vise funksjoner
DISPST4:
Ring WAIT
MOVLW 0x50 / / Vise "P"
CALL WR_DATA

CALL WAIT
MOVLW 0x61 / / viser 'A'
CALL WR_DATA

CALL WAIT
MOVLW 0x72 / / Viser 'R'
CALL WR_DATA

CALL WAIT
MOVLW 0x6F / / Vise "O"
CALL WR_DATA

CALL WAIT
MOVLW 0x77 / / Vise "W"
CALL WR_DATA

CALL DEL2S
CALL LCDCLR
CALL DEL20MS
RETURN

//************************************************ **************
DISPST3:
Ring WAIT
MOVLW 0x45 / / Viser 'E'
CALL WR_DATA

CALL WAIT
MOVLW 0x7C / / Viser 'L'
CALL WR_DATA

CALL WAIT
MOVLW 0x73 / / Viser 'S'
CALL WR_DATA

CALL WAIT
MOVLW 0x69 / / Viser 'I'
CALL WR_DATA

CALL WAIT
MOVLW 0x65 / / Viser 'E'
CALL WR_DATA

CALL WAIT
MOVLW 0x73 / / Viser 'S'
CALL WR_DATA

CALL DEL2S
CALL LCDCLR
CALL DEL20MS
RETURN

//************************************************ **************
DISPST2:
Ring WAIT
MOVLW 0x56 / / Vise "V"
CALL WR_DATA

CALL WAIT
MOVLW 0x61 / / viser 'A'
CALL WR_DATA

CALL WAIT
MOVLW 0x73 / / Viser 'S'
CALL WR_DATA

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

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

CALL DEL2S
CALL LCDCLR
CALL DEL20MS
RETURN

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

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

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

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

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

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

CALL DEL2S
CALL LCDCLR
CALL DEL20MS
RETURN

//************************************************ **************
/ / En funksjon som setter LCD å være klar til å akseptere data

WR_DATA: MOVWF LCD_TEMP / / tegnet til å bli sendt i W
CALL WAIT / / Wait for LCD å være klar
BCF LCD_RW / / Set LCD i skrivebeskyttet modus
BSF LCD_RS / / Set LCD i data-modus
BSF LCD_E / / LCD Aktiver linje HIGH
MOVF LCD_TEMP, w
MOVWF PORTB / / Send data til LCD
BCF LCD_E / / LCD Aktiver linje LOW
RETURN//************************************************ **************
CHECK: BTFSC INPUTBIT / / overvåking hvis input knappen trykkes
GOTO CHECK
CALL DEL20MS
BTFSC INPUTBIT
GOTO CHECK
INCF telleren, f / / øke stasjon counter variable
MOVLW 0x00
MOVF telleren, w / / Moving verdien av Counter-variabelen
XORLW 0x05 / / Checking hvis verdien av telleren er lik 5
BTFSC STATUS, Z / / Z flagg blir null hvis verdien av telleren er 5
CALL NED / / Reduser verdien av Counter
RETURN

NED: CLRF Counter / / Start opptellingen stasjoner fra 1
RETURN

//************************************************ **************
/ / 20 milli-sekunder forsinkelse

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

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

//************************************************ **************
/ / LCD Initialising funksjon

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

//************************************************ **************
/ / En funksjon for overvåking hvis LCD opptatt flagget er angitt

WAIT: BTFSC BUSYFLAG
GOTO WAIT
CALL DEL20MS
BTFSC BUSYFLAG
GOTO WAIT
RETURN
//************************************************ **************
/ / 2 SECOND FORSINKELSE
DEL2S: MOVLW 0x0A
MOVWF CNT3

PART1: MOVLW 0xFF
MOVWF CNT2

PART1A: MOVLW 0xFF
MOVWF CNT1

PART1B: DECFSZ CNT1, f
GOTO PART1B
Nov

PART2: DECFSZ CNT2, f
GOTO PART1A

DECFSZ CNT3, f
GOTO PART1
RETURN
//************************************************ **************
/ / En funksjon for å tømme displayet
LCDCLR: MOVLW 0x01
CALL WR_DATA
RETURN
//************************************************ **************
Org 0x2007 / / Configuration Word

DW 0x3FF1

END
Sist endret av super-EZEE
16. mai 2009 21:54, endret 1 gang totalt

 
hei,

Koble en pullup motstander mellom RA3 og VDD.
Dette er forårsaket b'coz RA3 er i dårlig tilstand.

For meg montering koden til vanskelig å rette.Bruke noen c kompilatorene.

Hilsen,
M. Sukumar

 

Welcome to EDABoard.com

Sponsor

Back
Top