📄 gepe456.sdi
字号:
039C,1003,, BCF STATUS,C
039D,0CB1,, RRF LOBIT,F
039E,1C03,, BTFSS STATUS,C
039F,2B93,, GOTO WAVE4
03A0,0A84,, INCF FSR,F
03A1,17B1,, BSF LOBIT,7
03A2,1003,, BCF STATUS,C
03A3,2B93,, GOTO WAVE4
,,,
03A4,3034,WAVE5,WAVE5 MOVLW JOIN00
03A5,0084,, MOVWF FSR
03A6,01A2,, CLRF LOOPD
03A7,01A7,, CLRF ADRLSB ; set column
03A8,0823,, MOVF LOOPE,W ; set line
03A9,254F,, CALL GLINE ; multiply by line length
03AA,2432,, CALL SCREENADR ; set screen write address
,,,
03AB,30B0,, MOVLW AWRON ; AUTO WRITE ON
03AC,2514,, CALL SENDCMD ; send command
,,,
03AD,0800,WAVE6,WAVE6 MOVF INDF,W ; send data to LCD
03AE,2505,, CALL OUTDATA
03AF,0180,, CLRF INDF ; JKJ: removed ',F'
03B0,0A84,, INCF FSR,F
03B1,0AA2,, INCF LOOPD,F
03B2,1E22,, BTFSS LOOPD,4
03B3,2BAD,, GOTO WAVE6
03B4,082C,, MOVF COUNT,W
03B5,00AF,, MOVWF PEAKLO
03B6,30B2,, MOVLW AWROFF ; AUTO WRITE OFF
03B7,2514,, CALL SENDCMD ; send command
,,,
03B8,3004,WAVE7,WAVE7 MOVLW 4
03B9,07AC,, ADDWF COUNT,F ; add to volts loop
03BA,13AC,, BCF COUNT,7
03BB,1E05,, BTFSS PORTA,4 ; is switch on?
03BC,0008,, RETURN ; yes
03BD,0AA3,, INCF LOOPE,F ; no, inc line number
03BE,0823,, MOVF LOOPE,W
03BF,3A40,, XORLW 64
03C0,1D03,, BTFSS STATUS,Z ; has line limit been reached?
03C1,2B69,, GOTO WAVE1 ; no, so repeat for next line
03C2,03AC,, DECF COUNT,F ; introduce a displacement to uniform count
03C3,03AC,, DECF COUNT,F ; JKJ: taking off 4 makes it smoother.
03C4,03AC,, DECF COUNT,F ;
03C5,03AC,, DECF COUNT,F ;
03C6,2B68,, GOTO WAVE0 ; yes so start again
,,,
,,, ;******** DEMO 12 CREATE MOVING WAVEFORM - SCOPE STYLE *************
,,,
03C7,309C,DEMO12,DEMO12 MOVLW B'10011100' ; text on, graphic on, cursor & blink off
03C8,2514,, CALL SENDCMD ; send command
03C9,01AC,, CLRF COUNT ; volts simulator counter
03CA,01AF,, CLRF PEAKLO
03CB,01A2,, CLRF LOOPD
,,,
03CC,3080,SCOPE0,SCOPE0 MOVLW B'10000000' ; indicates which bit of column is affected
03CD,00B1,, MOVWF LOBIT
,,,
03CE,082C,SCOPE1,SCOPE1 MOVF COUNT,W ; copy loop val into PEAKHI
03CF,00B0,, MOVWF PEAKHI
03D0,022F,, SUBWF PEAKLO,W ; is PEAKHI > PEAKLO ? (subtract hi from lo)
03D1,1C03,, BTFSS STATUS,C ; is there a borrow?
03D2,2BD7,, GOTO SCOPE2 ; yes
,,,
03D3,082F,, MOVF PEAKLO,W ; no, so swap lo & hi
03D4,00B0,, MOVWF PEAKHI
03D5,082C,, MOVF COUNT,W
03D6,00AF,, MOVWF PEAKLO
,,,
03D7,3034,SCOPE2,SCOPE2 MOVLW JOIN00 ; set address for 1st affected temp store memory
03D8,072F,, ADDWF PEAKLO,W
03D9,0084,, MOVWF FSR
03DA,082F,, MOVF PEAKLO,W ; set loop to val of PEAKLO
03DB,00A3,, MOVWF LOOPE
03DC,0831,, MOVF LOBIT,W
03DD,0480,, IORWF INDF,F ; set new bit
,,,
03DE,0823,SCOPE3,SCOPE3 MOVF LOOPE,W ; is loop = peakhi?
03DF,0630,, XORWF PEAKHI,W
03E0,1903,, BTFSC STATUS,Z
03E1,2BE9,, GOTO SCOPE4 ; yes
03E2,0831,, MOVF LOBIT,W ; no
03E3,0480,, IORWF INDF,F ; set new bit
03E4,0AA3,, INCF LOOPE,F
03E5,1B23,, BTFSC LOOPE,6
03E6,2BE9,, GOTO SCOPE4
03E7,0A84,, INCF FSR,F
03E8,2BDE,, GOTO SCOPE3
,,,
03E9,082C,SCOPE4,SCOPE4 MOVF COUNT,W
03EA,00AF,, MOVWF PEAKLO
03EB,3002,, MOVLW 2
03EC,07AC,, ADDWF COUNT,F ; inc wavform counter
03ED,132C,, BCF COUNT,6 ; limit to 63 max
03EE,1003,, BCF STATUS,C
03EF,0CB1,, RRF LOBIT,F ; shift right bitting setting val
03F0,1C03,, BTFSS STATUS,C ; is CARRY set? (stating all 8 bits of col done)
03F1,2BCE,, GOTO SCOPE1 ; no
,,,
03F2,3034,, MOVLW JOIN00 ; send 8-bit column to screen
03F3,0084,, MOVWF FSR
03F4,3040,, MOVLW 64
03F5,00A3,, MOVWF LOOPE ; set loop val (number of columns)
03F6,3002,, MOVLW 2 ; set graphic base address ($02xx)
03F7,00A8,, MOVWF ADRMSB
03F8,0822,, MOVF LOOPD,W ; set column
03F9,00A7,, MOVWF ADRLSB
,,,
03FA,2432,SCOPE5,SCOPE5 CALL SCREENADR ; set screen write address
03FB,30B0,, MOVLW AWRON ; AUTO WRITE ON
03FC,2514,, CALL SENDCMD ; send command
03FD,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
03FE,0800,, MOVF INDF,W ; get val from STORE
03FF,2505,, CALL OUTDATA ;
0400,0180,, CLRF INDF ; JKJ: removed ',F'
0401,30B2,, MOVLW AWROFF ; AUTO WRITE OFF
0402,2514,, CALL SENDCMD ; send command
0403,0A84,, INCF FSR,F
0404,03A3,, DECF LOOPE,F
0405,1903,, BTFSC STATUS,Z
0406,2C0C,, GOTO SCOPE6
0407,082D,, MOVF COLUMN,W ; set for next line
0408,07A7,, ADDWF ADRLSB,F
0409,1803,, BTFSC STATUS,0 ; add CARRY (if any) to MSB
040A,0AA8,, INCF ADRMSB,F
040B,2BFA,, GOTO SCOPE5 ; repeat until done
,,,
040C,0AA2,SCOPE6,SCOPE6 INCF LOOPD,F ; inc to next column
040D,1E22,, BTFSS LOOPD,4
040E,2BCC,, GOTO SCOPE0
,,,
040F,01A2,, CLRF LOOPD ; start again at screen left
0410,3003,, MOVLW 3 ; add displacement factor to waveform loop
0411,022C,, SUBWF COUNT,W
,,,
0412,393F,, ANDLW B'00111111'
0413,00AC,, MOVWF COUNT
0414,1A05,, BTFSC PORTA,4 ; is switch on?
0415,2BCC,, GOTO SCOPE0 ; no, so repeat
0416,0008,, RETURN ; yes
,,,
,,, ;********** END DEMOS - START OF SUB-ROUTINES ***************
,,,
0417,,BITWRITE,BITWRITE ; ** WRITE SINGLE SINGLE BIT DATA ROUTINE **
0417,00AA,, MOVWF BITVAL
0418,2432,, CALL SCREENADR ; set screen write address
0419,082A,, MOVF BITVAL,W
041A,2514,, CALL SENDCMD ; send command
041B,0008,, RETURN ;
,,,
,,, ;.........
,,,
041C,,ONEWRITE,ONEWRITE ; ** WRITE SINGLE BYTE **
041C,00A9,, MOVWF ATTRIB ; temp store val brought in on W
041D,2432,, CALL SCREENADR ; set screen write address - vals preset at call
041E,30B0,, MOVLW AWRON ; AUTO WRITE ON
041F,2514,, CALL SENDCMD ; send command
0420,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
0421,0829,, MOVF ATTRIB,W
0422,2505,, CALL OUTDATA ;
0423,30B2,, MOVLW AWROFF ; AUTO WRITE OFF
0424,2514,, CALL SENDCMD ; send command
0425,0008,, RETURN
,,, ;............
,,,
0426,,AUTOWRITE,AUTOWRITE ; ** AUTO WRITE ROUTINE **
0426,00A5,, MOVWF TEMPA ; temp store value brought in on W
0427,24F6,, CALL CHECK8 ; read status for DA3 = 8
0428,0825,, MOVF TEMPA,W ; WRITE DATA
0429,2505,, CALL OUTDATA ;
042A,0008,, RETURN ;
,,,
,,, ;..............
,,,
042B,,CMDADR,CMDADR ; ** SET ADDRESS FOR COMMAND SENDING **
042B,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
042C,0827,, MOVF ADRLSB,W ; WRITE DATA D1
042D,2505,, CALL OUTDATA ;
042E,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
042F,0828,, MOVF ADRMSB,W ; WRITE DATA D2
0430,2505,, CALL OUTDATA ;
0431,0008,, RETURN ;
,,,
,,, ;.........
,,,
0432,,SCREENADR,SCREENADR ; ** SET ADDRESS FOR WRITE/READ TO/FROM SCREEN
0432,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
0433,0827,, MOVF ADRLSB,W ; WRITE ADDRESS LSB
0434,2505,, CALL OUTDATA ;
0435,24D5,, CALL CHECK3 ; read status for DA0/DA1 = 3
0436,0828,, MOVF ADRMSB,W ; WRITE ADDRESS MSB
0437,2505,, CALL OUTDATA ;
0438,3024,, MOVLW ADPSET ; SET ADDRESS POINTER
0439,2514,, CALL SENDCMD ; send command
043A,0008,, RETURN ;
,,,
,,, ;.............
,,,
043B,,TEXTHOME,TEXTHOME ; ** SET TEXT HOME ADDRESS **
043B,01A8,, CLRF ADRMSB ; TEXT HOME ADDRESS $0000
043C,01A7,, CLRF ADRLSB ;
043D,242B,, CALL CMDADR ; send command address
043E,3040,, MOVLW TXHOME ;
043F,2514,, CALL SENDCMD ; send command
0440,0008,, RETURN
,,,
,,, ;...........
,,,
0441,,GRAPHHOME,GRAPHHOME ; ** SET GRAPHIC HOME ADDRESS **
0441,3002,, MOVLW H'02' ; GRAPHIC HOME ADDRESS $0200
0442,00A8,, MOVWF ADRMSB
0443,01A7,, CLRF ADRLSB
0444,242B,, CALL CMDADR ; send command address
0445,3042,, MOVLW GRHOME ;
0446,2514,, CALL SENDCMD ; send command
0447,0008,, RETURN
,,,
,,, ;...........
,,,
0448,,TEXTAREA,TEXTAREA ; ** SET TEXT AREA **
0448,01A8,, CLRF ADRMSB ;
0449,082D,, MOVF COLUMN,W ; columns length
044A,00A7,, MOVWF ADRLSB ;
044B,242B,, CALL CMDADR ; send command address
044C,3041,, MOVLW TXAREA ; text area command
044D,2514,, CALL SENDCMD ; send command
044E,0008,, RETURN
,,,
,,, ;...........
,,,
044F,,GRAPHAREA,GRAPHAREA ; ** SET GRAPHIC AREA **
044F,01A8,, CLRF ADRMSB ;
0450,082D,, MOVF COLUMN,W ; columns length
0451,00A7,, MOVWF ADRLSB ;
0452,242B,, CALL CMDADR ; send command address
0453,3043,, MOVLW GRAREA ; graphic area command
0454,2514,, CALL SENDCMD ; send command
0455,0008,, RETURN
,,,
,,, ;...........
,,,
0456,,CSRADR,CSRADR ; ** SET CURSOR POSITION **
0456,242B,, CALL CMDADR ; send command address
0457,3021,, MOVLW CSRPOS ; cursor position command
0458,2514,, CALL SENDCMD ; send command
0459,0008,, RETURN
,,,
,,, ;...........
,,,
045A,,CSRTYP,CSRTYP ; ** SET CURSOR TYPE **
045A,30A7,, MOVLW B'10100111' ; 8-line
045B,2514,, CALL SENDCMD ; send command
045C,0008,, RETURN ; OPTIONS:
,,, ; %10100000 ; 1-line
,,, ; %10100001 ; 2-line
,,, ; %10100010 ; 3-line
,,, ; %10100011 ; 4-line
,,, ; %10100100 ; 5-line
,,, ; %10100101 ; 6-line
,,, ; %10100110 ; 7-line
,,, ; %10100111 ; 8-line
,,, ;...........
,,,
045D,,SETMODE,SETMODE ; ** SET MODE - MANY OPTIONS, see EPE text **
045D,3080,, MOVLW B'10000000' ; (OR mode, Internal CG mode)
,,, ; movlw %10000000 ; External CG RAM mode, OR
,,, ; movlw %10000011 ; External CG RAM mode, AND
,,, ; movlw %10000001 ; External CG RAM mode, XOR
,,, ; movlw %10000100 ; text attribute mode
045E,2514,, CALL SENDCMD ; send command
045F,0008,, RETURN
,,, ; %1000x000 ; OR mode
,,, ; %1000x001 ; XOR mode
,,, ; %1000x011 ; AND mode
,,, ; %1000x100 ; Text Attribute mode
,,, ; %10000xxx ; Internal CG ROM mode
,,, ; %10001xxx ; External CG RAM mode
,,,
,,, ;...........
,,,
0460,,SETOFFSET,SETOFFSET ; ** SET OFFSET REGISTER **
,,, ; setting OFFSET address at 2 selects
,,, ; CG RAM START ADDRESS = $1400 where
,,, ; $80 is character number of 1st graphic byte
,,, ; values below that call ASCII text characters
0460,01A8,, CLRF ADRMSB ;
0461,3002,, MOVLW 2 ;
0462,00A7,, MOVWF ADRLSB ;
0463,242B,, CALL CMDADR ; send command address
0464,3022,, MOVLW OFFSET ;
0465,2514,, CALL SENDCMD ; send command
0466,0008,, RETURN
,,,
,,, ;...........
,,,
0467,,SETDISPLAY,SETDISPLAY ; ** DISPLAY MODE ** SOME OPTIONS:
0467,3094,, MOVLW B'10010100' ; text on, graphic off, cursor & blink off
,,, ; movlw %10011100 ; text on, graphic on, cursor & blink off
,,, ; movlw %10011000 ; text off, graphic on, cursor & blink off
0468,2514,, CALL SENDCMD ; send command
0469,0008,, RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -