; Esempi di gestione di un display Powertip PC1602 con 68HC08AB0 ; tramite tavola di lock-up per messaggi display ; PORTD 0/7 = Data Input 0/7 display ; PORTF 2 = Display Select ; PORTF 3 = Display Command ; possono essere gestiti fino a 256 messaggi ; nell'esempio la prima riga del display è usata per dati di lavoro, la seconda per messaggi ;16 byte 0123456789abcdef ROMSET EQU $C000 ;INIZIO AREA MESSAGGI DI SETUP ORG ROMSET DB 'xxxxxxxxxxxxxxxx' ; $00 DB 'xxxxxxxxxxxxxxxx' ; $01 DB 'xxxxxxxxxxxxxxxx' ; $02 DB 'xxxxxxxxxxxxxxxx' ; $03 DB 'xxxxxxxxxxxxxxxx' ; $04 DB 'xxxxxxxxxxxxxxxx' ; $05 DB 'xxxxxxxxxxxxxxxx' ; $06 DB 'xxxxxxxxxxxxxxxx' ; $07 DB 'xxxxxxxxxxxxxxxx' ; $08 DB 'xxxxxxxxxxxxxxxx' ; $09 DB 'xxxxxxxxxxxxxxxx' ; $0A DB 'xxxxxxxxxxxxxxxx' ; $0B DB 'xxxxxxxxxxxxxxxx' ; $0C DB 'xxxxxxxxxxxxxxxx' ; $0D DB 'xxxxxxxxxxxxxxxx' ; $0E DB 'xxxxxxxxxxxxxxxx' ; $0F SPFLAG EQU $50 ;Flag opzione ON/OFFsu display ; Bit0 = Set point 1 ; Bit1 = Set point 2 ; ; PRESET PER DISPLAY LCD TIPO POWERTIP PC1602 MOV #$3C,COMMAND ;FUNCTION SET JSR LCDCOM MOV #$0C,COMMAND ;DISPLAY ON JSR LCDCOM MOV #$1C,COMMAND ;INCREMENTO CURSORE JSR LCDCOM MOV #$01,COMMAND ;CLEAR JSR LCDCOM MOV #$02,COMMAND ;HOME JSR LCDCOM ************************************************************************* * SUB TRASFERIMENTO IN BUFFER 2ø RIGA DISPLAY DEL MESSAGGIO SELEZIONATO * * ATTRAVERSO LOC. TEXT * ************************************************************************* MESSAGE LDX TEXT LDA #$10 MUL STX BYTEH STA BYTEL LDA BYTEH ADD #$C0 STA BYTEH LDHX BYTEH LDA ,X STA BUFF AIX #1 LDA ,X STA BUFF+$01 AIX #1 LDA ,X STA BUFF+$02 AIX #1 LDA ,X STA BUFF+$03 AIX #1 LDA ,X STA BUFF+$04 AIX #1 LDA ,X STA BUFF+$05 AIX #1 LDA ,X STA BUFF+$06 AIX #1 LDA ,X STA BUFF+$07 AIX #1 LDA ,X STA BUFF+$08 AIX #1 LDA ,X STA BUFF+$09 AIX #1 LDA ,X STA BUFF+$0A AIX #1 LDA ,X STA BUFF+$0B AIX #1 LDA ,X STA BUFF+$0C AIX #1 LDA ,X STA BUFF+$0D AIX #1 LDA ,X STA BUFF+$0E AIX #1 LDA ,X STA BUFF+$0F RTS ********************************* * SUB SCRITTURA MODULO LCD * ********************************* ; la prima riga visualizza una serie di variabili con la forma KV=1.0__I=1.0E-1 LCDWRITE MOV #$02,COMMAND ;POSIZ. INIZIO SCRITTURA 1ø RIGA JSR LCDCOM MOV #'K',COMMAND JSR LCDDAT MOV #'V',COMMAND JSR LCDDAT MOV #'=',COMMAND JSR LCDDAT MOV VDEC,COMMAND ;la variabile contiene cod. ASCII JSR LCDDAT MOV #'.',COMMAND JSR LCDDAT MOV VUNI,COMMAND JSR LCDDAT MOV #' ',COMMAND ;Doppio Spazio JSR LCDDAT JSR LCDDAT MOV #'I',COMMAND JSR LCDDAT MOV #'=',COMMAND JSR LCDDAT LDA IDEC ;la variabile contiene il valore binario ADD #$30 STA COMMAND JSR LCDDAT MOV #'.',COMMAND JSR LCDDAT LDA IUNI ADD #$30 STA COMMAND JSR LCDDAT MOV #'E',COMMAND JSR LCDDAT MOV #'-',COMMAND JSR LCDDAT LDA IESP ADD #$30 STA COMMAND JSR LCDDAT MOV #$C0,COMMAND ;POSIZ. INIZIO 2ø RIGA JSR LCDCOM TST TEXT BEQ LCDSETP CLRX CLRH LCDWA LDA BUFF,X STA COMMAND JSR LCDDAT INCX CPX #$10 BNE LCDWA MOV CURSORE,COMMAND ;POSIZ. CURSORE 2ø RIGA JSR LCDCOM JMP LCDWE LCDSETP MOV #'S',COMMAND JSR LCDDAT MOV #'P',COMMAND ; JSR LCDDAT MOV #'1',COMMAND ; JSR LCDDAT MOV #'=',COMMAND ; JSR LCDDAT BRSET 0,SPFLAG,LCDWB MOV #'O',COMMAND ; SETP1= 0 JSR LCDDAT MOV #'F',COMMAND ; JSR LCDDAT MOV #'F',COMMAND ; JSR LCDDAT BRA LCDWC LCDWB MOV #' ',COMMAND ; SETP1= 1 JSR LCDDAT MOV #'O',COMMAND ; JSR LCDDAT MOV #'N',COMMAND ; JSR LCDDAT LCDWC MOV #' ',COMMAND ; SPAZIO JSR LCDDAT MOV #'S',COMMAND ; JSR LCDDAT MOV #'P',COMMAND ; JSR LCDDAT MOV #'2',COMMAND ; JSR LCDDAT MOV #'=',COMMAND ; JSR LCDDAT BRSET 1,SPFLAG,LCDWD MOV #'O',COMMAND ; SETP2= 0 JSR LCDDAT MOV #'F',COMMAND ; JSR LCDDAT MOV #'F',COMMAND ; JSR LCDDAT BRA LCDWE LCDWD MOV #' ',COMMAND ; SETP2= 1 JSR LCDDAT MOV #'O',COMMAND ; JSR LCDDAT MOV #'N',COMMAND ; JSR LCDDAT LCDWE RTS * SUB SCRITTURA COMANDO SU LCD DISPLAY ( COMANDO IN COMMAND ) * RICHIEDE RS ( DYCMD ) = L LCDCOM MOV COMMAND,PORTD BCLR 3,PORTF LDA #$FF ;RITARDO LCOMA DECA BNE LCOMA BSET 2,PORTF LDA #$FF ;RITARDO LCOMB DECA BNE LCOMB BCLR 2,PORTF LDA #$FF ;RITARDO LCOMC DECA BNE LCOMC CLR PORTD LDA #$FF STA $FFFF ; COP WATCH DOG RESET RTS * SUB SCRITTURA DATO SU LCD DISPLAY ( DATO IN COMMAND ) LCDDAT MOV COMMAND,PORTD BSET 3,PORTF ;RS LDA #$FF ;RITARDO LDATA DECA BNE LDATA BSET 2,PORTF LDA #$FF ;RITARDO LDATB DECA BNE LDATB BCLR 2,PORTF LDA #$FF ;RITARDO LDATC DECA BNE LDATC CLR PORTD LDA #$FF STA $FFFF ; COP WATCH DOG RESET RTS