S
SUPER-EZEE
Guest
Zdravím chlapi.Já jsem v súčasnosti pracujú na projekte pomocou PIC, kde som programovanie PIC a jeho prepojenie s 16x2 HD44100H LCD, programování v assembleru.Mám použiť jeden z bitov na porte A ako vstup bit.Zakaždým, keď vstupné bit je nízka spúšťa PIC sa zobrazí správa o LCD.Je protizáruku, ktorá počíta, koľkokrát RA3 pin je nízka a každý spustení zobrazí rôzne správy.
existuje iba 4 správy, a zakaždým, keď spúšť počítať dosahuje 4, resetuje na nulu.
Problém: Po programovania, kedy som sa prepnúť na PIC na 4 tlačových správ len jedna po druhej, bez spúšť pin je stlačené.Po druhé,
pretavili som kód, ale nechce do práce.Potrebujem pomoc.
Mám pripojené kódu a všetky návrhy sú vítané.
================================================== ===/ / Názov: Návrh projektu 3 Vlak Program
/ / Autor: Nikkie & Enoch
/ /
Zj
& Dátum:
23. marca 2009
#
Define LCD_E PORTA, RA0 / / LCD Umožniť kontrolu súlade
#
Define LCD_RW PORTA, RA1 / / LCD čítanie /
zápis na kontrolnej línii
#
Define LCD_RS PORTA, RA2 / / Registrovať LCD-Vyberte kontrolnej línii
#
Define BUSYFLAG PORTB, 7 / / LCD 'Busy' vlajky výstup
#
Define INPUTBIT PORTA, RA3 / / Vstupné riadok
POČÍTADLO EQU 0C
CNT1 EQU 0D / / Counter premenných používaných pri výkone oneskorenie
CNT2 EQU 0E
CNT3 EQU 0F
LCD_TEMP EQU 10
//************************************************ **************
INIT: BSF STATUS, RP0 / / Memory banky 1
MOVLW 0x00 / / nastavenie portu B ako výstup
MOVWF TRISB / / výstup na LCD Dátové linky
MOVLW 0x08 / / Bit 3 Port A bit vstup a výstup do 0-2 LCD RS, RW, E
MOVWF TRIS
BCF STATUS, RP0 / / Prepnutie na pamäti bankový 0
CLRF PORTB / / Vymazanie výstupný port
CLRF PORTA / / Vymazanie Vstupné Port
NOP / / Vymazanie všetkých premenných
CLRF POČÍTADLO
CLRF LCD_TEMP
CLRF CNT1
CLRF CNT2
CLRF CNT3
CALL LCD_INIT / / inicializaci LCD displeja
CALL LCDCLR
//************************************************ **************
ŠTART: CALL CHECK
MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 1
XORLW 0x01
BTFSC ŠTATÚTU, Z
CALL DISPST1MOVF COUNTER, w
XORLW 0x02 / / Kontrola, ak vstupný kód je stanica 2
BTFSC ŠTATÚTU, Z
CALL DISPST2
MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 3
XORLW 0x03
BTFSC ŠTATÚTU, Z
CALL DISPST3MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 4
XORLW 0x04
BTFSC ŠTATÚTU, Z
CALL DISPST4
Choďte do START
//************************************************ **************
/ / LCD zobrazením funkcií
DISPST4: CALL WAIT
MOVLW 0x50 / / Zobrazujem 'P'
CALL WR_DATA
CALL WAIT
MOVLW 0x61 / / Zobrazujem 'A'
CALL WR_DATA
CALL WAIT
MOVLW 0x72 / / Zobrazujem 'R'
CALL WR_DATA
CALL WAIT
MOVLW 0x6F / / Zobrazujem 'O'
CALL WR_DATA
CALL WAIT
MOVLW 0x77 / / Zobrazujem 'W'
CALL WR_DATA
CALL DEL2S
CALL LCDCLR
CALL DEL20MS
NÁVRATNOSŤ
//************************************************ **************
DISPST3: CALL WAIT
MOVLW 0x45 / / Zobrazujem 'E'
CALL WR_DATA
CALL WAIT
MOVLW 0x7C / / Zobrazujem 'L'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem 'S'
CALL WR_DATA
CALL WAIT
MOVLW 0x69 / / Zobrazujem 'I'
CALL WR_DATA
CALL WAIT
MOVLW 0x65 / / Zobrazujem 'E'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem 'S'
CALL WR_DATA
CALL DEL2S
CALL LCDCLR
CALL DEL20MS
NÁVRATNOSŤ
//************************************************ **************
DISPST2: CALL WAIT
MOVLW 0x56 / / Zobrazujem 'W'
CALL WR_DATA
CALL WAIT
MOVLW 0x61 / / Zobrazujem 'A'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem '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
NÁVRATNOSŤ
//************************************************ **************
DISPST1: CALL 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
NÁVRATNOSŤ
//************************************************ **************
/ / Funkcia, ktorá nastavuje LCD byť pripravený na príjem dát
WR_DATA: MOVWF LCD_TEMP / / znakov, ktoré majú byť odoslané do Z
CALL WAIT / /
Wait for LCD to byť pripravení
BCF LCD_RW / / Nastavenie LCD v režime čítania
BSF LCD_RS / / Nastavenie LCD dáta v režime
BSF LCD_E / / LCD Umožniť súlade VYSOKÝM
MOVF LCD_TEMP, w
MOVWF PORTB / / Odosielanie dát na LCD
BCF LCD_E / / LCD Umožniť súlade LOW
NÁVRATNOSŤ//************************************************ **************
CHECK: BTFSC INPUTBIT / / Kontrola vstupu, ak je tlačidlo stlačené
Choď CHECK
CALL DEL20MS
BTFSC INPUTBIT
Choď CHECK
INCF COUNTER, f / / Prírastok stanica protizáruku variabilný
MOVLW 0x00
MOVF COUNTER, w / / Presun hodnota premennej COUNTER
XORLW 0x05 / / Kontrola, ak hodnota POČÍTADLO sa rovná 5
BTFSC ŠTATÚTU, Z / / Z zástava bude nula, ak hodnota je 5 POČÍTADLO
CALL DOLE / / Znížiť hodnotu POČÍTADLO
NÁVRATNOSŤ
DOLE: CLRF POČÍTADLO / / Reštartujte uskutočnia staníc z 1
NÁVRATNOSŤ
//************************************************ **************
/ / 20-miliekvivalentoch sekúnd oneskorenie
DEL20MS: MOVLW 0x1A
MOVWF CNT2
LOOP1: MOVLW 0xFF
MOVWF CNT1
LOOP2: DECFSZ CNT1, f
Choď LOOP2
DECFSZ CNT2, f
Choď LOOP1
NÁVRATNOSŤ
//************************************************ **************
/ / LCD inicializáciu funkcie
LCD_INIT: CALL 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
NÁVRATNOSŤ
//************************************************ **************
/ / A funkcie pre monitorovanie, ak LCD busy flag je nastavený
WAIT: BTFSC BUSYFLAG
Choď WAIT
CALL DEL20MS
BTFSC BUSYFLAG
Choď WAIT
NÁVRATNOSŤ
//************************************************ **************
/ / 2 sekúnd
DEL2S: MOVLW 0x0A
MOVWF CNT3
PART1: MOVLW 0xFF
MOVWF CNT2
Part1: MOVLW 0xFF
MOVWF CNT1
PART1B: DECFSZ CNT1, f
Choď PART1B
NOP
PART2: DECFSZ CNT2, f
Choď part1
DECFSZ CNT3, f
Choď PART1
NÁVRATNOSŤ
//************************************************ **************
/ / A funkciu jasný displej
LCDCLR: MOVLW 0x01
CALL WR_DATA
NÁVRATNOSŤ
//************************************************ **************
ORG 0x2007 / /
Configuration Word
DW 0x3FF1
END
Naposledy upravil SUPER-EZEE dňa
16. mája 2009 21:54; upravený 1 čas celkom
existuje iba 4 správy, a zakaždým, keď spúšť počítať dosahuje 4, resetuje na nulu.
Problém: Po programovania, kedy som sa prepnúť na PIC na 4 tlačových správ len jedna po druhej, bez spúšť pin je stlačené.Po druhé,
pretavili som kód, ale nechce do práce.Potrebujem pomoc.
Mám pripojené kódu a všetky návrhy sú vítané.
================================================== ===/ / Názov: Návrh projektu 3 Vlak Program
/ / Autor: Nikkie & Enoch
/ /
Zj
& Dátum:
23. marca 2009
#
Define LCD_E PORTA, RA0 / / LCD Umožniť kontrolu súlade
#
Define LCD_RW PORTA, RA1 / / LCD čítanie /
zápis na kontrolnej línii
#
Define LCD_RS PORTA, RA2 / / Registrovať LCD-Vyberte kontrolnej línii
#
Define BUSYFLAG PORTB, 7 / / LCD 'Busy' vlajky výstup
#
Define INPUTBIT PORTA, RA3 / / Vstupné riadok
POČÍTADLO EQU 0C
CNT1 EQU 0D / / Counter premenných používaných pri výkone oneskorenie
CNT2 EQU 0E
CNT3 EQU 0F
LCD_TEMP EQU 10
//************************************************ **************
INIT: BSF STATUS, RP0 / / Memory banky 1
MOVLW 0x00 / / nastavenie portu B ako výstup
MOVWF TRISB / / výstup na LCD Dátové linky
MOVLW 0x08 / / Bit 3 Port A bit vstup a výstup do 0-2 LCD RS, RW, E
MOVWF TRIS
BCF STATUS, RP0 / / Prepnutie na pamäti bankový 0
CLRF PORTB / / Vymazanie výstupný port
CLRF PORTA / / Vymazanie Vstupné Port
NOP / / Vymazanie všetkých premenných
CLRF POČÍTADLO
CLRF LCD_TEMP
CLRF CNT1
CLRF CNT2
CLRF CNT3
CALL LCD_INIT / / inicializaci LCD displeja
CALL LCDCLR
//************************************************ **************
ŠTART: CALL CHECK
MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 1
XORLW 0x01
BTFSC ŠTATÚTU, Z
CALL DISPST1MOVF COUNTER, w
XORLW 0x02 / / Kontrola, ak vstupný kód je stanica 2
BTFSC ŠTATÚTU, Z
CALL DISPST2
MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 3
XORLW 0x03
BTFSC ŠTATÚTU, Z
CALL DISPST3MOVF COUNTER, w / / Kontrola, ak vstupný kód je stanica 4
XORLW 0x04
BTFSC ŠTATÚTU, Z
CALL DISPST4
Choďte do START
//************************************************ **************
/ / LCD zobrazením funkcií
DISPST4: CALL WAIT
MOVLW 0x50 / / Zobrazujem 'P'
CALL WR_DATA
CALL WAIT
MOVLW 0x61 / / Zobrazujem 'A'
CALL WR_DATA
CALL WAIT
MOVLW 0x72 / / Zobrazujem 'R'
CALL WR_DATA
CALL WAIT
MOVLW 0x6F / / Zobrazujem 'O'
CALL WR_DATA
CALL WAIT
MOVLW 0x77 / / Zobrazujem 'W'
CALL WR_DATA
CALL DEL2S
CALL LCDCLR
CALL DEL20MS
NÁVRATNOSŤ
//************************************************ **************
DISPST3: CALL WAIT
MOVLW 0x45 / / Zobrazujem 'E'
CALL WR_DATA
CALL WAIT
MOVLW 0x7C / / Zobrazujem 'L'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem 'S'
CALL WR_DATA
CALL WAIT
MOVLW 0x69 / / Zobrazujem 'I'
CALL WR_DATA
CALL WAIT
MOVLW 0x65 / / Zobrazujem 'E'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem 'S'
CALL WR_DATA
CALL DEL2S
CALL LCDCLR
CALL DEL20MS
NÁVRATNOSŤ
//************************************************ **************
DISPST2: CALL WAIT
MOVLW 0x56 / / Zobrazujem 'W'
CALL WR_DATA
CALL WAIT
MOVLW 0x61 / / Zobrazujem 'A'
CALL WR_DATA
CALL WAIT
MOVLW 0x73 / / Zobrazujem '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
NÁVRATNOSŤ
//************************************************ **************
DISPST1: CALL 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
NÁVRATNOSŤ
//************************************************ **************
/ / Funkcia, ktorá nastavuje LCD byť pripravený na príjem dát
WR_DATA: MOVWF LCD_TEMP / / znakov, ktoré majú byť odoslané do Z
CALL WAIT / /
Wait for LCD to byť pripravení
BCF LCD_RW / / Nastavenie LCD v režime čítania
BSF LCD_RS / / Nastavenie LCD dáta v režime
BSF LCD_E / / LCD Umožniť súlade VYSOKÝM
MOVF LCD_TEMP, w
MOVWF PORTB / / Odosielanie dát na LCD
BCF LCD_E / / LCD Umožniť súlade LOW
NÁVRATNOSŤ//************************************************ **************
CHECK: BTFSC INPUTBIT / / Kontrola vstupu, ak je tlačidlo stlačené
Choď CHECK
CALL DEL20MS
BTFSC INPUTBIT
Choď CHECK
INCF COUNTER, f / / Prírastok stanica protizáruku variabilný
MOVLW 0x00
MOVF COUNTER, w / / Presun hodnota premennej COUNTER
XORLW 0x05 / / Kontrola, ak hodnota POČÍTADLO sa rovná 5
BTFSC ŠTATÚTU, Z / / Z zástava bude nula, ak hodnota je 5 POČÍTADLO
CALL DOLE / / Znížiť hodnotu POČÍTADLO
NÁVRATNOSŤ
DOLE: CLRF POČÍTADLO / / Reštartujte uskutočnia staníc z 1
NÁVRATNOSŤ
//************************************************ **************
/ / 20-miliekvivalentoch sekúnd oneskorenie
DEL20MS: MOVLW 0x1A
MOVWF CNT2
LOOP1: MOVLW 0xFF
MOVWF CNT1
LOOP2: DECFSZ CNT1, f
Choď LOOP2
DECFSZ CNT2, f
Choď LOOP1
NÁVRATNOSŤ
//************************************************ **************
/ / LCD inicializáciu funkcie
LCD_INIT: CALL 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
NÁVRATNOSŤ
//************************************************ **************
/ / A funkcie pre monitorovanie, ak LCD busy flag je nastavený
WAIT: BTFSC BUSYFLAG
Choď WAIT
CALL DEL20MS
BTFSC BUSYFLAG
Choď WAIT
NÁVRATNOSŤ
//************************************************ **************
/ / 2 sekúnd
DEL2S: MOVLW 0x0A
MOVWF CNT3
PART1: MOVLW 0xFF
MOVWF CNT2
Part1: MOVLW 0xFF
MOVWF CNT1
PART1B: DECFSZ CNT1, f
Choď PART1B
NOP
PART2: DECFSZ CNT2, f
Choď part1
DECFSZ CNT3, f
Choď PART1
NÁVRATNOSŤ
//************************************************ **************
/ / A funkciu jasný displej
LCDCLR: MOVLW 0x01
CALL WR_DATA
NÁVRATNOSŤ
//************************************************ **************
ORG 0x2007 / /
Configuration Word
DW 0x3FF1
END
Naposledy upravil SUPER-EZEE dňa
16. mája 2009 21:54; upravený 1 čas celkom