Programación Específica > Microcontroladores
Una Orientacion a Principiante
(1/1)
frnaco_0610:
este es un pequño ejemplo de hacer parpadear un led con un retardo de 1 seg pero no comete su objetivo el led se vuelve intermitente y quisiera saber que estoy haciendo mal, ahora que configuracion debo hacer en el epicwin para poder utilizar un cristal de 20Mhz
List P=16F877A
Include "P16F877A.INC"
PDel0 EQU 0x20
PDel1 EQU 0x21
PDel2 EQU 0x22
#Define BANCO_H bsf STATUS,RP1
#Define BANCO_L bcf STATUS,RP1
#Define BANCO1 bsf STATUS,RP0
#Define BANCO0 bcf STATUS,RP0
#Define BAUD D'100' ; Baud Rate Deseada en kbps
#Define FOSC D'4000' ; Frecuencia del oscillator en kHz
__config (_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC)
;) ;) no se que significa esto alguien puede ayudarme?????????
org 0
goto INICIO
;************************************************************************************************
; PROGRAMA PRINCIPAL
;************************************************************************************************
INICIO BANCO_L
BANCO1
MOVLW B'00000111'
MOVWF ADCON1 ;SELECIONO LA OPCION DE E/S DIGITALES
CLRF TRISA ;PORTA SON SALIDAS
BANCO0
CLRF PORTA
BUCLE BSF PORTA,0
CALL DEMORA
BCF PORTA,0
CALL DEMORA
GOTO BUCLE
DEMORA movlw .14 ; 1 set numero de repeticion ©
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? ©
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END
© Jonathan ©:
--- Código: Text ---__config (_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC)
Esta es la configuracion para el grabado del programa en el PIC... es lo mismo que configurar el programa con el que grabaras... aqui tienes codigo de proteccion, perro guardian, escritura en eeprom, tipo de oscilador.. etc...
Si el led se vuelve intermitente es porque los tiempo no son de un segundo... para hacer que el programa funcione a 20Mhz, solo debes variar los retardos y hacerlos mas largos... ya que en 4Mhz cada ciclo de instruccion demora 400ns (4 ciclos de reloj de 100ns) y a 20Mhz demora 50ns. Espero haberte sido de ayuda. Me dices tus dudas. Saludos! :hola:
PD: hace mucho, en este foro, deje un programita para generar retardos... eso te podria ser muy util.
Navegación
Ir a la versión completa