Estoy migrando al Pic 16F628A pero tengo la siguiente duda por lo cual escribi u programa muy sencillo de secuencia de luces para el PIC16F84A y otro para el PIC 16F628A cambiando los fuses y configurando PORTA habilitando los pines como I/O en CMCON. Lo tengo en la protoboard. Probando el circuito con 16F84A tengo que conectar una resistencia (10K) del RA5 a VDD como tiene que ser. Si algo reset con el pulsador conectado Vcc se reinicia el programa lo cual está bien. El problema es con el 16F628A no conecto ninguna resistencia, conecto la resistencia a VDD o la conecto a VCC el programa funciona, y si hago el reset con el pulsador no funciona. Es esto normal. La verdad estoy muy desconcertado, tengo tres integrados uno de esto los compre hoy pensando que pudiese ser el integrado pero nada. Gracias por su ayuda.
Código:
LIST P=16F628A
INCLUDE <P16F628A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
;**********************************************************
;** ASIGNAMOS LAS VARIABLES DE LOS REGISTROS DE RAM ***
;**********************************************************
cblock 0x21
R_ContA ; Contadores para los retardos.
R_ContB
endc
#DEFINE LED0 PORTB,0
#DEFINE LED1 PORTB,1
#DEFINE LED2 PORTB,2
#DEFINE LED3 PORTB,3
#DEFINE LED4 PORTB,4
#DEFINE LED5 PORTB,5
#DEFINE LED6 PORTB,6
#DEFINE LED7 PORTB,7
;**********************************************************
;** ESCRITURA DEL PROGRAMA DEL PIC ***
;**********************************************************
Org 0x0000
GOTO INICIO
;**********************************************************
;** CONFIGURAMOS PUERTOS DEL PIC ***
;**********************************************************
INICIO
CLRF PORTA ;Initialize PORTA by setting output data latches
MOVLW 0x7 ; Configuro Comparador Analogico
MOVWF CMCON ; V1in-=GND, V1in+=GND, C1out=Off| V2in-=GND, V2in+=GND, C2out=Off
BCF STATUS,RP1
BSF STATUS,RP0 ;SELECCIONAMOS EL BANCO 1
CLRF TRISB ;PORTB como salida
MOVLW B'01111011' ; b'00011111' d'031'
MOVWF TRISA ;PORTA como entrada
BCF STATUS,RP0 ;SELECCIONAMOS EL BANCO 0
CLRF PORTA ;PuertoA a cero
CLRF PORTB ;PuertoB a cero
BSF PORTA,2
;**********************************************************
;** EMPEZAMOS CON EL PROGRAMA ***
;**********************************************************
Principal
bsf LED0 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED0 ; Lo apaga durante la suma de los siguientes
bsf LED1 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED1 ; Lo apaga durante la suma de los siguientes
bsf LED2 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED2 ; Lo apaga durante la suma de los siguientes
bsf LED3 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED3 ; Lo apaga durante la suma de los siguientes
bsf LED4 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED4 ; Lo apaga durante la suma de los siguientes
bsf LED5 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED5 ; Lo apaga durante la suma de los siguientes
bsf LED6 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED6 ; Lo apaga durante la suma de los siguientes
bsf LED7 ; Enciende el LED
call Retardo_200ms ; durante la suma de este tiempo.
bcf LED7 ; Lo apaga durante la suma de los siguientes
call Retardo_200ms
goto Principal
; Subrutinas "Retardo_200ms" y "Retardo_100ms"-------------------------------------------
Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
movwf R_ContB ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto de retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_1ms : 2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249).
END
Adjuntos
Última edición por un moderador: