Programar MAX7219 con pic16F88 en lenguaje ensamblador

#1
Hola, tengo unos problemas al programar el MAX7219. Escribí el siguiente código:
Código:
iniciar
 		bsf			STATUS,RP0
		movlw		.255
		movwf		SPBRG
		bcf			STATUS,RP0
		movlw		b'00010000'
		movwf		PORTB
		bsf			RCSTA,SPEN
		bsf			STATUS,RP0
		movlw		b'10110010'
		movwf		TXSTA
		bcf			STATUS,RP0

transmit
		bcf			PORTB,3
		movf		regbyte,W
		movwf		TXREG		
		bsf			STATUS,RP0		

send1
		btfss		TXSTA,TRMT	
		goto		send1			
		bcf			STATUS,RP0	
		movf		databyte,W	
		movwf		TXREG	
		bsf			STATUS,RP0		

send2
		btfss		TXSTA,TRMT		
		goto		send2			

		bcf			STATUS,RP0	
		bsf			PORTB,3			
		return
Tengo esto escrito, pero no funciona, y no se si estoy bien encaminado, o si estoy haciendo cualquier cosa, no tengo mucha idea de como escribir el código, tal vez alguno conozca una forma más sencilla de programar el MAX7219.

Solo necesito una pequeña ayuda (por ejemplo, que la matriz muestre 3 LED cualquiera siempre prendidos o lo que sea), luego puedo averiguar por mi cuenta como programar lo demás (conectar varios MAX7219, escribir letras, etc). Solo necesito una base.
 
Última edición:
#2
El MAX7219 usa un protocolo serial, pero no es RS-232, sino SPI.
Así que de esa forma no lo podrás comunicar.
Lo que debes emplear, es el módulo MSSP, o crear una rutina para enviar 16 bits.
 
#3
Ahh entiendo, gracias. Una última duda entonces, el pic que estoy usando (16F88) tiene módulo SSP, y funciona solo como esclavo ¿Verdad? por lo que debería hacer un rutina para enviar 16 bits.

Esta rutina sería enviando bit por bit, habilitando y deshabilitando el clock en cada uno, y el load cada 16 bits ¿O hay alguna forma más sencilla de hacer la rutina? ¿Podría tratar de implementar la función ShiftOut en lenguaje ensamblador, o no se puede?
 
#4
Ah, entiendo, gracias. Una última duda entonces.
El PIC que estoy usando (16F88) tiene módulo SSP, y funciona sólo como esclavo ¿Verdad?
Por lo que debería hacer un rutina para enviar 16 bits.
El módulo SSP del PIC16F88 puede ser maestro o esclavo, eso se define por configuración.
Esta rutina sería enviando bit por bit, habilitando y deshabilitando el clock en cada uno, y el load cada 16 bits ¿O hay alguna forma más sencilla de hacer la rutina?
¿Podría tratar de implementar la función ShiftOut en lenguaje ensamblador, o no se puede?
Todo se puede hacer en ensamblador, de hecho todos los compiladores ensamblan.
Aunque existiendo lenguajes de alto nivel como el C, o el Basic de donde es esa rutina "ShifOut", no entiendo por qué a estas alturas, te quieres complicar las cosas con el ensamblador.

Sin embargo, te ahorraré el trabajo con una librería para el MAX7219
La encontré buscando entre las telarañas de mis carpetas. :)
 

Adjuntos

#5
¡Muchísimas gracias! Era la primera vez que usaba una librería en ensamblador así que me costó un poco y surgieron algunas dudas, pero nada que un poco de lectura y tiempo no solucionaran.

Y la verdad que si, prefiero C para programar, pero quería aprender a hacer esto en ensamblador.

De nuevo, ¡muchas gracias!
 

Arriba