A
Am_Da_One
Guest
i napisal kodo za 16f876A in simulirano z simuliator PIC in simuilated lep,,, ampak na strojno opremo LCD dokazuje le prazni bloki brez izhodnih podatkov, in tukaj je koda:OPOZORILO: Preveril sem tudi strojna oprema z druge strani, in da je pravilno.; LCD besedilo Demo -8 bit mode; Nigel Goodwin 2002
SEZNAM p = 16F876A; povedal monter kaj čip, ki jih uporabljamovključujejo "P16F876A.inc"; so privzete za čipcount EQU 0x20count1 EQU 0x21COUNTA EQU 0x22countb EQU 0x23tmp1 EQU 0x24tmp2 EQU 0x25templcd EQU 0x26templcd2 EQU 0x27
org 0x00noporg 0x05
InitialiseBCF STATUS, RP0; izberite banko 0clrf countclrf PORTAclrf PORTBclrf PORTC
SetPorts BSF STATUS, RP0; izberite banke 1movlw 0x00; storijo vse zatiči outputsmovwf TRISBmovwf TRISAmovwf TRISCBCF STATUS, RP0; izberite banko 0
Delay5 klic, počakajte, da LCD za poravnavo
klic LCD_Init; setup LCD
začetek clrf count; iz registra števec na ničMessagemovf count, w; dal števec vrednost v WBesedilo razpisa; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto NextMessageklic LCD_Charklic Delay5incf count, fgoto Message
NextMessage klic LCD_Line2, preselijo v 2. vrstica, prvi stolpec
clrf count; iz registra števec na ničMessage2movf count, w; dal števec vrednost v Wklic text2; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto EndMessageklic LCD_Charklic Delay5incf count, fgoto Message2
EndMessage
klic LCD_Line1Stop goto začetek; Subroutines in besedilo tabel
; LCD rutino
; Initialise LCDLCD_Initmovlw 0x38; Set 4 bit modeklic LCD_Cmd
movlw 0x1F; Set zaslonu premikaklic LCD_Cmd
movlw 0x06; Nastavitev prikaza značaja modeklic LCD_Cmd
movlw 0x08; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmd
klic LCD_Clr; jasen zaslon
retlw 0x00
; Ukaz iz rednegaLCD_Cmdmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB; BCF PORTB, 4; RS postavka 0; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBCF PORTC, 0; RS postavka 0klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_CharD addlw 0x30LCD_Charmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB, BSF PORTB, 4; RS postavka 1; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBSF PORTC, 0; RS postavka 1klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_Line1 movlw 0x80; preselijo v 1. vrstico, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line2 movlw 0xC0, preselijo v 2. vrstica, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line1W addlw 0x80, preselijo v 1. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_Line2W addlw 0xC0, preselijo v 2. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_CurOn movlw 0x0d ;Set display on/off and cursor command
klic LCD_Cmdretlw 0x00
LCD_CurOff movlw 0x0c; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmdretlw 0x00
LCD_Clr movlw 0x01; Clear zaslonuklic LCD_Cmdretlw 0x00
LCD_HEX movwf tmp1; Swapf tmp1, w; Andlw 0x0f; Klic HEX_Table; Klic LCD_Charmovf tmp1, w; Andlw 0x0fklic HEX_Tableklic LCD_Charretlw 0x00
Delay255movlw 0xFF; zamude 255 mSgoto d0
Delay100movlw d'100 '; zamude 100msgoto d0
Delay50
movlw d'50 '; zamudo 50msgoto d0
Delay20movlw d'20 '; zamudo 20msgoto d0
Delay5movlw 0x01; zamudo 5,000 ms (4 MHz ura)d0 movwf count1d1 movlw 0xC7; zamude 1msmovwf COUNTAmovlw 0x01movwf countbDelay_0decfsz COUNTA, fgoto $ 2decfsz countb, fgoto Delay_0
decfsz count1, fgoto d1retlw 0x00
Pulse_eBSF PORTC, 1nopBCF PORTC, 1retlw 0x00
; end of rutino LCD
HEX_Table ADDWF PCL, fRETLW 0x30RETLW 0x31RETLW 0x32RETLW 0x33RETLW 0x34RETLW 0x35RETLW 0x36RETLW 0x37RETLW 0x38RETLW 0x39RETLW 0x41RETLW 0x42RETLW 0x43RETLW 0x44RETLW 0x45RETLW 0x46
Besedilo addwf PCL, fretlw "H"retlw "e"retlw "l"retlw "l"retlw 'o'retlw 0x00
Text2 ADDWF PCL, fR RETLW 'E RETLW 'RETLW ""RETLW 'd'Y RETLW 'RETLW '. "RETLW '. "RETLW '. "RETLW 0x00
konec
SEZNAM p = 16F876A; povedal monter kaj čip, ki jih uporabljamovključujejo "P16F876A.inc"; so privzete za čipcount EQU 0x20count1 EQU 0x21COUNTA EQU 0x22countb EQU 0x23tmp1 EQU 0x24tmp2 EQU 0x25templcd EQU 0x26templcd2 EQU 0x27
org 0x00noporg 0x05
InitialiseBCF STATUS, RP0; izberite banko 0clrf countclrf PORTAclrf PORTBclrf PORTC
SetPorts BSF STATUS, RP0; izberite banke 1movlw 0x00; storijo vse zatiči outputsmovwf TRISBmovwf TRISAmovwf TRISCBCF STATUS, RP0; izberite banko 0
Delay5 klic, počakajte, da LCD za poravnavo
klic LCD_Init; setup LCD
začetek clrf count; iz registra števec na ničMessagemovf count, w; dal števec vrednost v WBesedilo razpisa; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto NextMessageklic LCD_Charklic Delay5incf count, fgoto Message
NextMessage klic LCD_Line2, preselijo v 2. vrstica, prvi stolpec
clrf count; iz registra števec na ničMessage2movf count, w; dal števec vrednost v Wklic text2; dobili znak od besedila, preglednicexorlw 0x00, je nič?btfsc STATUS, Zgoto EndMessageklic LCD_Charklic Delay5incf count, fgoto Message2
EndMessage
klic LCD_Line1Stop goto začetek; Subroutines in besedilo tabel
; LCD rutino
; Initialise LCDLCD_Initmovlw 0x38; Set 4 bit modeklic LCD_Cmd
movlw 0x1F; Set zaslonu premikaklic LCD_Cmd
movlw 0x06; Nastavitev prikaza značaja modeklic LCD_Cmd
movlw 0x08; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmd
klic LCD_Clr; jasen zaslon
retlw 0x00
; Ukaz iz rednegaLCD_Cmdmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB; BCF PORTB, 4; RS postavka 0; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBCF PORTC, 0; RS postavka 0klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_CharD addlw 0x30LCD_Charmovwf templcd; Swapf templcd, w; pošljite zgornji Košček; Andlw 0x0f, jasne zgornje 4 bits of W; Movwf PORTB, BSF PORTB, 4; RS postavka 1; Pozivajo Pulse_e, Pulse E Vroče visoke
movf templcd, w; pošljete spodnji Košček; Andlw 0x0f, jasne zgornje 4 bits of Wmovwf PORTBBSF PORTC, 0; RS postavka 1klic Pulse_e; Pulse E Vroče visokeklic Delay5retlw 0x00
LCD_Line1 movlw 0x80; preselijo v 1. vrstico, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line2 movlw 0xC0, preselijo v 2. vrstica, prvi stolpecklic LCD_Cmdretlw 0x00
LCD_Line1W addlw 0x80, preselijo v 1. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_Line2W addlw 0xC0, preselijo v 2. vrstica, stolpec Wklic LCD_Cmdretlw 0x00
LCD_CurOn movlw 0x0d ;Set display on/off and cursor command
klic LCD_Cmdretlw 0x00
LCD_CurOff movlw 0x0c; Nastavite prikaz za vklop / izklop in kazalka ukazklic LCD_Cmdretlw 0x00
LCD_Clr movlw 0x01; Clear zaslonuklic LCD_Cmdretlw 0x00
LCD_HEX movwf tmp1; Swapf tmp1, w; Andlw 0x0f; Klic HEX_Table; Klic LCD_Charmovf tmp1, w; Andlw 0x0fklic HEX_Tableklic LCD_Charretlw 0x00
Delay255movlw 0xFF; zamude 255 mSgoto d0
Delay100movlw d'100 '; zamude 100msgoto d0
Delay50
movlw d'50 '; zamudo 50msgoto d0
Delay20movlw d'20 '; zamudo 20msgoto d0
Delay5movlw 0x01; zamudo 5,000 ms (4 MHz ura)d0 movwf count1d1 movlw 0xC7; zamude 1msmovwf COUNTAmovlw 0x01movwf countbDelay_0decfsz COUNTA, fgoto $ 2decfsz countb, fgoto Delay_0
decfsz count1, fgoto d1retlw 0x00
Pulse_eBSF PORTC, 1nopBCF PORTC, 1retlw 0x00
; end of rutino LCD
HEX_Table ADDWF PCL, fRETLW 0x30RETLW 0x31RETLW 0x32RETLW 0x33RETLW 0x34RETLW 0x35RETLW 0x36RETLW 0x37RETLW 0x38RETLW 0x39RETLW 0x41RETLW 0x42RETLW 0x43RETLW 0x44RETLW 0x45RETLW 0x46
Besedilo addwf PCL, fretlw "H"retlw "e"retlw "l"retlw "l"retlw 'o'retlw 0x00
Text2 ADDWF PCL, fR RETLW 'E RETLW 'RETLW ""RETLW 'd'Y RETLW 'RETLW '. "RETLW '. "RETLW '. "RETLW 0x00
konec