URL
https://opencores.org/ocsvn/mcip_open/mcip_open/trunk
Subversion Repositories mcip_open
[/] [mcip_open/] [trunk/] [MCIPopen_XilinxISEproject/] [Program_Memory.vhd] - Rev 6
Go to most recent revision | Compare with Previous | Blame | View Log
-------------------------------------------------------------------------------- -- Company: Ferhat Abbas University - Algeria -- Engineer: Ibrahim MEZZAH -- Progect Supervisor: Dr H. Chemali -- Create Date: 07:59:40 05/24/05 -- Design Name: Program memory -- Module Name: Program_Memory - ROM -- Project Name: MCIP open -- Target Device: xc3s500e-4fg320 -- Tool versions: Xilinx ISE 9.1.03i -- Description: Contains the MCIP program. The instruction is encoded on 2 bytes. -- The size is generic (Rom_size), the max is 2MB. -- Revision: 07/07/2008 -- Revision 1 - Add description -- Additional Comments: -------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.NUMERIC_STD.all; entity Program_Memory is Generic (IAlength : integer := 14); -- Instruction Address Length -- min = 2, max = 21 Port ( Address : in std_logic_vector(IALength-1 downto 0); nreset : in std_logic; Q1 : in std_logic; Instruction : out std_logic_vector(15 downto 0)); end Program_Memory; architecture ROM of Program_Memory is constant Rom_size : integer := 2**(IALength); type Rom_Table is array(0 to (Rom_size-1)) of std_logic_vector(7 downto 0); constant ROM : Rom_Table := ( X"02",X"EF",X"00",X"F0",X"0F",X"0E",X"94",X"6E",X"8C",X"6A",X"1F",X"0E",X"95",X"6E",X"0F",X"0E", X"89",X"6A",X"92",X"6E",X"93",X"6A",X"30",X"0E",X"8B",X"6E",X"8C",X"8E",X"00",X"00",X"00",X"00", X"8C",X"9E",X"EB",X"EC",X"00",X"F0",X"EB",X"EC",X"00",X"F0",X"8C",X"8E",X"00",X"00",X"00",X"00", X"8C",X"9E",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"8C",X"8E",X"00",X"00",X"00",X"00", X"8C",X"9E",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"20",X"0E",X"8B",X"6E",X"8C",X"8E", X"00",X"00",X"00",X"00",X"8C",X"9E",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"28",X"0E", X"0D",X"6E",X"11",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"08",X"0E", X"0D",X"6E",X"11",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"0C",X"0E", X"0D",X"6E",X"11",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"06",X"0E", X"0D",X"6E",X"11",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"DA",X"EC",X"00",X"F0",X"01",X"0E", X"0D",X"6E",X"11",X"EC",X"01",X"F0",X"EB",X"EC",X"00",X"F0",X"EB",X"EC",X"00",X"F0",X"03",X"0E", X"0E",X"6E",X"5D",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"48",X"0E",X"0E",X"6E",X"36",X"EC", X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"65",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC", X"00",X"F0",X"6C",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"6C",X"0E", X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"6F",X"0E",X"0E",X"6E",X"36",X"EC", X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"20",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC", X"00",X"F0",X"4D",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"43",X"0E", X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"49",X"0E",X"0E",X"6E",X"36",X"EC", X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"50",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC", X"00",X"F0",X"21",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"53",X"0E", X"0E",X"6E",X"5D",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"3C",X"0E",X"0E",X"6E",X"36",X"EC", X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"3C",X"0E",X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC", X"00",X"F0",X"63",X"0E",X"0E",X"6E",X"5D",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"3C",X"0E", X"0E",X"6E",X"36",X"EC",X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"3C",X"0E",X"0E",X"6E",X"36",X"EC", X"01",X"F0",X"DA",X"EC",X"00",X"F0",X"22",X"0E",X"0C",X"6E",X"FE",X"EC",X"00",X"F0",X"0C",X"2E", X"FC",X"D7",X"80",X"0E",X"8A",X"6E",X"8A",X"46",X"18",X"0E",X"0D",X"6E",X"11",X"EC",X"01",X"F0", X"0F",X"0E",X"80",X"14",X"0C",X"6E",X"0C",X"2A",X"FE",X"EC",X"00",X"F0",X"0C",X"06",X"0C",X"66", X"FB",X"D7",X"F1",X"D7",X"D8",X"CF",X"81",X"F0",X"E8",X"CF",X"80",X"F0",X"E0",X"CF",X"82",X"F0", X"AC",X"0E",X"09",X"6E",X"09",X"3E",X"FE",X"D7",X"82",X"C0",X"E0",X"FF",X"80",X"C0",X"E8",X"FF", X"81",X"C0",X"D8",X"FF",X"12",X"00",X"D8",X"CF",X"84",X"F0",X"E8",X"CF",X"83",X"F0",X"E0",X"CF", X"85",X"F0",X"25",X"0E",X"0A",X"6E",X"DA",X"EC",X"00",X"F0",X"0A",X"2E",X"FC",X"D7",X"85",X"C0", X"E0",X"FF",X"83",X"C0",X"E8",X"FF",X"84",X"C0",X"D8",X"FF",X"12",X"00",X"D8",X"CF",X"87",X"F0", X"E8",X"CF",X"86",X"F0",X"E0",X"CF",X"88",X"F0",X"24",X"0E",X"0B",X"6E",X"EB",X"EC",X"00",X"F0", X"0B",X"2E",X"FC",X"D7",X"88",X"C0",X"E0",X"FF",X"86",X"C0",X"E8",X"FF",X"87",X"C0",X"D8",X"FF", X"12",X"00",X"D8",X"CF",X"8A",X"F0",X"E8",X"CF",X"89",X"F0",X"E0",X"CF",X"8B",X"F0",X"0D",X"C0", X"8B",X"FF",X"8C",X"8E",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8B",X"3A",X"00",X"00", X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", X"00",X"00",X"00",X"00",X"8C",X"8E",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8B",X"C0", X"E0",X"FF",X"89",X"C0",X"E8",X"FF",X"8A",X"C0",X"D8",X"FF",X"12",X"00",X"D8",X"CF",X"8A",X"F0", X"E8",X"CF",X"89",X"F0",X"E0",X"CF",X"8B",X"F0",X"0E",X"C0",X"8B",X"FF",X"8C",X"8C",X"8C",X"8E", X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8B",X"3A",X"00",X"00",X"00",X"00",X"00",X"00", X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", X"8C",X"8E",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8C",X"9C",X"8B",X"C0",X"E0",X"FF", X"89",X"C0",X"E8",X"FF",X"8A",X"C0",X"D8",X"FF",X"12",X"00",X"D8",X"CF",X"8A",X"F0",X"E8",X"CF", X"89",X"F0",X"E0",X"CF",X"8B",X"F0",X"80",X"0E",X"0E",X"12",X"0E",X"C0",X"8B",X"FF",X"8C",X"8E", X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8B",X"3A",X"00",X"00",X"00",X"00",X"00",X"00", X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", X"8C",X"8E",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"9E",X"8B",X"C0",X"E0",X"FF",X"89",X"C0", X"E8",X"FF",X"8A",X"C0",X"D8",X"FF",X"12",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", others => X"FF" ); -- teh original HEX file -------------------- --:1000000002EF00F00F0E946E8C6A1F0E956E0F0EAD --:10001000896A926E936A300E8B6E8C8E000000009F --:100020008C9EEBEC00F0EBEC00F08C8E00000000FE --:100030008C9EDAEC00F0DAEC00F08C8E0000000010 --:100040008C9EDAEC00F0DAEC00F0200E8B6E8C8ED9 --:10005000000000008C9EDAEC00F0DAEC00F0280ED4 --:100060000D6E11EC01F0DAEC00F0DAEC00F0080EA5 --:100070000D6E11EC01F0DAEC00F0DAEC00F00C0E91 --:100080000D6E11EC01F0DAEC00F0DAEC00F0060E87 --:100090000D6E11EC01F0DAEC00F0DAEC00F0010E7C --:1000A0000D6E11EC01F0EBEC00F0EBEC00F0030E48 --:1000B0000E6E5DEC01F0DAEC00F0480E0E6E36ECE0 --:1000C00001F0DAEC00F0650E0E6E36EC01F0DAECC1 --:1000D00000F06C0E0E6E36EC01F0DAEC00F06C0EF7 --:1000E0000E6E36EC01F0DAEC00F06F0E0E6E36ECB0 --:1000F00001F0DAEC00F0200E0E6E36EC01F0DAECD6 --:1001000000F04D0E0E6E36EC01F0DAEC00F0430E0E --:100110000E6E36EC01F0DAEC00F0490E0E6E36ECA5 --:1001200001F0DAEC00F0500E0E6E36EC01F0DAEC75 --:1001300000F0210E0E6E36EC01F0DAEC00F0530EFA --:100140000E6E5DEC01F0DAEC00F03C0E0E6E36EC5B --:1001500001F0DAEC00F03C0E0E6E36EC01F0DAEC59 --:1001600000F0630E0E6E5DEC01F0DAEC00F03C0E78 --:100170000E6E36EC01F0DAEC00F03C0E0E6E36EC52 --:1001800001F0DAEC00F0220E0C6EFEEC00F00C2E0A --:10019000FCD7800E8A6E8A46180E0D6E11EC01F0A7 --:1001A0000F0E80140C6E0C2AFEEC00F00C060C6690 --:1001B000FBD7F1D7D8CF81F0E8CF80F0E0CF82F045 --:1001C000AC0E096E093EFED782C0E0FF80C0E8FF9A --:1001D00081C0D8FF1200D8CF84F0E8CF83F0E0CF01 --:1001E00085F0250E0A6EDAEC00F00A2EFCD785C0E9 --:1001F000E0FF83C0E8FF84C0D8FF1200D8CF87F0AB --:10020000E8CF86F0E0CF88F0240E0B6EEBEC00F028 --:100210000B2EFCD788C0E0FF86C0E8FF87C0D8FF60 --:100220001200D8CF8AF0E8CF89F0E0CF8BF00DC074 --:100230008BFF8C8E0000000000008C9E8B3A00002B --:1002400000000000000000000000000000000000AE --:10025000000000008C8E0000000000008C9E8BC00F --:10026000E0FF89C0E8FF8AC0D8FF1200D8CF8AF02B --:10027000E8CF89F0E0CF8BF00EC08BFF8C8C8C8E9A --:100280000000000000008C9E8B3A0000000000007F --:10029000000000000000000000000000000000005E --:1002A0008C8E0000000000008C9E8C9C8BC0E0FFB8 --:1002B00089C0E8FF8AC0D8FF1200D8CF8AF0E8CF03 --:1002C00089F0E0CF8BF0800E0E120EC08BFF8C8E6B --:1002D0000000000000008C9E8B3A0000000000002F --:1002E000000000000000000000000000000000000E --:1002F0008C8E0000000000008C9E8BC0E0FF89C047 --:10030000E8FF8AC0D8FF1200FFFFFFFFFFFFFFFFDB ---end--------------------------------------- begin process(nreset, Q1) begin if nreset = '0' then Instruction <= (others => '0'); else if Q1'event and Q1 = '0' then Instruction <= ROM( CONV_INTEGER( Address(IALength-1 downto 0) + 1 ) ) & ROM( CONV_INTEGER( Address(IALength-1 downto 0) ) ); end if; end if; end process; end ROM; --/////////////////////////////////////////////////////////////////////////////// -- THE ORIGINAL PROGRAM, DEVELOPED ON MPLAP IDE v8.83 (ASM CODE) --;****************************************************************************** --; * --; Filename: Hi_MCIPopen.asm * --; Description: ASM program for MCIPopen implementation example * --; Date: 07/25/2015 * --; File Version: 1 * --; * --; Author: Ibrahim MEZZAH * --; Company: Ferhat Abbas University - Algeria * --; * --;****************************************************************************** --; * --; Files Required: P18F4410.INC * --; * --;****************************************************************************** -- -- LIST P=18F4410 ;directive to define processor -- #include <P18F4410.INC> ;processor specific variable definitions -- -- -- --; Oscillator Selection: -- CONFIG OSC = LP ;LP -- -- -- --; LCD defines ///////////////////////////////////////// --#define LCD_DATA_PRT 0xF8B ;/*PRTC*/ --#define LCD_DATA_PORT 0x8B --#define LCD_TRIS_DATA_PORT 0x94 --#define LCD_INST_PORT 0x8C ;/*PRTD*/ --#define LCD_TRIS_INST_PORT 0x95 -- --#define RW_PIN 5 ;/* PORT for RW */ --#define RS_PIN 6 ;/* PORT for RS */ --#define E_PIN 7 ;/* PORT for E */ -- --#define FOUR_BIT 0x28 ;0b00101000 --#define CLEAR 0x01 ;0b00000001 --#define CURSOR_HOME 0x02 ;0b00000010 --#define MODE_SET 0x06 ;0b00000110 --#define DISPLAY_ON_C 0x0e ;0b00001110 --#define DISPLAY_ON_B 0x0f ;0b00001111 --#define DISPLAY_ON 0x0c ;0b00001100 --#define DISPLAY_OFF 0x08 ;0b00001000 --#define SHIFT_D_R 0x1c ;0b00011100 --#define SHIFT_D_L 0x18 ;0b00011000 --#define SHIFT_C_R 0x14 ;0b00010100 --#define SHIFT_C_L 0x10 ;0b00010000 -- --#define access 0 -- -- CBLOCK 0x080 -- WREG_TEMP1 ;variable used for context saving -- STATUS_TEMP1 ;variable used for context saving -- BSR_TEMP1 ;variable used for context saving -- -- WREG_TEMP2 ;variable used for context saving -- STATUS_TEMP2 ;variable used for context saving -- BSR_TEMP2 ;variable used for context saving -- -- WREG_TEMP3 ;variable used for context saving -- STATUS_TEMP3 ;variable used for context saving -- BSR_TEMP3 ;variable used for context saving -- -- WREG_TEMP4 ;variable used for context saving -- STATUS_TEMP4 ;variable used for context saving -- BSR_TEMP4 ;variable used for context saving -- ENDC -- -- CBLOCK 0x009 ;variables in access RAM -- e1 -- e2 -- e3 -- e4 -- LCD_command -- LCD_data -- ENDC -- -- --;****************************************************************************** --;Reset vector --; This code will start executing when a reset occurs. -- -- ORG 0x0000 -- -- goto Main ;go to start of main code -- -- -- --Main: -- -- ;------------------------------------------------------------------------------ -- ; I/O ports configuration -- ;------------------------------------------------------------------------------ -- -- MOVLW 0x0f -- MOVWF LCD_TRIS_DATA_PORT,0 -- CLRF LCD_INST_PORT,0 -- MOVLW 0x1f -- MOVWF LCD_TRIS_INST_PORT,0 -- -- MOVLW 0x0f -- CLRF LATA -- MOVWF TRISA -- CLRF TRISB -- ;------------------------------------------------------------------------------ -- ; LCD Initialisation -- ;------------------------------------------------------------------------------ -- -- -- MOVLW 0x30 -- MOVWF LCD_DATA_PORT,0 -- BSF LCD_INST_PORT,E_PIN,0 -- NOP -- NOP -- BCF LCD_INST_PORT,E_PIN,0 -- -- CALL Delay1_6ms -- CALL Delay1_6ms -- -- BSF LCD_INST_PORT,E_PIN,0 -- NOP -- NOP -- BCF LCD_INST_PORT,E_PIN,0 -- -- CALL Delay42us -- CALL Delay42us -- -- BSF LCD_INST_PORT,E_PIN,0 -- NOP -- NOP -- BCF LCD_INST_PORT,E_PIN,0 -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW 0x20 -- MOVWF LCD_DATA_PORT,0 -- BSF LCD_INST_PORT,E_PIN,0 -- NOP -- NOP -- BCF LCD_INST_PORT,E_PIN,0 -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW FOUR_BIT -- MOVWF LCD_command,access -- CALL Command -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW DISPLAY_OFF -- MOVWF LCD_command,access -- CALL Command -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW DISPLAY_ON -- MOVWF LCD_command,access -- CALL Command -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW MODE_SET -- MOVWF LCD_command,access -- CALL Command -- -- CALL Delay42us -- CALL Delay42us -- -- MOVLW CLEAR -- MOVWF LCD_command,access -- CALL Command -- -- CALL Delay1_6ms -- CALL Delay1_6ms -- -- ;------------------------------------------------------------------------------ -- ; END LCD Initialisation -- ;------------------------------------------------------------------------------ -- -- ; Displaying "Hello MCIP!" -- MOVLW 0x03 -- MOVWF LCD_data,access -- CALL Set_address -- CALL Delay42us -- -- MOVLW 'H' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'e' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'l' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'l' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'o' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW ' ' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'M' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'C' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'I' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 'P' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW '!' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- -- ;-------------------- -- MOVLW 0x53 -- MOVWF LCD_data,access -- CALL Set_address -- CALL Delay42us -- -- MOVLW '<' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW '<' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW 0x63 -- MOVWF LCD_data,access -- CALL Set_address -- CALL Delay42us -- -- MOVLW '<' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- MOVLW '<' -- MOVWF LCD_data,access -- CALL Display -- CALL Delay42us -- -- -- ;---------------------- -- ; ~ 2second delay -- MOVLW 0x22 -- MOVWF e4,access -- --loop21: -- CALL Delay58ms -- DECFSZ e4,1,access -- BRA loop21 -- -- MOVLW 0x80 -- MOVWF LATB -- --looplooop: -- RLNCF LATB,1,0 -- -- MOVLW SHIFT_D_L -- MOVWF LCD_command,access -- CALL Command -- -- MOVLW 0x0f -- ANDWF PORTA,0,0 -- -- MOVWF e4,0 -- -- INCF e4,1,0 -- --loop_3x58ms: -- CALL Delay58ms -- ;CALL Delay58ms -- -- DECF e4,1,0 -- TSTFSZ e4,0 -- BRA loop_3x58ms -- BRA looplooop -- -- --; Fuctions: -- --;--------------------------------- --; Delay 42us ********************* --Delay42us: -- -- ;save working registers -- movff STATUS,STATUS_TEMP1 -- movff WREG,WREG_TEMP1 -- movff BSR,BSR_TEMP1 -- -- MOVLW 0xAC -- MOVWF e1,access -- --loop10: -- INCFSZ e1,1,access -- BRA loop10 -- -- ;restore working registers -- movff BSR_TEMP1,BSR -- movff WREG_TEMP1,WREG -- movff STATUS_TEMP1,STATUS -- -- RETURN --;******** end Delay 40us ********** --;---------------------------------- -- -- --;--------------------------------- --; Delay 1.6ms ******************** --Delay1_6ms: -- -- ;save working registers -- movff STATUS,STATUS_TEMP2 -- movff WREG,WREG_TEMP2 -- movff BSR,BSR_TEMP2 -- -- MOVLW 0x25 -- MOVWF e2,access -- --loop3: -- CALL Delay42us -- DECFSZ e2,1,access -- BRA loop3 -- -- ;restore working registers -- movff BSR_TEMP2,BSR -- movff WREG_TEMP2,WREG -- movff STATUS_TEMP2,STATUS -- -- RETURN --;******** end Delay1.6ms ********** --;---------------------------------- -- -- --;--------------------------------- --; Delay 58ms ********************* --Delay58ms: -- -- ;save working registers -- movff STATUS,STATUS_TEMP3 -- movff WREG,WREG_TEMP3 -- movff BSR,BSR_TEMP3 -- -- MOVLW 0x24 -- MOVWF e3,access -- --loop4: -- CALL Delay1_6ms -- DECFSZ e3,1,access -- BRA loop4 -- -- ;restore working registers -- movff BSR_TEMP3,BSR -- movff WREG_TEMP3,WREG -- movff STATUS_TEMP3,STATUS -- -- RETURN --;******** end Delay 58ms ********** --;---------------------------------- -- -- --;---------------------------------- --; send a command to the LCD ******* --Command: -- -- ;save working registers -- movff STATUS,STATUS_TEMP4 -- movff WREG,WREG_TEMP4 -- movff BSR,BSR_TEMP4 -- --MOVFF LCD_command,LCD_DATA_PRT --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 --SWAPF LCD_DATA_PORT,1,0 --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 -- -- ;restore working registers -- movff BSR_TEMP4,BSR -- movff WREG_TEMP4,WREG -- movff STATUS_TEMP4,STATUS -- --RETURN --;****** end send command ********** --;---------------------------------- -- -- --;---------------------------------- --; send data to the LCD ************ --Display: -- -- ;save working registers -- movff STATUS,STATUS_TEMP4 -- movff WREG,WREG_TEMP4 -- movff BSR,BSR_TEMP4 -- --MOVFF LCD_data,LCD_DATA_PRT --BSF LCD_INST_PORT,RS_PIN,0 --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 --SWAPF LCD_DATA_PORT,1,0 --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 --BCF LCD_INST_PORT,RS_PIN,0 -- -- ;restore working registers -- movff BSR_TEMP4,BSR -- movff WREG_TEMP4,WREG -- movff STATUS_TEMP4,STATUS -- --RETURN --;******** end send data *********** --;---------------------------------- -- --;---------------------------------- --; Set an address to the LCD ******* --Set_address: -- -- ;save working registers -- movff STATUS,STATUS_TEMP4 -- movff WREG,WREG_TEMP4 -- movff BSR,BSR_TEMP4 -- --MOVLW 0x80 --IORWF LCD_data,1,access -- --MOVFF LCD_data,LCD_DATA_PRT --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 --SWAPF LCD_DATA_PORT,1,0 --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --BSF LCD_INST_PORT,E_PIN,0 --NOP --NOP --NOP --BCF LCD_INST_PORT,E_PIN,0 -- -- ;restore working registers -- movff BSR_TEMP4,BSR -- movff WREG_TEMP4,WREG -- movff STATUS_TEMP4,STATUS -- --RETURN --;******** end set address ********* --;---------------------------------- -- -- --;****************************************************************************** --;End of program -- -- END
Go to most recent revision | Compare with Previous | Blame | View Log