;************************** ; GEN_CW.ASM ; IT9DPX #135 - FRANCO ; stampa ed esegue gruppi di 5 ; al 4° gruppo attende il via ; 19.feb.2012 ;************************** PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" ERRORLEVEL -302 ERRORLEVEL -305 #define EN PORTA,0 #define STOP PORTA,1 #define OUT_CW PORTA,2 #define RS PORTA,3 ORG 0020H RITARDO RES 1 CARATTERE RES 1 ROTAZIONE RES 1 CONT_CARAT RES 1 REGTEMP RES 1 CASUALE RES 1 BISTABILE RES 1 RIGA RES 1 CONT_DISP RES 1 __CONFIG 3FF3H ORG 00H GOTO VIA LPORTB MOVF PORTB,W ANDLW 15 ;carica numero XORLW 15 ;di elementi ADDWF PCL GOTO LETT12 GOTO LETT123 GOTO LETT1234 GOTO LETT3 GOTO LETT4 GOTO NUMERI GOTO SEGNI GOTO LETTNUM GOTO ACCENTI GOTO ACCLETT ;-------------------------- INP12 ;caratteri da 1 e 2 elementi ADDWF PCL MOVLW "E" CALL TXDATO RETLW 01000000B ;E MOVLW "T" CALL TXDATO RETLW 11000000B ;T MOVLW "I" CALL TXDATO RETLW 00100000B ;I MOVLW "A" CALL TXDATO RETLW 01100000B ;A MOVLW "N" CALL TXDATO RETLW 10100000B ;N MOVLW "M" CALL TXDATO RETLW 11100000B ;M MOVLW "A" CALL TXDATO RETLW 01100000B ;A MOVLW "N" CALL TXDATO RETLW 10100000B ;N ;------------------------- INP3 ;caratteri di 3 elementi ADDWF PCL MOVLW "S" CALL TXDATO RETLW 00010000B ;S MOVLW "U" CALL TXDATO RETLW 00110000B ;U MOVLW "R" CALL TXDATO RETLW 01010000B ;R MOVLW "W" CALL TXDATO RETLW 01110000B ;W MOVLW "D" CALL TXDATO RETLW 10010000B ;D MOVLW "K" CALL TXDATO RETLW 10110000B ;K MOVLW "G" CALL TXDATO RETLW 11010000B ;G MOVLW "O" CALL TXDATO RETLW 11110000B ;O ;--------------------------- INP4 ;caratteri di 4 elementi ADDWF PCL MOVLW "H" CALL TXDATO RETLW 0X08 ;H MOVLW "V" CALL TXDATO RETLW 0X18 ;V MOVLW "F" CALL TXDATO RETLW 0X28 ;F MOVLW "L" CALL TXDATO RETLW 0X48 ;L MOVLW "P" CALL TXDATO RETLW 0X68 ;P MOVLW "J" CALL TXDATO RETLW 0X78 ;J MOVLW "B" CALL TXDATO RETLW 0X88 ;B MOVLW "X" CALL TXDATO RETLW 0X98 ;X MOVLW "C" CALL TXDATO RETLW 0XA8 ;C MOVLW "Y" CALL TXDATO RETLW 0XB8 ;Y MOVLW "Z" CALL TXDATO RETLW 0XC8 ;Z MOVLW "Q" CALL TXDATO RETLW 0XD8 ;Q MOVLW "H" CALL TXDATO RETLW 0X08 ;H MOVLW "V" CALL TXDATO RETLW 0X18 ;V MOVLW "F" CALL TXDATO RETLW 0X28 ;F MOVLW "L" CALL TXDATO RETLW 0X48 ;L ;------------------------------ INP5 ;caratteri di 5 elementi ADDWF PCL MOVLW "0" CALL TXDATO RETLW 0XFC ;0 MOVLW "1" CALL TXDATO RETLW 0X7C ;1 MOVLW "2" CALL TXDATO RETLW 0X3C ;2 MOVLW "3" CALL TXDATO RETLW 0X1C ;3 MOVLW "4" CALL TXDATO RETLW 0X0C ;4 MOVLW "5" CALL TXDATO RETLW 0X04 ;5 MOVLW "6" CALL TXDATO RETLW 0X84 ;6 MOVLW "7" CALL TXDATO RETLW 0XC4 ;7 MOVLW "8" CALL TXDATO RETLW 0XE4 ;8 MOVLW "9" CALL TXDATO RETLW 0XF4 ;9 MOVLW "0" CALL TXDATO RETLW 0XFC ;0 MOVLW "1" CALL TXDATO RETLW 0X7C ;1 MOVLW "2" CALL TXDATO RETLW 0X3C ;2 MOVLW "3" CALL TXDATO RETLW 0X1C ;3 MOVLW "4" CALL TXDATO RETLW 0X0C ;4 MOVLW "5" CALL TXDATO RETLW 0X04 ;5 ;------------------------- INP56 ;caratteri di 5 e 6 elementi ADDWF PCL MOVLW "." CALL TXDATO RETLW 01010110B ; . MOVLW "," CALL TXDATO RETLW 11001110B ; , MOVLW "'" CALL TXDATO RETLW 01111010B ; ' MOVLW "?" CALL TXDATO RETLW 00110010B ; ? MOVLW ":" CALL TXDATO RETLW 11100010B ; : MOVLW "/" CALL TXDATO RETLW 10010100B ; / MOVLW "(" CALL TXDATO RETLW 10110100B ; ( MOVLW ")" CALL TXDATO RETLW 10110110B ; ) MOVLW "-" CALL TXDATO RETLW 10001100B ; - MOVLW .4 CALL TXDATO RETLW 10101100B ; KA MOVLW "=" CALL TXDATO RETLW 10000110B ; = MOVLW .1 CALL TXDATO RETLW 00010100B ; VE MOVLW .2 CALL TXDATO RETLW 01000100B ; AS MOVLW 0x22 CALL TXDATO RETLW 01001010B ; " MOVLW .3 CALL TXDATO RETLW 01010100B ; AR MOVLW .0 CALL TXDATO RETLW 00010110B ; VA ;------------------------ ACCENT ;caratteri di 5 e 4 elementi ADDWF PCL MOVLW "a" CALL TXDATO RETLW 01101100B ;à MOVLW "e" CALL TXDATO RETLW 00100100B ;è MOVLW "o" CALL TXDATO RETLW 11101000B ;ò MOVLW "u" CALL TXDATO RETLW 00111000B ;ù ;-------------------------- LETT1234 MOVF TMR0,W ANDLW 3 ADDWF PCL GOTO LETT12 GOTO LETT12 GOTO LETT3 GOTO LETT4 ;-------------------------- ACCENTI CALL CASO ANDLW 3 CALL PER_TRE CALL ACCENT GOTO RIT5 ;-------------------------- SEGNI CALL CASO ANDLW 15 CALL PER_TRE CALL INP56 GOTO RIT5 ;-------------------------------- LETTNUM BTFSC TMR0,3 GOTO LETT1234 GOTO NUMERI ;-------------------------- NUMERI CALL CASO ANDLW 15 CALL PER_TRE CALL INP5 GOTO RIT5 ;-------------------------- LETT4 CALL CASO ANDLW 15 CALL PER_TRE CALL INP4 GOTO RIT5 ;------------------------- LETT3 CALL CASO ANDLW 7 CALL PER_TRE CALL INP3 GOTO RIT5 ;-------------------------- LETT12 CALL CASO ANDLW 7 CALL PER_TRE CALL INP12 GOTO RIT5 ;----------------------- LETT123 BTFSC TMR0,3 GOTO LETT12 GOTO LETT3 ;----------------------- ACCLETT BTFSC TMR0,3 GOTO LETT1234 GOTO ACCENTI ;-------------------------- CASO INCF BISTABILE BTFSC BISTABILE,0 GOTO CASO2 ;casuale2 MOVF TMR0,W ;casuale1 MOVWF CASUALE RETURN CASO2 SWAPF CASUALE,W RETURN V9 CALL V3 CALL SPAZIOG CALL V3 CALL SPAZIOG CALL V3 CALL SPAZIOG RETURN V3 CALL V1 CALL V1 CALL V1 RETURN V1 MOVLW 00011000B ;lettara V CALL RIT5 RETURN ;--------------------------- PER_TRE MOVWF ROTAZIONE BCF STATUS,C RLF ROTAZIONE,F ; x2 ADDWF ROTAZIONE,W ; +1 =*3 RETURN ;--------------------------- ;--------------------------- ;--------------------------- INIZIAL movlw .50 ;Wait 30 ms a 20 Khz CALL TEMPI MOVLW 30H ;Set LCD command mode MOVWF PORTB ;Send a reset sequence to LCD bsf EN ;Enables LCD movlw .8 ;Wait 5 ms a 20 Khz CALL TEMPI bcf EN ;Disables LCD movlw .1 ;Wait 1ms a 20 Khz call TEMPI CALL CARICA CALL CARICA MOVLW 20H ;Set LCD command mode MOVWF PORTB CALL CARICA movlw 28H ;Set 4 bit TX, 2 RIGHE call TXCMD movlw 06H ;Entry mode set, increment, no shift call TXCMD movlw 0FH ;Display ON, Curson ON, Blink ON call TXCMD movlw 01H ;Clear display call TXCMD movlw .2 ;Wait 2ms a 20 Khz call TEMPI ;............................ TX_DPX MOVLW H'C1' ;DD RAM 18° CIFRA CALL TXCMD MOVLW "F" call TXDATO MOVLW "r" call TXDATO MOVLW "a" call TXDATO MOVLW "n" call TXDATO MOVLW "c" call TXDATO MOVLW "o" call TXDATO MOVLW " " call TXDATO MOVLW " " call TXDATO MOVLW "I" call TXDATO MOVLW "T" call TXDATO MOVLW "9" call TXDATO MOVLW "D" call TXDATO MOVLW "P" call TXDATO MOVLW "X" call TXDATO ;... nuovi caratteri ----- ; inizializzo cgram chr n°0 riga n° 0 MOVLW .64 CALL TXCMD ; dati nuovo chr in cgram = VA MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .8 call TXDATO MOVLW .2 call TXDATO MOVLW .5 call TXDATO MOVLW .7 call TXDATO MOVLW .5 call TXDATO ; dati nuovo chr in cgram = VE MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .11 call TXDATO MOVLW .2 call TXDATO MOVLW .3 call TXDATO MOVLW .2 call TXDATO MOVLW .3 call TXDATO ; dati nuovo chr in cgram = AS MOVLW .8 call TXDATO MOVLW .20 call TXDATO MOVLW .28 call TXDATO MOVLW .20 call TXDATO MOVLW .3 call TXDATO MOVLW .4 call TXDATO MOVLW .2 call TXDATO MOVLW .12 call TXDATO ; dati nuovo chr in cgram = AR MOVLW .8 call TXDATO MOVLW .20 call TXDATO MOVLW .28 call TXDATO MOVLW .20 call TXDATO MOVLW .7 call TXDATO MOVLW .5 call TXDATO MOVLW .6 call TXDATO MOVLW .5 call TXDATO ; dati nuovo chr in cgram = KA MOVLW .20 call TXDATO MOVLW .24 call TXDATO MOVLW .20 call TXDATO MOVLW .0 call TXDATO MOVLW .2 call TXDATO MOVLW .5 call TXDATO MOVLW .7 call TXDATO MOVLW .5 call TXDATO ;------------------ CALL PAUSA CALL PAUSA return ;...................... TXNUM ADDLW 30H TXDATO bsf RS call TXBYTE return TXCMD bcf RS call TXBYTE return TXBYTE movwf REGTEMP ;Save value to send MOVLW H'0F' ;tx 4 bits alti ANDWF PORTB,F MOVFW REGTEMP ANDLW H'F0' IORWF PORTB,F CALL CARICA MOVLW H'0F' ;tx 4 bits bassi ANDWF PORTB,F SWAPF REGTEMP,W ANDLW H'F0' IORWF PORTB,F CARICA bsf EN ;Enables LCD movlw .1 ;Wait 1ms a 20 Khz call TEMPI bcf EN ;Disables LCD movlw .1 ;Wait 1ms a 20 Khz call TEMPI return ;............................ PAUSA movlw .255 ;Wait 150 ms a 20 Khz call TEMPI movlw .255 ;Wait 150 ms a 20 Khz call TEMPI movlw .255 ;Wait 150 ms a 20 Khz call TEMPI RETURN ;----------------------------- TEMPI movwf RITARDO RIPETI decfsz RITARDO goto RIPETI return ;------------------------- ;-------------------------- VIA BSF STATUS,RP0 MOVLW 0X28 MOVWF OPTION_REG MOVLW 00010010B MOVWF TRISA MOVLW 15 ;ingressi contraves MOVWF TRISB BCF STATUS,RP0 CLRF PORTA CLRF CONT_CARAT ;max 5 caratteri CLRF CONT_DISP CALL INIZIAL ;LCD MOVLW H'80' ;DD RAM 1° CIFRA MOVWF RIGA CALL TXCMD CALL V9 ;tx gruppi VVV GENERA INCF CONT_CARAT,F MOVF CONT_CARAT,W XORLW 6 ;max 5 caratteri BTFSC STATUS,Z GOTO SPAZIOR CALL LPORTB GOTO GENERA SPAZIOR ;spazio tra gruppi MOVLW " " CALL TXDATO INCF CONT_DISP MOVLW .2 XORWF CONT_DISP,W BTFSC STATUS,Z CALL SEC_RIGA BTFSC CONT_DISP,2 CALL PRI_RIGA CALL SPAZIOG GOTO GENERA SEC_RIGA MOVLW 0xC0 CALL TXCMD RETURN PRI_RIGA BTFSC STOP ;pulsante GOTO PRI_RIGA CLRF CONT_DISP movlw 01H ;Clear display call TXCMD movlw .8 ;Wait 5 ms a 20 Khz CALL TEMPI RETURN ;-------------------- RIT5 MOVWF CARATTERE RIT6 CALL TEMP3 ;pausa tra caratteri RUOTA BCF STATUS,C BCF STATUS,Z RLF CARATTERE,F MOVFW CARATTERE BTFSC STATUS,Z RETURN BTFSC STATUS,C GOTO LINEAS ;tx linea CALL PUNTO ;tx punto GOTO RUOTA LINEAS CALL LINEA GOTO RUOTA PUNTO BSF OUT_CW CALL TEMPO BCF OUT_CW CALL TEMPO RETURN LINEA BSF OUT_CW TEMP4 CALL TEMPO TEMP3 CALL TEMPO CALL TEMPO BCF OUT_CW CALL TEMPO RETURN TEMPO DECFSZ RITARDO,F GOTO TEMPO RETURN SPAZIOG CALL TEMP4 CALL TEMP3 CLRF CONT_CARAT RETURN ;::::::::::::::::::::::::::::: END