Programa en ensamblador para pic16f88

Hola, estoy haciendo el cambio del pic16f84a al pic16f88. Para ésto quiero cargar el siguiente programa en assembler:

Código:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PROGRAMA CON ENTRADAS DE (RA0 A RA4) Y SALIDAS EN (RB0 A       RB4)                                                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;CONFIGURACIÓN PARA PIC16F88
;

          __CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _MCLR_OFF & _LVP_ON & _INTRC_IO
    __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
     
    LIST P=16F88
    INCLUDE <P16F88.INC>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;CÓDIGOS DE PROGRAMA
;
    ORG 0X00    ; DIRECCIÓN DE INICIO DEL PROGRAMA
INICIO    BSF STATUS,RP0    ; SET EN RP0 DE STATUS PARA ENTRAR AL BANCO 1
    CLRF TRISB    ; COLOCOAMOS CEROS EN TRISB PARA CONFIGURARLO COMO ENTRADAS            
    MOVLW D'255'    ; CARGAMOS W CON UNOS (255 DECIMAL)
    MOVWF TRISA    ; MOVEMOS LOS DATOS DE W A TRISA PARA CONFIGURARLO COMO SALIDAS 
    BCF STATUS,RP0    ; LIMPIAMOS RP0 DE STATUS PARA ENTRAR EN EL BANCO 0
SALIDA
    MOVF PORTA,0    ; CARGAMOS LOS DATOS DEL PUERTO A EN EL REGISTRO W
    MOVWF PORTB    ; CARGAMOS LOS DATOS DEL REGISTRO W EN EL PUERTO B (SALIDAS)
    GOTO SALIDA    ; ENTRAMOS EN BUCLE INFINITO CON LA ETIQUETA "SALIDA"
    END        ;
Ya lo probé en el 16f84a y funciona bien, pero lo he cargado varias veces en proteus con el 16f88, y no me funciona, también lo he cargado en el pic físicamente, pero obtengo el mismo resultado. Quiero utilizar éste microcontrolador empleando el oscilador interno (lo que se supone ya establecí en la palabra de configuración), pero sospecho que es ésto lo que causa la falla. Ya busqué en el datasheet y en cuanto a la palabra de configuración creo que no hay errores, pero no sé si se deban de escribir algunas líneas extra para deshabilitar las funciones extra de éste pic (comparadores, etc.). Agradecería mucho si me pudieran ayudar.
 
Última edición por un moderador:
Ya lo probé en el 16f84a y funciona bien, pero lo he cargado varias veces en proteus con el 16f88, y no me funciona, también lo he cargado en el pic físicamente, pero obtengo el mismo resultado. Quiero utilizar éste microcontrolador empleando el oscilador interno (lo que se supone ya establecí en la palabra de configuración), pero sospecho que es ésto lo que causa la falla. Ya busqué en el datasheet y en cuanto a la palabra de configuración creo que no hay errores, pero no sé si se deban de escribir algunas líneas extra para deshabilitar las funciones extra de éste pic (comparadores, etc.). Agradecería mucho si me pudieran ayudar.

Saludos.
Hay algo que no has tomado en cuenta con este PIC.
Este PIC tiene ADC en el puerto A y el puerto B, por lo tanto debes establecer que usaras esos puertos digitales.
Para eso debes usar el registro ANSEL

También mencionas que quieres usar el oscilador interno.
Para configurar el oscilador interno debes usar el registro OSCCON

La palabra de configuración en este PIC es muy importante, y debe estar bien definida.

En tu programa veo que lo que quieres realizar, es el movimiento de los bits del puerto A al puerto B.
Así que para que tu programa funcione, debe quedar de esta forma...
Código:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;PROGRAMA CON ENTRADAS DE (RA0 A RA4) Y SALIDAS EN (RB0 A       RB4)                                                        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
    LIST P=16F88
    INCLUDE <P16F88.INC>

;CONFIGURACIÓN PARA PIC16F88
     __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
     __CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF
    errorlevel    -302
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;CÓDIGOS DE PROGRAMA
;
    ORG 0X00    ; DIRECCIÓN DE INICIO DEL PROGRAMA
INICIO    BSF STATUS,RP0    ; SET EN RP0 DE STATUS PARA ENTRAR AL BANCO 1
    CLRF TRISB    ; COLOCOAMOS CEROS EN TRISB PARA CONFIGURARLO COMO ENTRADAS            
    MOVLW D'255'    ; CARGAMOS W CON UNOS (255 DECIMAL)
    MOVWF TRISA    ; MOVEMOS LOS DATOS DE W A TRISA PARA CONFIGURARLO COMO SALIDAS
    movlw    b'1110110'    ; Reloj interno estable a 8MHz
    movwf    OSCCON
    banksel    ANSEL
    clrf    ANSEL
    BCF STATUS,RP0    ; LIMPIAMOS RP0 DE STATUS PARA ENTRAR EN EL BANCO 0
    clrf    PORTB

SALIDA
    MOVF PORTA,0    ; CARGAMOS LOS DATOS DEL PUERTO A EN EL REGISTRO W
    MOVWF PORTB    ; CARGAMOS LOS DATOS DEL REGISTRO W EN EL PUERTO B (SALIDAS)
    GOTO SALIDA    ; ENTRAMOS EN BUCLE INFINITO CON LA ETIQUETA "SALIDA"
    END        ;
Coméntanos si con estos cambios al programa, logras que te funcione.

Suerte.
 
Última edición:
Hola, gracias por la ayuda. He estado un poco ocupado y no he probado el circuito físicamente, pero hice la simulación en proteus y surgió otro problema; cuando activo uno de los switches a la entrada, todas las salidas se activan, y aunque desactive el interruptor, así se quedan.
Al final gregué dos líneas:
clf porta
clf portb
Con ésto funciona parcialmente bien, porque aunque ahora se activan la salidas correspondientes a cada botón, todas se quedan parpadeando, espero que sea sólo el simulador. Tan pronto me sea posible armo el circuito físicamente y te aviso si ya quedó.
 
Algo debes estar haciendo mal, y seguramente son tus conexiones.

Adjunto la simulación para que veas como debe estar conectado el PIC para esta prueba.

Nota:
Físicamente tampoco debe tener ningún problema.

Saludos.
 

Adjuntos

  • 16F88 Simulación.rar
    12.7 KB · Visitas: 58
Algo debes estar haciendo mal, y seguramente son tus conexiones.

Adjunto la simulación para que veas como debe estar conectado el PIC para esta prueba.

Nota:
Físicamente tampoco debe tener ningún problema.

Saludos.

Gracias de nuevo, ya hice la prueba con el circuito físico y funciona a la perfección, mi circuito armado en proteus estaba mal.
 
Atrás
Arriba