Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
20/07/2011 #1


Problema con 16F628A y puerto A
Hola, estoy desarrollando un programa para un pic 16f628a.

En el proteus simulando me lo hace todo bien. Consta de un indicador de marchas entonces en el proteus como dije funciona bien pero a la hora de la verdad los puertos RA0, RA1, RA2, RA3 no funcionan. lo tengo configurado como entrada pero no hace nada. dejo el programa haber si alguien me puede echar una mano. Hay algun problema con la seleccion de puertos? GRACIAS

List p=16F628a ;Tipo de procesador
include "P16F628a.INC" ;Definiciones de registros internos
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF
f EQU 1
d1 EQU 10Ch
d2 EQU 10Eh
d3 EQU 10Fh

org 0x00 ;Vector de Reset
goto Inicio

org 0x05 ;Salva el vector de interrupción

Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'10000000'
movwf TRISB ;Puerta A se configura como entrada
movlw b'00111111'
movwf TRISA ;Puerta A se configura como entrada
bcf STATUS,RP0 ;Selecciona banco 0

movlw b'00111001' ; C
movwf PORTB
Call pausa
movlw b'00111000' ; L
movwf PORTB
call pausa
movlw b'00111110' ; U
movwf PORTB
call pausa
movlw b'01111111' ; B
movwf PORTB
call pausa
movlw b'00110111' ; M
movwf PORTB
call pausa
movlw b'01111001' ; E
movwf PORTB
call pausa
movlw b'01111101' ; G
movwf PORTB
call pausa
movlw b'01110111' ; A
movwf PORTB
call pausa
movlw b'01010100' ; N
movwf PORTB
call pausa
movlw b'01111001' ; E
movwf PORTB
call pausa
movlw b'0000110' ; I
movwf PORTB
call pausa
movlw b'0000000' ; I
movwf PORTB
call pausa
movlw b'0000110' ; I
movwf PORTB
call pausa

;999997 cycles


marcha: nop ;Refrescar el WDT
btfsc PORTA,0 ;Comprueba el estado de RA0
goto primera ;Si está activo salta a primera
btfsc PORTA,1 ;Comprueba el estado de RA1
goto segunda ;Si está activo salta a segunda
btfsc PORTA,2 ;Comprueba el estado de RA2
goto tercera ;Si está activo salta a tercera
btfsc PORTA,3 ;Comprueba el estado de RA3
goto cuarta ;Si está activo salta a cuarta
btfsc PORTA,4 ;Comprueba el estado de RA4
goto quinta ;Si está activo salta a cuarta
btfsc PORTB,7
goto sexta
btfsc PORTA,5
goto rear
movlw b'01010100' ;Neutro
movwf PORTB ;Si están todas a 0 aparece
goto marcha

rear movlw b'01110111'
movwf PORTB
goto marcha

sexta movlw b'01111101'
movwf PORTB
goto marcha

quinta movlw b'01101101'
movwf PORTB
goto marcha

cuarta movlw b'01100110'
movwf PORTB
goto marcha

tercera movlw b'01001111'
movwf PORTB
goto marcha

segunda movlw b'01011011'
movwf PORTB
goto marcha

primera movlw b'00000110'
movwf PORTB
goto marcha

pausa movlw 0x08
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
return
end ;Fin del programa fuente
20/07/2011 #2

Avatar de pepechip

Es un programa bastante simple.
Te falta lo siguiente:

movlw 0x07 ;deshabilita comparadores analogicos
movwf CMCON
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.