estado 				equ 0x03
porta 				equ 0x05
portb 				equ 0x06
dato 				equ 0x0c
a 					equ 0x0d
c 					equ 0x0e
pcl 				equ 0x02
contador 			equ 0x0f
comparar_contador 	equ 0x1f
pclath				equ 0x0a
temp0				equ 0x25			



#define banco0 		bcf	estado,5
#define banco1 		bsf	estado,5

			banco1
			   		clrf porta
			   		clrf portb
			banco0

					movlw .255
					movwf portb
					movlw .50
					movwf comparar_contador
	
clear_contador 		clrf contador	
	
					goto inicio


tabla 				movwf  temp0
					clrf   pclath
					movf   temp0,0
					addwf  pcl,1
					DT 0x3e, 0x45, 0x49, 0x51, 0x3e		;0x3E, 0x51, 0x49, 0x45, 0x3E, // 0		
					DT 0x00, 0x00, 0x7f, 0x02, 0x04     ;0x04, 0x02, 0x7F, 0x00, 0x00, // 1
					DT 0x46, 0x49, 0x51, 0x61, 0x42		;0x42, 0x61, 0x51, 0x49, 0x46, // 2
					DT 0x36, 0x49, 0x49, 0x41, 0x22		;0x22, 0x41, 0x49, 0x49, 0x36, // 3
				   	DT 0x10, 0x7f, 0x12, 0x14, 0x18		;0x18, 0x14, 0x12, 0x7F, 0x10, // 4
					DT 0x39, 0x45, 0x45, 0x45, 0x27		;0x27, 0x45, 0x45, 0x45, 0x39, // 5
				 	DT 0x32, 0x49, 0x49, 0x49, 0x3e		;0x3E, 0x49, 0x49, 0x49, 0x32, // 6
					DT 0x07, 0x09, 0x71, 0x01, 0x01		;0x01, 0x01, 0x71, 0x09, 0x07, // 7
					DT 0x36, 0x49, 0x49, 0x49, 0x36		;0x36, 0x49, 0x49, 0x49, 0x36, // 8
					DT 0x3e, 0x49, 0x49, 0x49, 0x26		;0x26, 0x49, 0x49, 0x49, 0x3E, // 9	
				
		

					;cargar un byte en una variable "ej: var llamada dato"



inicio					
				    pageselw  tabla         
					movf contador,0
					call tabla
					movwf dato
					call enviar_8bits
					;poner en alto RBO	"habilita primera fila
					bcf	portb,0
					bsf	porta,2 ;habilita strobe
	    			movlw .50
					movwf a
load				movlw .50
					movwf c
dec					decfsz c,1
					goto dec
					decfsz a,1
					goto load
					bsf portb,0
					bcf	porta,2 ;deshabilita strobe
					;cargar 0x36 en dato




					incf contador,1
				    pageselw  tabla         
					movf contador,0
					call tabla
					movwf dato
					call enviar_8bits
					;poner en alto RB1	"habilita segunada fila
					bcf	portb,1
					bsf	porta,2 ;habilita strobe
	  			 	movlw .50
					movwf a
load1				movlw .50
					movwf c
dec1				decfsz c,1
					goto dec1
					decfsz a,1
					goto load1
					bsf portb,1
					bcf	porta,2 ;deshabilita strobe
		
					;cargar 0x47 dato


					incf contador,1
				    pageselw  tabla        
					movf contador,0
					call tabla		
					movwf dato
					call enviar_8bits
					;poner en alto RB2	"habilita tercera fila
					bcf	portb,2
					bsf	porta,2 ;habilita strobe
	   				movlw .50
					movwf a
load2				movlw .50
					movwf c
dec2				decfsz c,1
					goto dec2
					decfsz a,1
					goto load2
					bsf portb,2
					bcf	porta,2 ;deshabilita strobe
		
		
					;cargar 0x82 en dato


					incf contador,1
				    pageselw  tabla         
					movf contador,0
					call tabla		
					movwf dato
					call enviar_8bits
					;poner en alto RB3	"habilita cuarta fila
					bcf	portb,3
					bsf	porta,2 ;habilita strobe
	   				movlw .50
					movwf a
load3				movlw .50
					movwf c
