TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: laluchi en 23 de Octubre de 2008, 22:07:38
-
Hola!
Estoy con un proyecto y utilizo un PIC 16F627A.
Necesito usar 10 entradas y 3 salidas.
Pero el programa por alguna razon no me funciona cuando seteo 12 entradas y 4 salidas. Por el contrario el programa SI funciona cuando pongo 8 entradas y 8 salidas.
Aca les paso el comienzo de los dos programas. El primero anda Perfecto, pero el segundo no funciona. Y lo unico que cambio es lo que se ve distinto.
;CON ESTE COMIENZO EL PROGRAMA que ANDA BIEN
org 0x00
INI:
CLRF 0x05;
MOVLW 0x07;
MOVWF 0x1F;
BCF 0x03,6;
bsf 0x03,5;
movlw 0x00 ;0000 0000 en w
movwf 0x05 ;Port A Salida
movlw 0xFF ;0000 0000 en w
movwf 0x06 ;Port B entrada
bcf 0x03,5 ;a banco 0
movlw 0x00 ;0000 0000 en w
movwf 0x05 ;inicializo portA todo en 0
bcf 0x05,0 ;inicializo RA0 en 0
bsf 0x05,3 ; RA3 en 1
bsf 0x05,2 ; RA2 en 1
bsf 0x05,1 ; RA1 en 1
COMIENZO:
.................................................
ahora publico el comienzo del programa que no funciona correctamente:
;aca comienza el prog q anda mal
org 0x00
INI:
CLRF 0x05;
MOVLW 0x07;
MOVWF 0x1F;
BCF 0x03,6;
bsf 0x03,5;
movlw 0x0F ;0000 1111 en w
movwf 0x05 ;Pongo RA0-RA3 a salidas
; RA4-RA7 entradas
movlw 0xFF ;1111 1111 en w
movwf 0x06 ;Pongo RB0-RB7 en entradas
bcf 0x03,5 ;a banco 0
bcf 0x05,0 ;inicializo RA0 en 0
bsf 0x05,3 ; RA3 en 1 (SYNC) ENVIO
bsf 0x05,2 ; RA2 en 1 (DATOS)ENVIO
bsf 0x05,1 ; RA1 en 1 (CLK) ENVIO
..............................................
Eso es todo
Alguien sabe cual puede ser el prob? Muchas Gracias
-
Según el cambio estas colocando como entrada RA0-3 y RA4-7 como salida:
movlw 0x0F ;0000 1111 en w
movwf 0x05 ;Pongo RA0-RA3 a salidas
; RA4-RA7 entradas
Tal vez los pines que usas como entradas (RA0-3) no les has puesto sus resistencias pull-up (10K por ejemplo).
Si quieres que RA0-3 sea salida y RA4-7 sea entrada entonces debes hacer esto:
movlw 0xF0 ;1111 0000 en w
movwf 0x05 ;Pongo RA0-RA3 a salidas
; RA4-RA7 entradas
Javicho.
-
Holas laluchi!!
Te recomiendo que al momento de pegar un programa en assembler, ocupes los nombres de los registros en vez de las direcciones en hexa, ya que es mas amigable a la lectura y se entiende mas rápido lo que hace el código, y por lo mismo puedes obtener ayuda rapido.
Por lo que veo en tus programas, puedes tener conflictos con los comparadores análogos, que ocupan los pines 0 al 3 de puerto A (RA0 a RA3), y vienen por defecto activados, y dichos pines vienen como entradas analogicas.
Para utilizarlos como entrada o salida digital, debes configurarlos en el registro CMCON (dirección 0x1F del banco 0) con los bits CM0, CM1 y CM2 (0,1 y 2 respectivamente). Para dejar todo el puerto A como puerto digital, debes dejar estos bits en uno, según el cuadro que aparece en el datasheet, en el capítulo 10 "Comparator Module".
Espero te sirva de algo mi aporte, y saludos a quienes nos leen.