lcd (16x2) på 4 biter på PIC16F72 i montering-lcd fungerer ikke

N

navneet_2040

Guest
Jeg prøver å kjøre min lcd (16x2) på 4 biter på PIC16F72 i forsamlingen.
men jeg får ingen vises på lcd.
Jeg bruker portb nedre 4 bits til å sende data på 4 større biter av lcd,
vennligst gi meg koden.

 
Har du initialisert ur LCD riktig?
initialisering i 4 bit er ikke en lett jobb
allikevel se opp for å følge link
http://www.sonsivri.com/forum/index.php?topic=6525.0
og last ned lcdbusy.zip
Dette kan hjelpe deg

 
;************************************************* *********************
; Denne filen er en grunnleggende kode mal for montering kodegenerering *
; På PICmicro PIC16F72.Denne filen inneholder grunnleggende koden *
; Byggesteiner til å bygge på.*
; *
; Hvis avbryter ikke brukt all kode som presenteres mellom ORG *
; 0x004 direktivet og etiketten viktigste kan fjernes.I tillegg *
; Variabelen oppdrag for 'w_temp' og 'status_temp' kan *
; Bli fjernet.*
; *
; Se MPASM brukerhåndboken for mer informasjon om *
; Funksjoner i assembler (Document DS33014).*
; *
; Se respektive PICmicro datablad for ytterligere *
; Informasjon om instruksjonssett.*
; *
;************************************************* *********************
; *
; Filnavn: lcd.asm *
; Dato: 9-12-08 *
; Fil versjon: *
; *
; Forfatter: Navneet Kumar *
; Firma: *
; *
; *
;************************************************* *********************
; *
; Files kreves: *
; *
; *
; *
;************************************************* *********************
; *
; Merknader: *
; *
; *
; *
; *
;************************************************* *********************listen p = 16f72; listen direktivet å definere prosessor
# include <p16f72.inc>; prosessor bestemt variabel definisjoner

__CONFIG _CP_OFF & _WDTEN_OFF & _BODEN_OFF & _PWRTEN_ON & _RC_OSC

; '__CONFIG' Direktivet blir brukt til å legge konfigurasjonsdata innenfor. Asm fil.
; Det lables følge direktivet ligger i de respektive. Inc fil.
; Se respektive datablad for mer informasjon om konfigurasjon ord.;***** VARIABLE DEFINISJONER
w_temp EQU 0x20; variabel brukes for sammenheng lagring
w_temp1 EQU 0XA0; forbeholder bank1 tilsvarende w_temp
status_temp EQU 0x21; variabel brukes for sammenheng lagring;************************************************* *********************
ORG 0x000; prosessor tilbakestille vektor

goto viktigste; gå til begynnelsen av programmetORG 0x004; interrupt vektor plassering

movwf w_temp; lagre av gjeldende W registrere innholdet
movf STATUS, w; flytte status register i W register
BCF STATUS, RP0; sikre fil registrere banken satt til 0.
movwf status_temp; lagre av innholdet STATUS register; Isr kode kan du gå hit eller være lokalisert i en samtale subroutine stederBCF STATUS, RP0; sikre fil registrere banken satt til 0.
movf status_temp, w; hente kopi av STATUS register
movwf STATUS; gjenopprette pre-isr STATUS register innholdet
swapf w_temp, f
swapf w_temp, w; gjenopprette pre-isr W registrere innholdet
retfie; tilbake fra avbryte
hovedsaklig

; Gjenværende koden går her, er hoved-koden starter herfra, 16x2 lcdbSF STATUS, RP0, vi velger bank1 å sette verdier i Tris registre
movlw 0x00
movwf TRISB; innstilling portb som utgang, B0 til B3 er koblet til LCD data pins D4-D7
movlw 0x00
movwf TRISC; innstilling portc som utgang
; RS er på PORtC, 6
; EN er på PORTC, 7
; R / W pin er på bakken, så jeg ikke bruker denstart:
BCF STATUS, RP0, vi kommer i bank0 igjenmovlw 0x28; 28 er vi ønsker å sende til lcd-pin til 4 bit initialisering
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Command1; data på 0x23 sendes til lcd som kommando

kaller forsinkelsen, vi kaller forsinkelsen

movlw 0x01; 01 er vi ønsker å sende til lcd
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Command1; data på 0x23 sendes til lcd som kommando

Ring forsinkelse

movlw 0x0c; 0c er at vi vil sende til lcd
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Command1; data på 0x23 sendes til lcd som kommando

Ring forsinkelse

movlw 0x80; 80 er vi ønsker å sende til lcd, som starter adresse
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Command1; data på 0x23 sendes til lcd som kommando

