📄 p16lcd.lst
字号:
MPASM 4.01 Released P16LCD.ASM 5-27-2005 10:17:24 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;************************************************************************
00002 ;* Microchip Technology Inc. 2002 *
00003 ;* Assembler version: 2.0000 *
00004 ;* Filename: *
00005 ;* lcd16.asm *
00006 ;************************************************************************
00007
00008 list p=16F877a
00009 #include P16F877a.inc
00001 LIST
00002 ; P16F877A.INC Standard Header File, Version 1.00 Microchip Technology, Inc.
00398 LIST
00010
00011
00012 #define LCD_D4 PORTD, 0 ; LCD data bits
00013 #define LCD_D5 PORTD, 1
00014 #define LCD_D6 PORTD, 2
00015 #define LCD_D7 PORTD, 3
00016
00017 #define LCD_D4_DIR TRISD, 0 ; LCD data bits
00018 #define LCD_D5_DIR TRISD, 1
00019 #define LCD_D6_DIR TRISD, 2
00020 #define LCD_D7_DIR TRISD, 3
00021
00022 #define LCD_E PORTA, 1 ; LCD E clock
00023 #define LCD_RW PORTA, 2 ; LCD read/write line
00024 #define LCD_RS PORTA, 3 ; LCD register select line
00025
00026 #define LCD_E_DIR TRISA, 1
00027 #define LCD_RW_DIR TRISA, 2
00028 #define LCD_RS_DIR TRISA, 3
00029
00030 #define LCD_INS 0
00031 #define LCD_DATA 1
00032
00033 D_LCD_DATA UDATA 0x20
0020 00034 COUNTER res 1
0021 00035 delay res 1
0022 00036 temp_wr res 1
0023 00037 temp_rd res 1
00038
0000 00039 GLOBAL temp_wr
00040
00041 PROG1 CODE
00042
00043
00044 ;***************************************************************************
00045
0000 00046 LCDLine_1
0000 ???? ???? 00047 banksel temp_wr
0002 3080 00048 movlw 0x80
0003 00?? 00049 movwf temp_wr
0004 2??? 00050 call i_write
MPASM 4.01 Released P16LCD.ASM 5-27-2005 10:17:24 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0005 0008 00051 return
0000 00052 GLOBAL LCDLine_1
00053
0006 00054 LCDLine_2
0006 ???? ???? 00055 banksel temp_wr
0008 30C0 00056 movlw 0xC0
0009 00?? 00057 movwf temp_wr
000A 2??? 00058 call i_write
000B 0008 00059 return
0000 00060 GLOBAL LCDLine_2
00061
000C 00062 d_write ;write data
000C 2??? 00063 call LCDBusy
000D 1403 00064 bsf STATUS, C
000E 2??? 00065 call LCDWrite
000F 1283 1303 00066 banksel TXREG ;move data into TXREG
0011 0099 00067 movwf TXREG
0012 1683 1303 00068 banksel TXSTA
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0014 1C98 00069 btfss TXSTA,TRMT ;wait for data TX
0015 2??? 00070 goto $-1
0016 1283 1303 00071 banksel PORTA
0018 0008 00072 return
0000 00073 GLOBAL d_write
00074
0019 00075 i_write ;write instruction
0019 2??? 00076 call LCDBusy
001A 1003 00077 bcf STATUS, C
001B 2??? 00078 call LCDWrite
001C 0008 00079 return
0000 00080 GLOBAL i_write
00081
00082 rlcd macro MYREGISTER
00083 IF MYREGISTER == 1
00084 bsf STATUS, C
00085 call LCDRead
00086 ELSE
00087 bcf STATUS, C
00088 call LCDRead
00089 ENDIF
00090 endm
00091 ;****************************************************************************
00092
00093
00094
00095
00096 ; *******************************************************************
001D 00097 LCDInit
001D 0185 00098 clrf PORTA
00099
001E 1683 1303 00100 banksel TRISA ;configure control lines
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0020 1085 00101 bcf LCD_E_DIR
MPASM 4.01 Released P16LCD.ASM 5-27-2005 10:17:24 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0021 1105 00102 bcf LCD_RW_DIR
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0022 1185 00103 bcf LCD_RS_DIR
00104
0023 300E 00105 movlw b'00001110'
0024 1683 1303 00106 banksel ADCON1
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0026 009F 00107 movwf ADCON1
00108
0027 30FF 00109 movlw 0xff ; Wait ~15ms @ 20 MHz
0028 ???? ???? 00110 banksel COUNTER
002A 00?? 00111 movwf COUNTER
002B 30FF 00112 movlw 0xFF
002C ???? ???? 00113 banksel delay
002E 00?? 00114 movwf delay
002F 2??? 00115 call DelayXCycles
0030 0B?? 00116 decfsz COUNTER, F
0031 2??? 00117 goto $-3
00118
0032 3030 00119 movlw b'00110000' ;#1 Send control sequence
0033 00?? 00120 movwf temp_wr
0034 1003 00121 bcf STATUS,C
0035 2??? 00122 call LCDWriteNibble
00123
0036 30FF 00124 movlw 0xff ;Wait ~4ms @ 20 MHz
0037 00?? 00125 movwf COUNTER
0038 30FF 00126 movlw 0xFF
0039 00?? 00127 movwf delay
003A 2??? 00128 call DelayXCycles
003B 0B?? 00129 decfsz COUNTER, F
003C 2??? 00130 goto $-3
00131
003D 3030 00132 movlw b'00110000' ;#2 Send control sequence
003E 00?? 00133 movwf temp_wr
003F 1003 00134 bcf STATUS,C
0040 2??? 00135 call LCDWriteNibble
00136
0041 30FF 00137 movlw 0xFF ;Wait ~100us @ 20 MHz
0042 00?? 00138 movwf delay
0043 2??? 00139 call DelayXCycles
00140
0044 3018 00141 movlw b'0011000' ;#3 Send control sequence
0045 00?? 00142 movwf temp_wr
0046 1003 00143 bcf STATUS,C
0047 2??? 00144 call LCDWriteNibble
00145
00146 ;test delay
0048 30FF 00147 movlw 0xFF ;Wait ~100us @ 20 MHz
0049 00?? 00148 movwf delay
004A 2??? 00149 call DelayXCycles
00150
00151
MPASM 4.01 Released P16LCD.ASM 5-27-2005 10:17:24 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
004B 3020 00152 movlw b'00100000' ;#4 set 4-bit
004C 00?? 00153 movwf temp_wr
004D 1003 00154 bcf STATUS,C
004E 2??? 00155 call LCDWriteNibble
00156
004F 2??? 00157 call LCDBusy ;Busy?
00158
0050 3028 00159 movlw b'00101000' ;#5 Function set
0051 00?? 00160 movwf temp_wr
0052 2??? 00161 call i_write
00162
0053 300D 00163 movlw b'00001101' ;#6 Display = ON
0054 00?? 00164 movwf temp_wr
0055 2??? 00165 call i_write
00166
0056 3001 00167 movlw b'00000001' ;#7 Display Clear
0057 00?? 00168 movwf temp_wr
0058 2??? 00169 call i_write
00170
0059 3006 00171 movlw b'00000110' ;#8 Entry Mode
005A 00?? 00172 movwf temp_wr
005B 2??? 00173 call i_write
00174
005C 3080 00175 movlw b'10000000' ;DDRAM addresss 0000
005D 00?? 00176 movwf temp_wr
005E 2??? 00177 call i_write
00178
00179 ; movlw b'00000010' ;return home
00180 ; movwf temp_wr
00181 ; call i_write
00182
00183
005F 0008 00184 return
00185
0000 00186 GLOBAL LCDInit
00187 ; *******************************************************************
00188
00189
00190
00191
00192
00193
00194
00195
00196 ;****************************************************************************
00197 ; _ ______________________________
00198 ; RS _>--<______________________________
00199 ; _____
00200 ; RW \_____________________________
00201 ; __________________
00202 ; E ____________/ \___
00203 ; _____________ ______
00204 ; DB _____________>--------------<______
MPASM 4.01 Released P16LCD.ASM 5-27-2005 10:17:24 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00205 ;
0060 00206 LCDWriteNibble
0060 1C03 00207 btfss STATUS, C ; Set the register select
0061 1185 00208 bcf LCD_RS
0062 1803 00209 btfsc STATUS, C
0063 1585 00210 bsf LCD_RS
00211
0064 1105 00212 bcf LCD_RW ; Set write mode
00213
0065 1683 1303 00214 banksel TRISD
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0067 1008 00215 bcf LCD_D4_DIR ; Set data bits to outputs
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0068 1088 00216 bcf LCD_D5_DIR
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0069 1108 00217 bcf LCD_D6_DIR
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
006A 1188 00218 bcf LCD_D7_DIR
00219
006B 0000 00220 NOP ; Small delay
006C 0000 00221 NOP
00222
006D 1283 1303 00223 banksel PORTA
006F 1485 00224 bsf LCD_E ; Setup to clock data
00225
0070 1F80 00226 btfss temp_wr, 7 ; Set high nibble
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -