A
Am_Da_One
Guest
i wrote kodu 16f876A un imitētas to ar PIC simuliator un simuilated fine,,, bet par aparatūras LCD tikai parāda tukšos blokus bez izejas dati un šeit ir kods
IEZĪME: i jāpārbauda arī aparatūras no citām novietnēm un tas ir pareizs.; LCD teksts demo -8 bit mode; Nigel Goodwin 2.002
LIST p = 16F876A; pateikt montētājs ko mikroshēmu mēs izmantojaminclude "P16F876A.inc", arī par mikroshēmu noklusējumuscount equ 0x20count1 equ 0x21COUNTA equ 0x22countb equ 0x23tmp1 equ 0x24tmp2 equ 0x25templcd equ 0x26templcd2 equ 0x27
org 0x00NOPorg 0x05
InicializētuBCF STATUS, RP0; izvēlieties banka 0clrf countclrf PORTAclrf PORTBclrf PORTC
SetPorts BSF STATUS, RP0; izvēlieties banka 1movlw 0x00; darīt visu pins outputsmovwf TRISBmovwf TRISAmovwf TRISCBCF STATUS, RP0; izvēlieties banka 0
zvans Delay5, tad pagaidīt LCD nokārtot
zvans LCD_Init; setup LCD
sākums clrf skaits; kas counter reģistrēties uz nulliMessagemovf skaits, w; izvirzīti counter vērtību Wzvans Text; iegūtu rakstzīmi no teksta tabulasxorlw 0x00, tā ir nulle?btfsc STATUSS, ZGoto NextMessagezvans LCD_Charzvans Delay5incf skaits, fGoto Message
NextMessage zvans LCD_Line2; pāriet uz 2 rindas pirmajā ailē
clrf skaits; kas counter reģistrēties uz nulliMessage2movf skaits, w; izvirzīti counter vērtību Wzvans teksts2; iegūtu rakstzīmi no teksta tabulasxorlw 0x00, tā ir nulle?btfsc STATUSS, ZGoto EndMessagezvans LCD_Charzvans Delay5incf skaits, fGoto Message2
EndMessage
zvans LCD_Line1Stop Goto sākums; Subroutines un tekstu tabulām
; LCD routines
; Inicializētu LCDLCD_Initmovlw 0x38, Set 4 bitu režīmāzvans LCD_Cmd
movlw 0x1f; Set displeja maiņazvans LCD_Cmd
movlw 0x06; Set displejs rakstzīmju režīmszvans LCD_Cmd
movlw 0x08; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmd
zvans LCD_Clr, skaidri displejs
retlw 0x00
; Komanda, kas regulāriLCD_Cmdmovwf templcd; Swapf templcd, w; sūtīt augšējais skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem W; Movwf PORTB; BCF PORTB, 4; RS līnija 0; Aicināt Pulse_e, Pulse E līnija augsts
movf templcd, w; sūtīt zemāks skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem Wmovwf PORTBBCF PORTC, 0; RS līnija 0zvans Pulse_e; Pulse E līnija augstszvans Delay5retlw 0x00
LCD_CharD addlw 0x30LCD_Charmovwf templcd; Swapf templcd, w; sūtīt augšējais skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem W; Movwf PORTB; BSF PORTB, 4; RS līnija 1; Aicināt Pulse_e, Pulse E līnija augsts
movf templcd, w; sūtīt zemāks skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem Wmovwf PORTBBSF PORTC, 0; RS līnija 1zvans Pulse_e; Pulse E līnija augstszvans Delay5retlw 0x00
LCD_Line1 movlw 0x80; pārvietoties līdz 1 rindas pirmajā ailēzvans LCD_Cmdretlw 0x00
LCD_Line2 movlw 0xc0; pāriet uz 2 rindas pirmajā ailēzvans LCD_Cmdretlw 0x00
LCD_Line1W addlw 0x80; pārvietoties līdz 1 rinda, kolonna Wzvans LCD_Cmdretlw 0x00
LCD_Line2W addlw 0xc0; pāriet uz 2 rinda, kolonna Wzvans LCD_Cmdretlw 0x00
LCD_CurOn movlw 0x0d; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmdretlw 0x00
LCD_CurOff movlw 0x0c; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmdretlw 0x00
LCD_Clr movlw 0x01; Clear displejszvans LCD_Cmdretlw 0x00
LCD_HEX movwf tmp1; Swapf tmp1, w; Andlw 0x0f; Aicināt HEX_Table; Aicināt LCD_Charmovf tmp1, w; Andlw 0x0fzvans HEX_Tablezvans LCD_Charretlw 0x00
Delay255movlw 0xff; kavēšanās 255 mSGoto d0
Delay100movlw d'100 '; kavēšanās 100msGoto d0
Delay50
movlw d'50 "kavēšanās 50msGoto d0
Delay20movlw d'20 "; kavēšanās 20mSGoto d0
Delay5movlw 0x01; kavēšanās 5,000 ms (4 MHz clock)d0 movwf count1d1 movlw 0xC7; kavēšanās 1msmovwf COUNTAmovlw 0x01movwf countbDelay_0decfsz COUNTA, fGoto $ 2decfsz countb, fGoto Delay_0
decfsz count1, fGoto d1retlw 0x00
Pulse_eBSF PORTC, 1NOPBCF PORTC, 1retlw 0x00
; beigās LCD routines
HEX_Table ADDWF PCL, fRETLW 0x30RETLW 0x31RETLW 0x32RETLW 0x33RETLW 0x34RETLW 0x35RETLW 0x36RETLW 0x37RETLW 0x38RETLW 0x39RETLW 0x41RETLW 0x42RETLW 0x43RETLW 0x44RETLW 0x45RETLW 0x46
Teksts addwf PCL, fretlw "H"retlw "e"retlw "l"retlw "l"retlw "o"retlw 0x00
Teksts2 ADDWF PCL, fRETLW "R"RETLW "e"RETLW ""RETLW "d"RETLW "y"RETLW "."RETLW "."RETLW "."RETLW 0x00
beigas
LIST p = 16F876A; pateikt montētājs ko mikroshēmu mēs izmantojaminclude "P16F876A.inc", arī par mikroshēmu noklusējumuscount equ 0x20count1 equ 0x21COUNTA equ 0x22countb equ 0x23tmp1 equ 0x24tmp2 equ 0x25templcd equ 0x26templcd2 equ 0x27
org 0x00NOPorg 0x05
InicializētuBCF STATUS, RP0; izvēlieties banka 0clrf countclrf PORTAclrf PORTBclrf PORTC
SetPorts BSF STATUS, RP0; izvēlieties banka 1movlw 0x00; darīt visu pins outputsmovwf TRISBmovwf TRISAmovwf TRISCBCF STATUS, RP0; izvēlieties banka 0
zvans Delay5, tad pagaidīt LCD nokārtot
zvans LCD_Init; setup LCD
sākums clrf skaits; kas counter reģistrēties uz nulliMessagemovf skaits, w; izvirzīti counter vērtību Wzvans Text; iegūtu rakstzīmi no teksta tabulasxorlw 0x00, tā ir nulle?btfsc STATUSS, ZGoto NextMessagezvans LCD_Charzvans Delay5incf skaits, fGoto Message
NextMessage zvans LCD_Line2; pāriet uz 2 rindas pirmajā ailē
clrf skaits; kas counter reģistrēties uz nulliMessage2movf skaits, w; izvirzīti counter vērtību Wzvans teksts2; iegūtu rakstzīmi no teksta tabulasxorlw 0x00, tā ir nulle?btfsc STATUSS, ZGoto EndMessagezvans LCD_Charzvans Delay5incf skaits, fGoto Message2
EndMessage
zvans LCD_Line1Stop Goto sākums; Subroutines un tekstu tabulām
; LCD routines
; Inicializētu LCDLCD_Initmovlw 0x38, Set 4 bitu režīmāzvans LCD_Cmd
movlw 0x1f; Set displeja maiņazvans LCD_Cmd
movlw 0x06; Set displejs rakstzīmju režīmszvans LCD_Cmd
movlw 0x08; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmd
zvans LCD_Clr, skaidri displejs
retlw 0x00
; Komanda, kas regulāriLCD_Cmdmovwf templcd; Swapf templcd, w; sūtīt augšējais skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem W; Movwf PORTB; BCF PORTB, 4; RS līnija 0; Aicināt Pulse_e, Pulse E līnija augsts
movf templcd, w; sūtīt zemāks skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem Wmovwf PORTBBCF PORTC, 0; RS līnija 0zvans Pulse_e; Pulse E līnija augstszvans Delay5retlw 0x00
LCD_CharD addlw 0x30LCD_Charmovwf templcd; Swapf templcd, w; sūtīt augšējais skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem W; Movwf PORTB; BSF PORTB, 4; RS līnija 1; Aicināt Pulse_e, Pulse E līnija augsts
movf templcd, w; sūtīt zemāks skrubināt; Andlw 0x0f, skaidri augšējo 4 bitiem Wmovwf PORTBBSF PORTC, 0; RS līnija 1zvans Pulse_e; Pulse E līnija augstszvans Delay5retlw 0x00
LCD_Line1 movlw 0x80; pārvietoties līdz 1 rindas pirmajā ailēzvans LCD_Cmdretlw 0x00
LCD_Line2 movlw 0xc0; pāriet uz 2 rindas pirmajā ailēzvans LCD_Cmdretlw 0x00
LCD_Line1W addlw 0x80; pārvietoties līdz 1 rinda, kolonna Wzvans LCD_Cmdretlw 0x00
LCD_Line2W addlw 0xc0; pāriet uz 2 rinda, kolonna Wzvans LCD_Cmdretlw 0x00
LCD_CurOn movlw 0x0d; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmdretlw 0x00
LCD_CurOff movlw 0x0c; Set displeja ieslēgšana / izslēgšana un kursors komandazvans LCD_Cmdretlw 0x00
LCD_Clr movlw 0x01; Clear displejszvans LCD_Cmdretlw 0x00
LCD_HEX movwf tmp1; Swapf tmp1, w; Andlw 0x0f; Aicināt HEX_Table; Aicināt LCD_Charmovf tmp1, w; Andlw 0x0fzvans HEX_Tablezvans LCD_Charretlw 0x00
Delay255movlw 0xff; kavēšanās 255 mSGoto d0
Delay100movlw d'100 '; kavēšanās 100msGoto d0
Delay50
movlw d'50 "kavēšanās 50msGoto d0
Delay20movlw d'20 "; kavēšanās 20mSGoto d0
Delay5movlw 0x01; kavēšanās 5,000 ms (4 MHz clock)d0 movwf count1d1 movlw 0xC7; kavēšanās 1msmovwf COUNTAmovlw 0x01movwf countbDelay_0decfsz COUNTA, fGoto $ 2decfsz countb, fGoto Delay_0
decfsz count1, fGoto d1retlw 0x00
Pulse_eBSF PORTC, 1NOPBCF PORTC, 1retlw 0x00
; beigās LCD routines
HEX_Table ADDWF PCL, fRETLW 0x30RETLW 0x31RETLW 0x32RETLW 0x33RETLW 0x34RETLW 0x35RETLW 0x36RETLW 0x37RETLW 0x38RETLW 0x39RETLW 0x41RETLW 0x42RETLW 0x43RETLW 0x44RETLW 0x45RETLW 0x46
Teksts addwf PCL, fretlw "H"retlw "e"retlw "l"retlw "l"retlw "o"retlw 0x00
Teksts2 ADDWF PCL, fRETLW "R"RETLW "e"RETLW ""RETLW "d"RETLW "y"RETLW "."RETLW "."RETLW "."RETLW 0x00
beigas