que tal , tengo una duda ,soy nuevo en micros, como puedo modificar código de un pic a otro f887 a f877A
específicamente con el teclado matricial, me presenta errores con ansel y anselh entre otras , lo demas no es tanto problema
espero haberme explicado bien
tengo lo siguiente:
include <p16f887.inc>
Cblock 0x20
reg1,reg2,reg3,respaldo
endC
org 0x00
bsf STATUS,RP0
clrf TRISA
movlw 0xF0
movwf TRISB ; de b0 al b3 son salidas, del b4 al b7 son entradas
bcf OPTION_REG,7 ; el para que se activen las resistencias de pull-on que estan del b4 al b7 del puerto B
bsf STATUS,RP1
clrf ANSEL
clrf ANSELH
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTA
main call barre ; no sale de barre si no se oprime nada
goto main
barre
movlw 0xFE ; E seria 1110 de las de salida
call esc_lee ; vemos si en E se apreto algun boton
btfss STATUS,2 ; checamos la bandera z
goto qtecla ; si z=0 se primio una tecla mientras E
movlw 0xFD ; checamos D seria 1101 de la salida
call esc_lee ; vemos si en D se apreto algun boton
btfss STATUS,2 ; z?
goto qtecla ; z=0 vamos a rebisar que boton se oprimio estando en D
movlw 0xFB ; B es 1011
call esc_lee ; revisamos si estando en B se oprimio
btfss STATUS,2 ;z=?
goto qtecla ;Z=0 se oprimio estando en B
goto barre
esc_lee
movwf PORTB ; ponemos el valor en PORTB, recordar que lo que importa mas son los primeros 4 bits
movf PORTB,0 ; lo del PORTB lo ponemos en W, no es lo mismo que el anterior ya que si esta oprimido algo nos lo refleja del b4 al b7
movwf respaldo ; se guarda en respaldo, para salvar direccion si esque sirve
andlw 0xF0 ; con and se enmascara, solo del b4 al b7 , lo demas es 0
xorlw 0xF0 ;si el resultado no es cero, si se oprimio tecla
return ; regresa a su posicion en barre
qtecla call retardo ; para el antirebote
movf respaldo,0 ; si Z=0 pasamos respaldo a W y lo comparamos con el siguiente, y asi nos vamos
xorlw 0x7E ;1
btfsc STATUS,2 ; checamos la bandera z
goto sec1 ; si hay un 1, se apreto el boton 1, y mandamos a llamar a la secuencia correspondiente
movf respaldo,0
xorlw 0x7D ;2
btfsc STATUS,2
goto sec2
movf respaldo,0
xorlw 0x7B ; 3
btfsc STATUS,2
goto sec3
movf respaldo,0
xorlw 0xBE ;4
btfsc STATUS,2
goto sec4
movf respaldo,0
xorlw 0xBD ;5
btfsc STATUS,2
goto sec5
movf respaldo,0
xorlw 0xBB ;6
btfsc STATUS,2
goto sec6
return
sec1 bcf STATUS,2
movlw 0x01 ; cargamos un 1
movwf PORTA ; lo ponemos en la salida para iniciar
call retardo
c1 rlf PORTA,1 ; recorremos el 1 hacia la izquierda y lo guardamos en el mismo PORTA
call retardo
btfss PORTA,7 ; vemos si ya llegamos hasta el bit7 para dejar de moverlo hacia la izquierda
goto c1 ; si no hemos llegado al b7 seguimos moviendo el 1 hacia la izquierda
clrf PORTA
return
sec2 bcf STATUS,2 ; limpiamos la bandera z
bsf PORTA,7 ; cargamos un 1 en el b7
call retardo
der rrf PORTA,1 ; recorremos a la derecha
call retardo
btfss PORTA,0 ; testeamos para ver si seguimos recorriendo
goto der
clrf PORTA
return
sec3 bcf STATUS,2
movlw 0x01 ; cargamos un 1
movwf PORTA ; lo ponemos en la salida para iniciar
call retardo
ciclo1 rlf PORTA,1 ; recorremos el 1 hacia la izquierda y lo guardamos en el mismo PORTA
call retardo
btfss PORTA,7 ; vemos si ya llegamos hasta el bit7 para dejar de moverlo hacia la izquierda
goto ciclo1 ; si no hemos llegado al b7 seguimos moviendo el 1 hacia la izquierda
ciclo2 rrf PORTA,1 ; si el 1 esta en b7 lo dezplazamos hacia la derecha
call retardo
btfss PORTA,0 ; checamos si el 1 llego hasta el b0
goto ciclo2 ; si no ha llegado a b0 seguimos recorriendo a la derecha
clrf PORTA
return
sec4 bcf STATUS,2 ; la misma logica que en la secuencia 3 pero empezamos con recorrido a la derecha
bsf PORTA,7
call retardo
cl14 rrf PORTA,1
call retardo
btfss PORTA,0
goto cl14
cl24 rlf PORTA,1
call retardo
btfss PORTA,7
goto cl24
clrf PORTA
return
sec5 bcf STATUS,2
movlw 0x81
movwf PORTA ; ponemos en la salida 10000001
call retardo
movlw 0x42
movwf PORTA ; ponemos en la salida 01000010
call retardo
movlw 0x24
movwf PORTA ; ponemos en la salida 00100100
call retardo
movlw 0x18
movwf PORTA ; ponemos en la salida 00011000
call retardo
clrf PORTA
return
sec6 bcf STATUS,2
movlw 0x18
movwf PORTA ; ponemos en la salida 00011000
call retardo
movlw 0x24
movwf PORTA ; ponemos en la salida 00100100
call retardo
movlw 0x42
movwf PORTA ; ponemos en la salida 01000010
call retardo
movlw 0x81
movwf PORTA ; ponemos en la salida 10000001
call retardo
clrf PORTA
return
retardo
movlw .30
movwf reg1
a1 movlw .20
movwf reg2
a2 movlw .20
movwf reg3
a3 decfsz reg3,1
goto a3
decfsz reg2,1
goto a2
decfsz reg1,1
goto a1
return
end