Ring forsinkelse

movlw # "A"; karakter A er vi ønsker å sende til lcd-pin til 4 bit initialisering
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Data1; vi kaller Data1 nå fordi vi skal sende data nå lcd

Ring forsinkelse

movlw # "B"; karakteren B er at vi vil sende til lcd-pin til 4 bit initialisering
movwf 0x23, 0x23 er minneplasseringen vi bruker til å lagre dataene
Ring Data1; vi kaller Data1 nå fordi vi skal sende data nå lcd

Ring forsinkelseloop:; uendelig løkke, etter at han kom her lcd skal vise AB tegn på skjermen
goto loopCommand1:
movlw 0x02; 2 er tatt inn i 0x33 minneplassering for telleren til å gå for 2 ganger
movwf 0x33

movf PORTB, w; lagre til innholdet portb til w
andlw 0xf0; maske øvre 4 bits som vi bruker lavere 4 bits til å sende data på lcd
movwf 0x24; lagre denne verdien til minneposisjon 0x24S1:
movf 0x23, w, nå sette verdien i 0x23 til w
andlw 0xf0; lagre høyere 4 bits, put in w, data i 0x23 reamins uendret
movwf 0x29, putte den i minneposisjon 0x29
swapf 0x29, w; bytte den og putte den i w
iorwf 0x24, w; nå eller den med øvre høyere biter vi reddet av portb
movwf PORTB; sette det på portb, så lavere 4 biter av portb har høyere bit av data
BCF PORTC, 6; RS er klarert for å vise at det er en kommando
bSF PORTC, 7; EN er satt
Ring forsinkelse
Ring forsinkelse
BCF PORTC, 7; EN tømmes
Ring forsinkelse
swapf 0x23, F, nå får vi lavere bit av data
decf 0x33, F; teller er trukket
btfss STATUS, Z, vi sjekke teller
goto s1; drar vi igjen til S1 og sende den nedre bite av data på portb som vi gjorde for høyere bite
returnData1:
movlw 0x02; samme som Command1, her RS er satt høyt, er andre logikk samme som Command1
movwf 0x33

movf PORTB, w
andlw 0xf0
movwf 0x24
g1:
movf 0x23, w
andlw 0xf0
movwf 0x29
swapf 0x29, w
iorwf 0x24, w
movwf PORTB
bSF PORTC, 6
bSF PORTC, 7
Ring forsinkelse
Ring forsinkelse
BCF PORTC, 7
Ring forsinkelse
swapf 0x23, F
decf 0x33, F
btfss STATUS, Z
goto g1
return

delay:; denne forsinkelsen er nok at lcd krever

movlw 0x0d
movwf 0x21

her:
decf 0x21, F
btfss STATUS, Z
goto here1
goto end1
here1:
movlw 0x0F
movwf 0x20
go1:
decf 0x20, F
btfss STATUS, Z
goto go1
goto her
end1: nop
return
END
Sist endret av navneet_2040 den 09. Des 2008 7:08, endret 1 gang totalt

 
Hei Navneet,
Forstå andres kode er like tøff som å lese andres tanker.Koden mangler kommentarer og andre kanskje ikke liker å investere mye av sin verdifulle tid på å forstå koden din og hjelpe deg.

Et par innlegg ned innlegget ditt er det et identisk innlegg.Han er også å ha de samme problem, men se klarhet i koding hans.Det er noen forslag gitt der, men ingen bekreftelse ennå om hvorvidt han har løst sitt problem.Disse kommentarene er også aktuelt i ditt tilfelle.Så ta en titt på innlegget nedenfor og mest sannsynlig vil kunne hjelpe dere.

Innlegget referanse er:
ftopic335738.html

Hilsen,
Laktronics

 
du har rett .. at min koden er vanskelig å forstå for andre som jeg ikke har gitt noen kommentarer ..så jeg kommer til å inkludere så mange kommentarer som mulig slik at personen som leser den vil forstå det lett ...jeg vil legge inn den nye koden meget snart ..thanx.

 
u fortalt at ur med lcd i 4 bit modus.ok en gang se lcd kommandoen 0x28.dvs. 0x28 er å sette lcd i 4 bit modus så først sende øvre bite og deretter lavere bite.
0x28 = 0 0 1 0 1 0 0 0
bit stillinger er 7 6 5 4 3 2 1 0 i ur mikrokontroller databiter r b3 til B0.så første vei til høyre shift ur høyere bite 4 ganger og send den til LCD og sende lavere bite uten skiftende

 

Welcome to EDABoard.com

Sponsor

Back
Top