Autor Tema: Nueva PPRINT para PROTON  (Leído 2399 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
Nueva PPRINT para PROTON
« en: 07 de Noviembre de 2004, 16:30:00 »
Bueno panas, despues de un largo proceso.... y de platicas, aqui esta el nuevo PPRINT, ahora se puede imprimir mayores letras(que no supere el alto de 33) asi que lo unico que tienn que hacer es copiar el siguiente codigo(ya que no se puede subir en el foro) SON 2 ARCHIVOS UNO LLAMADO"PPRINT.INC" Y OTRO LLAMADO "PPRINT_14I32.inc" PARA CADA UNO ESTA DELIMITADO POR LINEAS ------ Y DEBE SER GUARDADO CON ESE  ".INC" AMBOS PARA QUE FUNCIONEN, UNA VES GENERADOS ESTOS ARCHIVOS, GUARDENLOS EN LA CARPETA INCLUDE (INC) DE PROTON NORMALMENTE UBICADA EN C: ARCHIVOS DE PROGRAMACROWNHILLINC . PARA HACER LOS ARCHIVOS, SOLO ABRAN EL BLOQ DE NOTAS , COPIEN EL CODIGO DELIMITADO PARA CADA ARCHIVO Y GUARDENLO COMO PPRINT.INC Y  PPRINT_14I32.INC (CADA UNO CON SU CODIGO DELIMITADO POR LAS LINEAS -----)
AQUI LES DEJO NUEVAMETE UN EJEMPLO Y NOTEN QUE SE TIENE QUE AGREGAR TRES DEFINICIONES PARA PODER USARSE (dim GLCD_FLAG2 as byte system  ,DIM OVERWRITEgMASKHHHH AS BYTE SYSTEM ,DIM PCHARgDATAHHHH AS BYTE SYSTEM )


INICIO DE Codigo para PPRINT.INC
---------------------------------------------------------------------------------------------------------

 NOLIST      
; Decide which version of PPRINT to load
       if(_CORE == 14)                     ; Is it a 14-bit core device ?
             ifdef INTERNAL@FONT               ; Is the INTERNAL@FONT define on the PBP file ?
               if(INTERNAL@FONT == 1)         ; Do we need the internal font version ?
                   LIST
                   #include "PPRINT_14I32.INC"   ; Yes. So load the internal font version of PPRINT for a 14-bit core device
                   NOLIST
                else
                   LIST
                   #include "PPRINT_14E.INC"   ; Otherwise load the external font version of PPRINT for a 14-bit core device
                   NOLIST
                endif
             else
               LIST
               #include "PPRINT_14I.INC"      ; Load (by default) the internal font version of PPRINT for a 14-bit core device
               NOLIST
            endif
       else                              ; Must be a 16-bit core device
             ifdef INTERNAL@FONT               ; Is the INTERNAL@FONT define on the PBP file ?
               if(INTERNAL@FONT == 1)         ; Do we need the internal font version ?
                   LIST
                   #include "PPRINT_16I.INC"   ; Yes. So load the internal font version of PPRINT for a 16-bit core device
                   NOLIST
                else
                   LIST
                   #include "PPRINT_16E.INC"   ; Otherwise load the external font version of PPRINT for a 16-bit core device
                   NOLIST
                endif
             else
               LIST
               #include "PPRINT_16I.INC"      ; Load (by default) the internal font version of PPRINT for a 16-bit core device
               NOLIST
            endif
       endif
       
------------------------------------------------------------------------------------------------------
FIN DEL CODIGO PARA PPRINT:INC



INICIO DEL Codigo para PPRINT_14I32.INC
-------------------------------------------------------------------------------------------------------

  NOLIST    
   
    ; _PFONT_TBL#ADDRS             ; Stores out the start of the lookup table for this font  
    ; _PFONT_TBL#ADDRSH
    ; _PFONT_TBL#ADDRS
    ; _PFONT_TBL#ADDRSH
   
    ; _GLCD_YPOS                             ; The horizontal pixel Line
    ; _GLCD_XPOS                              ; The var used to indicate at what pixcel point on the hrz line you want to start printing from                
    ; GEN                                  ; Internal lcdwrite line
    ; _GLCD_YPOS#TEMP                          ; Used to store the current line printing is used to prevent re doing maths to work out control flags etc
    ; _PFONT#HT                                 ; The number of pixels high font is
   
    ; _GLCD_FLAG                                ; Print control flags
    #define P@INVERSE       _GLCD_FLAG,0        ; Set when an invert print is required  
    #define P@XOR           _GLCD_FLAG,1        ; Set when an XOR print is required
    #define P@OR            _GLCD_FLAG,2        ; Set when an OR print is required
    #define PYLINE2@REQ    _GLCD_FLAG,3        ; Flag to indicate second line is required
    #define PYLINE3@REQ    _GLCD_FLAG,4        ; Flag to indicate third line is required
    #define PYLINE4@REQ     _GLCD_FLAG,5        ; Flag to indicate forth line is required
    #define TWO_BYTE@FONT   _GLCD_FLAG,6        ; Flag to indicate font is 2 bytes tall
    #define THREE_BYTE@FONT _GLCD_FLAG,7        ; Flag to indicate font is 3 bytes tall
    #define FOUR_BYTEaFONT   GLCD_FLAG2,0
    #define PYLINE5aREQ     GLCD_FLAG2,1
     
   
    ; _PSHIFT#LEFT                         ; Number of shifts required to move to bits to correct place
    ; _OVERWRITE#MASK                      ; Mask to define overwrite mask shape of char
    ; _OVERWRITE#MASKH
    ; _OVERWRITE#MASKHH
    ; _OVERWRITE#MASKHHH
   
    ; _PCHAR#DATA                          ; Var that holds the current data to lcdwrite out  
    ; _PCHAR#DATAH
    ; _PCHAR#DATAHH
    ; _PCHAR#DATAHHH
       
    ; PP5                                   ; Temp var using pic variables
    ; PP6H                                  ; Temp var using pic variables  
    ; PP6                                   ; Number of x pixels that makes up font length              
   
     
    if((EEADR >> 8) != 0x01)               ; Make sure the BANK arrangement is correct
       error "This PICmicro is not suitable for PPRINT because the eeprom banks are different"
    endif

             
; Requires the Character to be displayed in WREG
 LIST
       Movlw     255
       Movwf   _GLCD_YPOS#TEMP                 ; Force a re calc
       set@page over@ext@pprint
       Goto   over@ext@pprint               ; Jump over the PPRINT subroutines, because we are in the line of the program      
 NOLIST
;-----[READ FROM MEMORY A BYTE OF DATA]-------------------------        
; Enter here to perform a pre-inc read
LIST
c@readpdata    
       Bsf    STATUS,RP1                          ; BANK 2
       Incf    EEADR,F                             ; Increment the address
       Skpnz
       Incf    EEADRH,F
; Enter here to perform a normal read EEADR/EEADRH has to be pre-loaded
c@readpdata2
       Bsf    STATUS,RP0                          
       Bsf    STATUS,RP1                          ; BANK 3
       Bsf    EECON1,EEPGD                        ; Instigate the read
       Bsf    EECON1,RD
       Goto   $ + 1                        ; Waste 2 cycles
       Bcf    STATUS,RP0                     ; Back down to BANK 2
       Movfw    EEDATA                              ; Get the low data into wreg
       if($ > 2047)
          set@page I@nt
       endif
       Goto   I@nt
 
;----[Restore the WREG and exit routine]----------------------------------------------------
PPRINT@EXIT
       Movfw   PP3                            ; Restore WREG
       if($ > 2047)
          set@page I@nt
       endif
       Goto   I@nt                         ; Exit the routine
       
;----[PUT THE DATA CONTAINED IN _PCHAR#DATA ON THE LCD AND RETURN]-----
PPRINT@IT                                            
       Movfw   _GLCD_XPOS                  
       Movwf   GENH
       Movfw   _PCHAR#DATA
       if($ > 2047)
          set@page GLCD@P
       endif
       Goto    GLCD@P                        ; Return via GLCD@P
                                
;----[ROUTINE TO PUT THE DATA ON THE SCREEN]--------------------       
PPRINT@DAT:      
   
       if($ > 2047)
          set@page PPRINT@EXIT
       endif
       Btfsc    GEN,3                               ; Are we within screen area?
       Goto    PPRINT@EXIT
       Btfsc    _GLCD_XPOS,7
       Goto    PPRINT@EXIT                         ; No    
                                
       Movfw   PP7                           ; Save contents of PP7, because of interference with Display float
       Movwf   _PPRINT#TEMP3
       Movfw   _GLCD_XPOS
       if($ > 2047)
          set@page GLCD@G
       endif
       Call   GLCD@G                         ; Read data from the LCD into PP5
       Movwf   PP5
       Movfw   _PPRINT#TEMP3                  ; Restore contents of PP7
        Movwf   PP7
           
       set@page PPRINT@DAT_L1
       Btfss    P@OR                                  ; "OR" Required?
       Goto      PPRINT@DAT_L1
       Iorwf    _PCHAR#DATA,F
       if($ > 2047)
          set@page PPRINT@IT
       endif
       Goto      PPRINT@IT
       
PPRINT@DAT_L1    
       set@page PPRINT@DAT_L2
       Btfss    P@XOR                               ; "XOR" Required?
       Goto      PPRINT@DAT_L2   
       Xorwf    _PCHAR#DATA,F
       if($ > 2047)
          set@page PPRINT@IT
       endif
       Goto      PPRINT@IT
       
PPRINT@DAT_L2  
    ; Masking Required
       Movfw    PP6H
       Andwf    PP5,F
          Movfw    PP5
       Iorwf    _PCHAR#DATA,F                          
      if($ > 2047)
         set@page PPRINT@IT
      endif
      Goto   PPRINT@IT
                   
;----[START OF PPRINT SUBROUTINE]-----------------------------------------------------------       
PRINT
       if($ > 2047)
          set@page setup@lcd
       endif
       Call   setup@lcd                      ; Setup the LCD if it hasn"t been setup already
       Movwf    _PCHAR#DATA                      
       Movwf   PP3                            ; Save contents of WREG   
       Movlw    32
       Subwf    _PCHAR#DATA,F                   ; Subtract the ASCII offset for the FONT table                  
   
; Calculate if we require the new PFONT shift values and how many lines to print
       Movfw     _GLCD_YPOS                            ; Have we calculated the info for this line already?
       Subwf   _GLCD_YPOS#TEMP,W
       set@page OVER@PRINT_CALC
       Btfsc   STATUS,Z
;       Goto      P@STRT                               ; No so do the calcs
       Goto      OVER@PRINT_CALC                    ; Yes so just print
   
;P@STRT
       Movlw     7                                     ; Work out how much to shift data
       Andwf     _GLCD_YPOS,W
       Movwf     _PSHIFT#LEFT
   
         Movfw     _PSHIFT#LEFT                       ; Calc the lines to print
       Addwf     _PFONT#HT,W
       Movwf     PP5
             
          Movfw   _GLCD_FLAG                       ; Clear the control flags
       Andlw   B"00000111"                      ; But leave the modifier flags alone
       Movwf   _GLCD_FLAG
       bcf     GLCD_FLAG2,0                       ; clear the 4th line flag    
       bcf     GLCD_FLAG2,1                       ; clear the 4th line flag  
         
       Movlw     9
       Subwf   _PFONT#HT,W                          ; Is this > 8 pixels high
       Btfsc   STATUS,C        
;       Goto      IFTHENEXIT@L1
       Bsf       TWO_BYTE@FONT                         ; Yes
   
;IFTHENEXIT@L1
       Movlw     17                                    ; Is this > 16 pixels high
       Subwf   _PFONT#HT,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L2
       Bsf       THREE_BYTE@FONT                       ; Yes

;IFTHENEXIT@L1A                                     ; <<<<<<<<<<<<<<<<<<<<<<<
       Movlw     25                                    ; Is this > 24 pixels high
       Subwf   _PFONT#HT,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L2
       Bsf       FOUR_BYTEaFONT                       ; Yes
                                                    ; <<<<<<<<<<<<<<<<<<<<<<<
                                                   
;IFTHENEXIT@L2
       Movlw     9                                     ; 2 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L3    
       Bsf       PYLINE2@REQ                           ; Yes
   
;IFTHENEXIT@L3  
       Movlw     17                                  ; 3 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L4
       Bsf       PYLINE3@REQ                           ; Yes
   
;IFTHENEXIT@L4
       Movlw     25                                    ; 4 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L5
       Bsf       PYLINE4@REQ                           ; Yes
       
;IFTHENEXIT@L5
       Movlw     33                                    ; 5 Lines to be printed?  <<<<<<<<<<<<<
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L5
       Bsf       PYLINE5aREQ                           ; Yes                     <<<<<<<<<<<<<
   
;IFTHENEXIT@L5
       Movfw   _PFONT#HT                             ; Work out no rotates for masks
       Sublw   40 ;<<<<<<<<<<<<<<<<<<<<<32
       Movwf   _PPRINT#TEMP2
       Movlw   255
       Movwf   _OVERWRITE#MASK                    ; _OVERWRITE#MASK = $FFFFFFFFFF
       Movwf   _OVERWRITE#MASKH
       Movwf   _OVERWRITE#MASKHH
       Movwf   _OVERWRITE#MASKHHH    
       Movwf   OVERWRITEgMASKHHHH    ;<<<<<<<<<<<<<<<<<<<<<        
       Incf      _PPRINT#TEMP2,F
       
RR_LOOP@L1                                            ; Rotate mask first right
       Decf      _PPRINT#TEMP2,F
       set@page RREXIT@L1
       Btfsc   STATUS,Z        
       Goto    RREXIT@L1
       Clrc
       Rrf      OVERWRITEgMASKHHHH,F  ;<<<<<<<<<<<<<<<<<<<<<      
       Rrf      _OVERWRITE#MASKHHH,F
       Rrf      _OVERWRITE#MASKHH,F
       Rrf      _OVERWRITE#MASKH,F
       Rrf      _OVERWRITE#MASK,F
       if($ > 2047)
          set@page RR_LOOP@L1
       endif
       Goto    RR_LOOP@L1
   
RREXIT@L1
       Movfw     _PSHIFT#LEFT
       Movwf   _PPRINT#TEMP2
       Incf      _PPRINT#TEMP2,F                       ; Then left
RL_LOOP@L1
       Decf      _PPRINT#TEMP2,F
       set@page RLEXIT@L1
       Btfsc   STATUS,Z
       Goto    RLEXIT@L1
       Clrc
       Rlf      _OVERWRITE#MASK,F
       Rlf      _OVERWRITE#MASKH,F
       Rlf      _OVERWRITE#MASKHH,F    
       Rlf      _OVERWRITE#MASKHHH,F
        Rlf      OVERWRITEgMASKHHHH,F   ;<<<<<<<<<<<<<<<<<<<      
       if($ > 2047)
          set@page RL_LOOP@L1
       endif
       Goto      RL_LOOP@L1
   
RLEXIT@L1
       Comf      _OVERWRITE#MASK,F                    ; LASTLY INVERT
       Comf      _OVERWRITE#MASKH,F
       Comf      _OVERWRITE#MASKHH,F
       Comf      _OVERWRITE#MASKHHH,F
        Comf      OVERWRITEgMASKHHHH,F   ;<<<<<<<<<<<<<<<<<<<<
       Movfw     _GLCD_YPOS
       Movwf   _GLCD_YPOS#TEMP                      ; Make note for next time
   
OVER@PRINT_CALC
 NOLIST    
; Start of print routine
   
;---- Look up the address for the char no in pchar ----------
 LIST    
       Movfw   _PFONT_TBL#ADDRS
       Bsf      STATUS,RP1                        ; Point to BANK 2
       Movwf   EEADR                               ; Load the Base Font address into the eread address regs
       Bcf      STATUS,RP1                        ; Back to BANK0
       Movfw    _PFONT_TBL#ADDRSH
       Bsf      STATUS,RP1                        ; Point to BANK 2
       Movwf   EEADRH
      
      Bcf      STATUS,RP1                        ; Back to BANK0
       Movfw    _PCHAR#DATA                            ; TAKE the char_no
       Bsf    STATUS,RP1                               ;
       Addwf    EEADR,F                                ; add that to the address held in the eread address regs
       Skpnc
       Incf    EEADRH,F                                ; NOW POINT TO THE ADDRESS OF THE FONT CHAR
       if($ > 2047)
          set@page c@readpdata2
       endif
       Call     c@readpdata2                          
       Bsf      STATUS,RP1                        ; Back up to BANK 2
       Movwf    EEADR                              
       Movfw    EEDATH
       Movwf   EEADRH
       Call     c@readpdata2                           ; Read in how many bytes per line make up the char
       Movwf   PP6                              ; AND SAVE

; Main subroutine loop
   
MAIN_PPRINT@LOOP                                      ; Loop for as many times as there are x pixels in font
   
; Get the bytes that make up char
       Clrf      PCHARgDATAHHHH    ;<<<<<<<<<<<<<<<<<<<<<<    
       Clrf      _PCHAR#DATAHHH                       ; Always clear these vars
       Clrf      _PCHAR#DATAHH
       Clrf      _PCHAR#DATAH
       Clrf      _PCHAR#DATA
        if($ > 2047)      
          set@page c@readpdata
       endif
       Call     c@readpdata                      ; Get the lower byte
       Movwf   _PCHAR#DATA                         ; Load first line
   
   
       set@page PRINT_LOOP@L1
       Btfss     TWO_BYTE@FONT                        ; If font > 8 pixels load 2nd byte
       Goto    PRINT_LOOP@L1
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata   
       Movwf   _PCHAR#DATAH                      ; Load second line
   
PRINT_LOOP@L1
       set@page PRINT_LOOP@L1A
       Btfss     THREE_BYTE@FONT                      ; If font > 16 pixels load 3rd byte
       Goto      PRINT_LOOP@L1A
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata
       Movwf   _PCHAR#DATAHH                       ; Load third line

PRINT_LOOP@L1A
          set@page PRINT_LOOP@L2
       Btfss     FOUR_BYTEaFONT                      ; If font > 24 pixels load 4th byte    <<<<<<<<
       Goto      PRINT_LOOP@L2
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata
       Movwf   _PCHAR#DATAHHH                       ; Load Forth line   <<<<<<<<<<<<<<<<
           
PRINT_LOOP@L2
; Shift the data into place
   
       Movfw     _PSHIFT#LEFT
       Movwf   _PPRINT#TEMP2                   ; We need to shift the data into the correct place
   
       Incf      _PPRINT#TEMP2,F
RL_LOOP@L2
       set@page RLEXIT@L2
       Decf      _PPRINT#TEMP2,F
       Btfsc     STATUS,Z  
       Goto      RLEXIT@L2
       Clrc
       Rlf      _PCHAR#DATA,F
       Rlf      _PCHAR#DATAH,F
       Rlf      _PCHAR#DATAHH,F
       Rlf      _PCHAR#DATAHHH,F
       Rlf      PCHARgDATAHHHH,F   ;<<<<<<<<<<<<<<<    
       if($ > 2047)
          set@page RL_LOOP@L2
       endif
       Goto    RL_LOOP@L2
       Movfw     _PSHIFT#LEFT
       Incf      _PPRINT#TEMP2,F
       if($ > 2047)
          set@page RL_LOOP@L2
       endif
       Goto    RL_LOOP@L2
   
RLEXIT@L2  
       Btfss     P@INVERSE                             ; If invert required make mask and xor with data
       Goto    PRINT_LOOP@L3
       Comf      _OVERWRITE#MASK,W
       Xorwf     _PCHAR#DATA,F
       Comf      _OVERWRITE#MASKH,W
       Xorwf     _PCHAR#DATAH,F
       Comf      _OVERWRITE#MASKHH,W
       Xorwf     _PCHAR#DATAHH,F
       Comf      _OVERWRITE#MASKHHH,W
          Xorwf     _PCHAR#DATAHHH,F
       Comf      OVERWRITEgMASKHHHH,W    ;<<<<<<<<<<<<<<<<
          Xorwf     PCHARgDATAHHHH,F        ;<<<<<<<<<<<<<<<<            
   
PRINT_LOOP@L3
       Clrc                                         ; Work out the lcdwrite line to start printing
       Rrf       _GLCD_YPOS,W
          Movwf     GEN
       Clrc
       Rrf       GEN,F
       Clrc
       Rrf       GEN,F
   
    ;Byte_byte     _PCHAR#DATA, _PCHAR#DATA        ; Print the first line        
       Movfw     _OVERWRITE#MASK
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call    PPRINT@DAT
   
       set@page PRINT_LOOP@L4
       Btfss     PYLINE2@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L4
       Incf      GEN,F                               ; Yes so move down a line
       Movfw   _PCHAR#DATAH
       Movwf   _PCHAR#DATA                       ; Get the data to print
       Movfw   _OVERWRITE#MASKH
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call     PPRINT@DAT                          ; Put the data down
   
PRINT_LOOP@L4      
       set@page PRINT_LOOP@L5
       Btfss     PYLINE3@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L5
       Incf    GEN,F                               ; Yes so move down a line
       Movfw     _PCHAR#DATAHH
       Movwf   _PCHAR#DATA                     ; Get the data to print
       Movfw   _OVERWRITE#MASKHH
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call   PPRINT@DAT                             ; Put the data down
   
PRINT_LOOP@L5
       set@page PRINT_LOOP@L5A
       Btfss     PYLINE4@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L5A
       Incf    GEN,F                               ; Yes so move down a line
       Movfw   _PCHAR#DATAHHH
       Movwf    _PCHAR#DATA                    ; Get the data to print
       Movfw   _OVERWRITE#MASKHHH
       Movwf   PP6H
          if($ > 2047)
             set@page PPRINT@DAT
          endif
          Call      PPRINT@DAT                           ; Put the data down

PRINT_LOOP@L5A                                      ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       set@page PRINT_LOOP@L6
       Btfss     PYLINE5aREQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L6
       Incf    GEN,F                               ; Yes so move down a line
       Movfw   PCHARgDATAHHHH
       Movwf    _PCHAR#DATA                    ; Get the data to print
       Movfw   OVERWRITEgMASKHHHH
       Movwf   PP6H
          if($ > 2047)                                
             set@page PPRINT@DAT
          endif
        Call      PPRINT@DAT                           ; Put the data down
                                                       ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
PRINT_LOOP@L6
       Incf    _GLCD_XPOS,F                        ; Move to the next X pixel
       if($ > 2047)
          set@page MAIN_PPRINT@LOOP
       endif
       Decfsz   PP6,F
       Goto   MAIN_PPRINT@LOOP                    ; Loop until all X pixels printed  

      if($ > 2047)
         set@page PPRINT@EXIT
      endif
      Goto PPRINT@EXIT
 NOLIST  
         
;-----[READ THE FONT HEIGHT]------------------------------------
 LIST    
SET@FONT
       Movfw    _PFONT_TBL#ADDRS
       Bsf      STATUS,RP1                     ; Point to BANK 2
       Movwf   EEADR                           ; Load the address in
       Bcf      STATUS,RP1                     ; Point back to BANK 0
       Movfw    _PFONT_TBL#ADDRSH
       Bsf      STATUS,RP1                     ; Point to BANK 2
       Movwf   EEADRH
       set@page c@readpdata2
       Call      c@readpdata2                        ; Read the font height
       Movwf     _PFONT#HT                           ; And save it
       Incf    _PFONT_TBL#ADDRS,F                  ; Up the address 2
       Skpnz
       Incf    _PFONT_TBL#ADDRSH,F    
       Movlw     255
       Movwf   _GLCD_YPOS#TEMP                     ; Force a re calc
      if($ > 2047)
          set@page I@nt
       endif
       Goto    I@nt
   
over@ext@pprint
   
 

 
   
--------------------------------------------------------------------------------------------------------
FIN DL CODIGO PARA PPRINT_14I32.INC


EJEMPLO:


device 16f877
dim GLCD_FLAG2 as byte system            "AGREGAR ESTAS VARIABLES DE SISTEMA
DIM OVERWRITEgMASKHHHH AS BYTE SYSTEM     "NUEVA V.S
DIM PCHARgDATAHHHH AS BYTE SYSTEM        "NUEVA V.S
xtal 4
DECLARE LCD_TYPE 1
DECLARE LCD_DTPORT PORTD
DECLARE LCD_RWPIN PORTC.0
DECLARE LCD_CS1PIN PORTE.1
DECLARE LCD_CS2PIN PORTE.2
DECLARE LCD_RSPIN  PORTC.1
DECLARE LCD_ENPIN PORTE.0
DECLARE GLCD_CS_INVERT OFF
DECLARE INTERNAL_FONT ON
GLCD_EXTERNAL_PRINT=PPRINT
PRINT FONT MS_Sans_Serif24
all_digital true
X:cls
    PRINT  "TODOPIC"
delayms 2000
GOTO X
include "MS_Sans_Serif24.fnt"

--------------------------------------------------------------------------------------------------------
NOTA:NO INCLUYO EL CODIGO DE  "MS_Sans_Serif24.fnt" YA QUE ES EXTENSO Y ES GENERADO AUTOMATICAMENTE POR EL GENERADOR TODOPIC.
En cuanto tenga el PPRINT final para letras extra gandes lo subo tambien
Salu2 panas

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Nueva PPRINT para PROTON
« Respuesta #1 en: 08 de Noviembre de 2004, 14:51:00 »
Pana Khasistos, Gracias por la Observacion del codigo ERRONEO, ya lo correji , En un Rato subo el NUEVO codigo para letras del tamaño de la pantall, jajajajaja.
Un abraso pana

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Nueva PPRINT para PROTON
« Respuesta #2 en: 08 de Noviembre de 2004, 18:52:00 »
HOLA PANA

Me parece que las gracias estan de mas ....yo solo probe en lo que estoy mas o menos practico ,pero la genialidad la posteaste tu ,solo soy un OMEGA TESTER no llego si quiera a ello...JA JA JA.GRACIAS a vos por todo tu empeño en el desarrolo,Y ya ven para los que se "comen" las cosas como hay GENTE que sus horas y neuronas las postean ESTO ES UN EJEMPLO A SEGUIR.....FELICITACIONES Y GRACIAS POR TODOS...

saludos
Khasistos

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Nueva PPRINT para PROTON
« Respuesta #3 en: 09 de Noviembre de 2004, 11:22:00 »
HOLA .

Solo te ahorro el trabajo ..CAMBIEN SOLO EL 14I32.INC EL PPRINT DEJENLO COMO ESTA .....TODO ESTO COMO SIEMPRE EN UNA CARPETA .INC DENTRO DE LA CARPETA INC del Proton....
FUNCIONA PERFECTO CON LETRAS DE 4 BITS DE ALTO (NO CONFUNDIR) 33 DE TAMAÑO MAXIMO EN LA PRACTICA ESO SE VE CUANDO SE GENERA LA LETRA EN EL CODIGO DICE WORD=XX  NO ES EL TAMAÑO DE LA LETRA QUE ELIGAN ...POR EJEMPLO UNA ARIAL DE 18 GENERA UN WORD=23 ese es el tamaño que hay que tener en cuenta......por ahora ......ya va a llegar la pantalla completa .......


NOLIST    
   
    ; _PFONT_TBL#ADDRS             ; Stores out the start of the lookup table for this font  
    ; _PFONT_TBL#ADDRSH
    ; _PFONT_TBL#ADDRS
    ; _PFONT_TBL#ADDRSH
   
    ; _GLCD_YPOS                             ; The horizontal pixel Line
    ; _GLCD_XPOS                              ; The var used to indicate at what pixcel point on the hrz line you want to start printing from                
    ; GEN                                  ; Internal lcdwrite line
    ; _GLCD_YPOS#TEMP                          ; Used to store the current line printing is used to prevent re doing maths to work out control flags etc
    ; _PFONT#HT                                 ; The number of pixels high font is
   
    ; _GLCD_FLAG                                ; Print control flags
    #define P@INVERSE       _GLCD_FLAG,0        ; Set when an invert print is required  
    #define P@XOR           _GLCD_FLAG,1        ; Set when an XOR print is required
    #define P@OR            _GLCD_FLAG,2        ; Set when an OR print is required
    #define PYLINE2@REQ    _GLCD_FLAG,3        ; Flag to indicate second line is required
    #define PYLINE3@REQ    _GLCD_FLAG,4        ; Flag to indicate third line is required
    #define PYLINE4@REQ     _GLCD_FLAG,5        ; Flag to indicate forth line is required
    #define TWO_BYTE@FONT   _GLCD_FLAG,6        ; Flag to indicate font is 2 bytes tall
    #define THREE_BYTE@FONT _GLCD_FLAG,7        ; Flag to indicate font is 3 bytes tall
    #define FOUR_BYTEaFONT   GLCD_FLAG2,0
    #define PYLINE5aREQ     GLCD_FLAG2,1
     
   
    ; _PSHIFT#LEFT                         ; Number of shifts required to move to bits to correct place
    ; _OVERWRITE#MASK                      ; Mask to define overwrite mask shape of char
    ; _OVERWRITE#MASKH
    ; _OVERWRITE#MASKHH
    ; _OVERWRITE#MASKHHH
   
    ; _PCHAR#DATA                          ; Var that holds the current data to lcdwrite out  
    ; _PCHAR#DATAH
    ; _PCHAR#DATAHH
    ; _PCHAR#DATAHHH
       
    ; PP5                                   ; Temp var using pic variables
    ; PP6H                                  ; Temp var using pic variables  
    ; PP6                                   ; Number of x pixels that makes up font length              
   
     
    if((EEADR >> 8) != 0x01)               ; Make sure the BANK arrangement is correct
       error "This PICmicro is not suitable for PPRINT because the eeprom banks are different"
    endif

             
; Requires the Character to be displayed in WREG
 LIST
       Movlw     255
       Movwf   _GLCD_YPOS#TEMP                 ; Force a re calc
       set@page over@ext@pprint
       Goto   over@ext@pprint               ; Jump over the PPRINT subroutines, because we are in the line of the program      
 NOLIST
;-----[READ FROM MEMORY A BYTE OF DATA]-------------------------        
; Enter here to perform a pre-inc read
LIST
c@readpdata    
       Bsf    STATUS,RP1                          ; BANK 2
       Incf    EEADR,F                             ; Increment the address
       Skpnz
       Incf    EEADRH,F
; Enter here to perform a normal read EEADR/EEADRH has to be pre-loaded
c@readpdata2
       Bsf    STATUS,RP0                          
       Bsf    STATUS,RP1                          ; BANK 3
       Bsf    EECON1,EEPGD                        ; Instigate the read
       Bsf    EECON1,RD
       Goto   $ + 1                        ; Waste 2 cycles
       Bcf    STATUS,RP0                     ; Back down to BANK 2
       Movfw    EEDATA                              ; Get the low data into wreg
       if($ > 2047)
          set@page I@nt
       endif
       Goto   I@nt
 
;----[Restore the WREG and exit routine]----------------------------------------------------
PPRINT@EXIT
       Movfw   PP3                            ; Restore WREG
       if($ > 2047)
          set@page I@nt
       endif
       Goto   I@nt                         ; Exit the routine
       
;----[PUT THE DATA CONTAINED IN _PCHAR#DATA ON THE LCD AND RETURN]-----
PPRINT@IT                                            
       Movfw   _GLCD_XPOS                  
       Movwf   GENH
       Movfw   _PCHAR#DATA
       if($ > 2047)
          set@page GLCD@P
       endif
       Goto    GLCD@P                        ; Return via GLCD@P
                                
;----[ROUTINE TO PUT THE DATA ON THE SCREEN]--------------------       
PPRINT@DAT:      
   
       if($ > 2047)
          set@page PPRINT@EXIT
       endif
       Btfsc    GEN,3                               ; Are we within screen area?
       Goto    PPRINT@EXIT
       Btfsc    _GLCD_XPOS,7
       Goto    PPRINT@EXIT                         ; No    
                                
       Movfw   PP7                           ; Save contents of PP7, because of interference with Display float
       Movwf   _PPRINT#TEMP3
       Movfw   _GLCD_XPOS
       if($ > 2047)
          set@page GLCD@G
       endif
       Call   GLCD@G                         ; Read data from the LCD into PP5
       Movwf   PP5
       Movfw   _PPRINT#TEMP3                  ; Restore contents of PP7
        Movwf   PP7
           
       set@page PPRINT@DAT_L1
       Btfss    P@OR                                  ; "OR" Required?
       Goto      PPRINT@DAT_L1
       Iorwf    _PCHAR#DATA,F
       if($ > 2047)
          set@page PPRINT@IT
       endif
       Goto      PPRINT@IT
       
PPRINT@DAT_L1    
       set@page PPRINT@DAT_L2
       Btfss    P@XOR                               ; "XOR" Required?
       Goto      PPRINT@DAT_L2   
       Xorwf    _PCHAR#DATA,F
       if($ > 2047)
          set@page PPRINT@IT
       endif
       Goto      PPRINT@IT
       
PPRINT@DAT_L2  
    ; Masking Required
       Movfw    PP6H
       Andwf    PP5,F
          Movfw    PP5
       Iorwf    _PCHAR#DATA,F                          
      if($ > 2047)
         set@page PPRINT@IT
      endif
      Goto   PPRINT@IT
                   
;----[START OF PPRINT SUBROUTINE]-----------------------------------------------------------       
PRINT
       if($ > 2047)
          set@page setup@lcd
       endif
       Call   setup@lcd                      ; Setup the LCD if it hasn"t been setup already
       Movwf    _PCHAR#DATA                      
       Movwf   PP3                            ; Save contents of WREG   
       Movlw    32
       Subwf    _PCHAR#DATA,F                   ; Subtract the ASCII offset for the FONT table                  
   
; Calculate if we require the new PFONT shift values and how many lines to print
       Movfw     _GLCD_YPOS                            ; Have we calculated the info for this line already?
       Subwf   _GLCD_YPOS#TEMP,W
       set@page OVER@PRINT_CALC
       Btfsc   STATUS,Z
;       Goto      P@STRT                               ; No so do the calcs
       Goto      OVER@PRINT_CALC                    ; Yes so just print
   
;P@STRT
       Movlw     7                                     ; Work out how much to shift data
       Andwf     _GLCD_YPOS,W
       Movwf     _PSHIFT#LEFT
   
         Movfw     _PSHIFT#LEFT                       ; Calc the lines to print
       Addwf     _PFONT#HT,W
       Movwf     PP5
             
          Movfw   _GLCD_FLAG                       ; Clear the control flags
       Andlw   B"00000111"                      ; But leave the modifier flags alone
       Movwf   _GLCD_FLAG
       bcf     GLCD_FLAG2,0                       ; clear the 4th line flag    
       bcf     GLCD_FLAG2,1                       ; clear the 4th line flag  
         
       Movlw     9
       Subwf   _PFONT#HT,W                          ; Is this > 8 pixels high
       Btfsc   STATUS,C        
;       Goto      IFTHENEXIT@L1
       Bsf       TWO_BYTE@FONT                         ; Yes
   
;IFTHENEXIT@L1
       Movlw     17                                    ; Is this > 16 pixels high
       Subwf   _PFONT#HT,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L2
       Bsf       THREE_BYTE@FONT                       ; Yes

;IFTHENEXIT@L1A                                     ; <<<<<<<<<<<<<<<<<<<<<<<
       Movlw     25                                    ; Is this > 24 pixels high
       Subwf   _PFONT#HT,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L2
       Bsf       FOUR_BYTEaFONT                       ; Yes
                                                    ; <<<<<<<<<<<<<<<<<<<<<<<
                                                   
;IFTHENEXIT@L2
       Movlw     9                                     ; 2 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L3    
       Bsf       PYLINE2@REQ                           ; Yes
   
;IFTHENEXIT@L3  
       Movlw     17                                  ; 3 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto    IFTHENEXIT@L4
       Bsf       PYLINE3@REQ                           ; Yes
   
;IFTHENEXIT@L4
       Movlw     25                                    ; 4 Lines to be printed?
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L5
       Bsf       PYLINE4@REQ                           ; Yes
       
;IFTHENEXIT@L5
       Movlw     33                                    ; 5 Lines to be printed?  <<<<<<<<<<<<<
       Subwf    PP5,W
       Btfsc   STATUS,C
;       Goto      IFTHENEXIT@L5
       Bsf       PYLINE5aREQ                           ; Yes                     <<<<<<<<<<<<<
   
;IFTHENEXIT@L5
       Movfw   _PFONT#HT                             ; Work out no rotates for masks
       Sublw   40 ;<<<<<<<<<<<<<<<<<<<<<32
       Movwf   _PPRINT#TEMP2
       Movlw   255
       Movwf   _OVERWRITE#MASK                    ; _OVERWRITE#MASK = $FFFFFFFFFF
       Movwf   _OVERWRITE#MASKH
       Movwf   _OVERWRITE#MASKHH
       Movwf   _OVERWRITE#MASKHHH    
       Movwf   OVERWRITEgMASKHHHH    ;<<<<<<<<<<<<<<<<<<<<<        
       Incf      _PPRINT#TEMP2,F
       
RR_LOOP@L1                                            ; Rotate mask first right
       Decf      _PPRINT#TEMP2,F
       set@page RREXIT@L1
       Btfsc   STATUS,Z        
       Goto    RREXIT@L1
       Clrc
       Rrf      OVERWRITEgMASKHHHH,F  ;<<<<<<<<<<<<<<<<<<<<<      
       Rrf      _OVERWRITE#MASKHHH,F
       Rrf      _OVERWRITE#MASKHH,F
       Rrf      _OVERWRITE#MASKH,F
       Rrf      _OVERWRITE#MASK,F
       if($ > 2047)
          set@page RR_LOOP@L1
       endif
       Goto    RR_LOOP@L1
   
RREXIT@L1
       Movfw     _PSHIFT#LEFT
       Movwf   _PPRINT#TEMP2
       Incf      _PPRINT#TEMP2,F                       ; Then left
RL_LOOP@L1
       Decf      _PPRINT#TEMP2,F
       set@page RLEXIT@L1
       Btfsc   STATUS,Z
       Goto    RLEXIT@L1
       Clrc
       Rlf      _OVERWRITE#MASK,F
       Rlf      _OVERWRITE#MASKH,F
       Rlf      _OVERWRITE#MASKHH,F    
       Rlf      _OVERWRITE#MASKHHH,F
        Rlf      OVERWRITEgMASKHHHH,F   ;<<<<<<<<<<<<<<<<<<<      
       if($ > 2047)
          set@page RL_LOOP@L1
       endif
       Goto      RL_LOOP@L1
   
RLEXIT@L1
       Comf      _OVERWRITE#MASK,F                    ; LASTLY INVERT
       Comf      _OVERWRITE#MASKH,F
       Comf      _OVERWRITE#MASKHH,F
       Comf      _OVERWRITE#MASKHHH,F
        Comf      OVERWRITEgMASKHHHH,F   ;<<<<<<<<<<<<<<<<<<<<
       Movfw     _GLCD_YPOS
       Movwf   _GLCD_YPOS#TEMP                      ; Make note for next time
   
OVER@PRINT_CALC
 NOLIST    
; Start of print routine
   
;---- Look up the address for the char no in pchar ----------
 LIST    
       Movfw   _PFONT_TBL#ADDRS
       Bsf      STATUS,RP1                        ; Point to BANK 2
       Movwf   EEADR                               ; Load the Base Font address into the eread address regs
       Bcf      STATUS,RP1                        ; Back to BANK0
       Movfw    _PFONT_TBL#ADDRSH
       Bsf      STATUS,RP1                        ; Point to BANK 2
       Movwf   EEADRH
      
      Bcf      STATUS,RP1                        ; Back to BANK0
       Movfw    _PCHAR#DATA                            ; TAKE the char_no
       Bsf    STATUS,RP1                               ;
       Addwf    EEADR,F                                ; add that to the address held in the eread address regs
       Skpnc
       Incf    EEADRH,F                                ; NOW POINT TO THE ADDRESS OF THE FONT CHAR
       if($ > 2047)
          set@page c@readpdata2
       endif
       Call     c@readpdata2                          
       Bsf      STATUS,RP1                        ; Back up to BANK 2
       Movwf    EEADR                              
       Movfw    EEDATH
       Movwf   EEADRH
       Call     c@readpdata2                           ; Read in how many bytes per line make up the char
       Movwf   PP6                              ; AND SAVE

; Main subroutine loop
   
MAIN_PPRINT@LOOP                                      ; Loop for as many times as there are x pixels in font
   
; Get the bytes that make up char
       Clrf      PCHARgDATAHHHH    ;<<<<<<<<<<<<<<<<<<<<<<    
       Clrf      _PCHAR#DATAHHH                       ; Always clear these vars
       Clrf      _PCHAR#DATAHH
       Clrf      _PCHAR#DATAH
       Clrf      _PCHAR#DATA
        if($ > 2047)      
          set@page c@readpdata
       endif
       Call     c@readpdata                      ; Get the lower byte
       Movwf   _PCHAR#DATA                         ; Load first line
   
   
       set@page PRINT_LOOP@L1
       Btfss     TWO_BYTE@FONT                        ; If font > 8 pixels load 2nd byte
       Goto    PRINT_LOOP@L1
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata   
       Movwf   _PCHAR#DATAH                      ; Load second line
   
PRINT_LOOP@L1
       set@page PRINT_LOOP@L1A
       Btfss     THREE_BYTE@FONT                      ; If font > 16 pixels load 3rd byte
       Goto      PRINT_LOOP@L1A
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata
       Movwf   _PCHAR#DATAHH                       ; Load third line

PRINT_LOOP@L1A
          set@page PRINT_LOOP@L2
       Btfss     FOUR_BYTEaFONT                      ; If font > 24 pixels load 4th byte    <<<<<<<<
       Goto      PRINT_LOOP@L2
       if($ > 2047)
          set@page c@readpdata
       endif
       Call     c@readpdata
       Movwf   _PCHAR#DATAHHH                       ; Load Forth line   <<<<<<<<<<<<<<<<
           
PRINT_LOOP@L2
; Shift the data into place
   
       Movfw     _PSHIFT#LEFT
       Movwf   _PPRINT#TEMP2                   ; We need to shift the data into the correct place
   
       Incf      _PPRINT#TEMP2,F
RL_LOOP@L2
       set@page RLEXIT@L2
       Decf      _PPRINT#TEMP2,F
       Btfsc     STATUS,Z  
       Goto      RLEXIT@L2
       Clrc
       Rlf      _PCHAR#DATA,F
       Rlf      _PCHAR#DATAH,F
       Rlf      _PCHAR#DATAHH,F
       Rlf      _PCHAR#DATAHHH,F
       Rlf      PCHARgDATAHHHH,F   ;<<<<<<<<<<<<<<<    
       if($ > 2047)
          set@page RL_LOOP@L2
       endif
       Goto    RL_LOOP@L2
       Movfw     _PSHIFT#LEFT
       Incf      _PPRINT#TEMP2,F
       if($ > 2047)
          set@page RL_LOOP@L2
       endif
       Goto    RL_LOOP@L2
   
RLEXIT@L2  
       Btfss     P@INVERSE                             ; If invert required make mask and xor with data
       Goto    PRINT_LOOP@L3
       Comf      _OVERWRITE#MASK,W
       Xorwf     _PCHAR#DATA,F
       Comf      _OVERWRITE#MASKH,W
       Xorwf     _PCHAR#DATAH,F
       Comf      _OVERWRITE#MASKHH,W
       Xorwf     _PCHAR#DATAHH,F
       Comf      _OVERWRITE#MASKHHH,W
          Xorwf     _PCHAR#DATAHHH,F
       Comf      OVERWRITEgMASKHHHH,W    ;<<<<<<<<<<<<<<<<
          Xorwf     PCHARgDATAHHHH,F        ;<<<<<<<<<<<<<<<<            
   
PRINT_LOOP@L3
       Clrc                                         ; Work out the lcdwrite line to start printing
       Rrf       _GLCD_YPOS,W
          Movwf     GEN
       Clrc
       Rrf       GEN,F
       Clrc
       Rrf       GEN,F
   
    ;Byte_byte     _PCHAR#DATA, _PCHAR#DATA        ; Print the first line        
       Movfw     _OVERWRITE#MASK
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call    PPRINT@DAT
   
       set@page PRINT_LOOP@L4
       Btfss     PYLINE2@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L4
       Incf      GEN,F                               ; Yes so move down a line
       Movfw   _PCHAR#DATAH
       Movwf   _PCHAR#DATA                       ; Get the data to print
       Movfw   _OVERWRITE#MASKH
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call     PPRINT@DAT                          ; Put the data down
   
PRINT_LOOP@L4      
       set@page PRINT_LOOP@L5
       Btfss     PYLINE3@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L5
       Incf    GEN,F                               ; Yes so move down a line
       Movfw     _PCHAR#DATAHH
       Movwf   _PCHAR#DATA                     ; Get the data to print
       Movfw   _OVERWRITE#MASKHH
       Movwf   PP6H
       if($ > 2047)
          set@page PPRINT@DAT
       endif
       Call   PPRINT@DAT                             ; Put the data down
   
PRINT_LOOP@L5
       set@page PRINT_LOOP@L5A
       Btfss     PYLINE4@REQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L5A
       Incf    GEN,F                               ; Yes so move down a line
       Movfw   _PCHAR#DATAHHH
       Movwf    _PCHAR#DATA                    ; Get the data to print
       Movfw   _OVERWRITE#MASKHHH
       Movwf   PP6H
          if($ > 2047)
             set@page PPRINT@DAT
          endif
          Call      PPRINT@DAT                           ; Put the data down

PRINT_LOOP@L5A                                      ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       set@page PRINT_LOOP@L6
       Btfss     PYLINE5aREQ                         ; Do we need to print to the next line?
       Goto    PRINT_LOOP@L6
       Incf    GEN,F                               ; Yes so move down a line
       Movfw   PCHARgDATAHHHH
       Movwf    _PCHAR#DATA                    ; Get the data to print
       Movfw   OVERWRITEgMASKHHHH
       Movwf   PP6H
          if($ > 2047)                                
             set@page PPRINT@DAT
          endif
        Call      PPRINT@DAT                           ; Put the data down
                                                       ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
PRINT_LOOP@L6
       Incf    _GLCD_XPOS,F                        ; Move to the next X pixel
       if($ > 2047)
          set@page MAIN_PPRINT@LOOP
       endif
       Decfsz   PP6,F
       Goto   MAIN_PPRINT@LOOP                    ; Loop until all X pixels printed  

      if($ > 2047)
         set@page PPRINT@EXIT
      endif
      Goto PPRINT@EXIT
 NOLIST  
         
;-----[READ THE FONT HEIGHT]------------------------------------
 LIST    
SET@FONT
       Movfw    _PFONT_TBL#ADDRS
       Bsf      STATUS,RP1                     ; Point to BANK 2
       Movwf   EEADR                           ; Load the address in
       Bcf      STATUS,RP1                     ; Point back to BANK 0
       Movfw    _PFONT_TBL#ADDRSH
       Bsf      STATUS,RP1                     ; Point to BANK 2
       Movwf   EEADRH
       set@page c@readpdata2
       Call      c@readpdata2                        ; Read the font height
       Movwf     _PFONT#HT                           ; And save it
       Incf    _PFONT_TBL#ADDRS,F                  ; Up the address 2
       Skpnz
       Incf    _PFONT_TBL#ADDRSH,F    
       Movlw     255
       Movwf   _GLCD_YPOS#TEMP                     ; Force a re calc
      if($ > 2047)
          set@page I@nt
       endif
       Goto    I@nt
   
over@ext@pprint
   
 


Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Nueva PPRINT para PROTON
« Respuesta #4 en: 09 de Noviembre de 2004, 17:38:00 »
Gracias pana, solo comento que el codigo no lo hice yo, yo solo postee la modificacion que Tim (su creador) a estado modificando bajo las necesidades de letras mas grandes, pronto Posteara el nuevo y Final PPRInt para modelos de 14 y 16 bit(ya que como bien tu te diste cuenta pana Khasistos solo es para 14 bits )s, ya probados, y listos para usarse. En cuanto esten bien chekados los subo para que puedan usarlos junto con el TODOPIC generador. Ahora si es Facil pasar Graficos y Letras  de CUALQUIER TAMAÑO y sin necesidad de editores ni agentes externos ni calculos que quitan tiempo en  el desarrollo de un buen programa y sobre todo sin generar tanto codigo no necesario.

Salu2 panas