Configurar pin clock del 16f628 en CCS

#1
Hola amigos del foro
En estos momentos estoy haciendo unas prácticas con el 16f628A y el CCS, me dio por utilizar un 4017 y la verdad me confundí.
Me explico:
El Pic manda la señal CLOCK al 4017 para que haga su función, para eso escogimos un pin (A0), y en el puerto B lo utilizo para que me prenda unos leds a diferente tiempo y diferente orden, No se cómo hacer para que el Pic siga haciendo el CLOCK por el pin (A0) de forma independiente y no se deje afectar por las instrucciones que doy al puerto B
Espero que me hayan entendido y agradezco por su ayuda.
Saludos
Código:
#Include <16F628A.h>                                                                 
#Fuses INTRC_IO, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOCPD, NOPROTECT                   
#Use Delay (Clock=4000000)                                                           
#Use Fast_Io(B)                                                                    
#Use Fast_Io(A)
#define clock PIN_A0
long stop = 100;


void CLK(void)
{

output_bit(CLOCK,0);
delay_us(2);
output_bit(CLOCK,1);

}
void derecha(void)
{
CLK();
output_high(PIN_b0);
CLK();
delay_ms(stop);
CLK();
output_low(PIN_b0);
CLK();

output_high(PIN_b1);
delay_ms(stop);
output_low(PIN_b1);

output_high(PIN_b2);
delay_ms(stop);
output_low(PIN_b2);

output_high(PIN_b3);
delay_ms(stop);
output_low(PIN_b3);

output_high(PIN_b4);
delay_ms(stop);
output_low(PIN_b4);

output_high(PIN_b5);
delay_ms(stop);
output_low(PIN_b5);

output_high(PIN_b6);
delay_ms(stop);
output_low(PIN_b6);

}


    void main(void){

      set_tris_a(0); 
      set_tris_b(0);   
                do{
           CLK();
           derecha();
             CLK();
            }while(TRUE);
                }
 
#2
Puedes usar este ejemplo para generar el pulso de reloj mientras corre tu programa.
En ese ejemplo se usa la interrupción por TMR1 y también un cristal externo, pero se puede configurar para hacerlo internamente.
Solo hay que modificar un poco el programa.

Saludos.
 
#3
Lo que estás discribiendo como una meta a lograr con tu programa se hace facilmente empleando interrupciones, como indicaste hay dos rutinas en el PIC, la del "clock" se "dispara" ciclicamente cada cierto tiempo, independientemente de lo que esté haciendo la otra rutina, la cual se detiene/congela momentaneamente, terminadas las operaciones del "clock" se retoma la rutina que se detuvo.
Investiga el tema "interrupciones" en los pic.
 
#4
Hola amigos del foro…..
Gracias por los comentarios……….y pues bueno me di a la tarea de estudiar un poco las interrupciones … y pues también viendo el ejemplo de D@rkbytes me anime a hacer algunas modificaciones a mi código…….y me consto arto trabajo y neuronas je je je pero me funciono como yo quería, (lo probé en la simulación y el físico )
Código:
#Include <16F628A.h>                                                                 
#Fuses INTRC_IO, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOCPD,NOPROTECT                  
#Use Delay (Clock=4000000)                                                         
#Use Fast_Io(B)                                                                   
#Use Fast_Io(A)     

void config(void){
      set_tris_a(0x00);
      set_tris_b(0x00);
      output_a(0x00);
      output_b(0x00);
      SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT);
      SET_TIMER0(317);
}


void ejemplo(void)
{
output_high(PIN_b0);
output_high(PIN_b1);
delay_ms(500);
output_low(PIN_b1);
delay_ms(1000);
output_high(PIN_b0);
output_high(PIN_b1);
delay_ms(500);
output_low(PIN_b0);
delay_ms(1000);

}


#INT_TIMER0
void Interrupcion_x_desbordamiento(void){
      output_toggle(PIN_a0);
      SET_TIMER0(317);
}

void main(void){
      config();
      ENABLE_INTERRUPTS(GLOBAL);
      ENABLE_INTERRUPTS(INT_TIMER0);
      
do{                       
      ejemplo();
      }while(TRUE);
while(TRUE);
}
Saludos
 

Temas similares

Arriba