dec3				decfsz c,1
					goto dec3
					decfsz a,1
					goto load3
					bsf portb,3
					bcf	porta,2 ;deshabilita strobe
		
		
					;cargar 0x30 en dato
					incf contador,1
				    pageselw  tabla
					movf contador,0
					call tabla		
					movwf dato
					call enviar_8bits
					;poner en alto RB4	"habilita quinta fila
					bcf	portb,4
       				bsf	porta,2 ;habilita strobe
	   			    movlw .50
					movwf a
load4				movlw .50
					movwf c
dec4				decfsz c,1
					goto dec4
					decfsz a,1
					goto load4
					bsf portb,4
					bcf	porta,2 ;deshabilita strobe
		
		
					;cargar 0x74 dato


			    	incf contador,1
				    pageselw  tabla
					movf contador,0
					call tabla		
					movwf dato
					call enviar_8bits
					;poner en alto RB5	"habilita sexta fila
					bcf	portb,5
					bsf	porta,2 ;habilita strobe
	   			    movlw .50
					movwf a
load5				movlw .50
					movwf c
dec5				decfsz c,1
					goto dec5
					decfsz a,1
					goto load5
					bsf portb,5
					bcf	porta,2 ;deshabilita strobe
		
		
					;cargar 0x60 en dato


;					incf contador,1
;					movf contador,0
;					call tabla		
;					movwf dato
;					call enviar_8bits
;					;poner en alto RB6	"habilita septima fila
;					bcf	portb,6
;					bsf	porta,2 ;habilita strobe
;	    			movlw .5
;					movwf a
;load6				movlw .50
;					movwf c
;dec6				decfsz c,1
;					goto dec6
;					decfsz a,1
;					goto load6
;					bsf portb,6
;					bcf	porta,2 ;deshabilita strobe
		
		
					;cargar 0x90 dato


;					incf contador,1
;					movf contador,0
;					call tabla		
;					movwf dato
;					call enviar_8bits
					;poner en alto RB7	"habilita octava fila
;					bcf	portb,7
;					bsf	porta,2 ;habilita strobe
;	    			movlw .5
;					movwf a
;load7				movlw .50
;					movwf c
;dec7				decfsz c,1
;					goto dec7
;					decfsz a,1
;					goto load7
;					bsf portb,7
;					bcf	porta,2 ;deshabilita strobe
					movf comparar_contador,0
					subwf contador
					btfsc estado,2
					goto clear_contador
					incf contador,1
		
					goto inicio



enviar_8bits

					BTFSC dato,0     ;"probar el bit 0 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,0
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,1     ;"probar el bit 1 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,1
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,2     ;"probar el bit 2 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,2
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,3     ;"probar el bit 3 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,3
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,4     ;"probar el bit 4 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,4
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,5     ;"probar el bit 5 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,5
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,6     ;"probar el bit 6 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,6
					call enviar_cero ;"saltar al label enviar_cero"
					BTFSC dato,7     ;"probar el bit 7 de dato"
					call enviar_uno	 ;"saltar al label "enviar_uno"
					BTFSS dato,7
					call enviar_cero ;"saltar al label enviar_cero"

					return		  	 ;"regresar a la linea de donde se llamo."


enviar_uno
					;poner en 1 RA0 pin DATA del pic
					bsf porta,0
					;poner en 1 el clock del pic RA1
					bsf	porta,1
					;esperar 10us segundos
					goto retardo
					;poner en bajo el clock RA1
des_clock			bcf porta,1
					return		;"regresar a rutina de donde fue llamada esta"

enviar_cero

					;poner en 0 RA0 pin DATA del pic
					bcf porta,0
					;poner en uno el clock del pic RA1
					bsf	porta,1
					;esperar 10us segundos
					goto retardo1
					;poner en bajo el clock RA1
des_clock2			bcf porta,1
					Return		;"regresar a rutina de donde fue llamada esta"


retardo 			movlw .2
					movwf a
load8				movlw .5
					movwf c
dec8				decfsz c,1
					goto dec8
					decfsz a,1
					goto load8
					goto des_clock	



retardo1 			movlw .2
					movwf a
load9				movlw .5
					movwf c
dec9				decfsz c,1
					goto dec9
					decfsz a,1
					goto load9
					goto des_clock2	
				
		end
