Autor Tema: Ayuda con semaforo en c y hi-tech  (Leído 1670 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado maniviesa

  • PIC10
  • *
  • Mensajes: 2
Ayuda con semaforo en c y hi-tech
« en: 25 de Diciembre de 2009, 07:58:40 »
Muy buenas gente, tengo un problemilla a la hora de hacer un semaforo basico.
Es para un proyecto y me han pedido que lo hago con el plugin Hi-tech y en c, el problema lo tengo a la hora de quedar las luces fijas un determinado tiempo.
Probe el picdel para crear un archivo delay para los rretrasos pero el programa cuando compilaba no me encontraba el archivo y eso que lo meti dentro del proyecto...
Muchas gracias de antemano por la ayuda.
Os paso el codigo que he echo:

#include   <pic.h>   
#define    PORTBIT(adr, bit) ( (unsigned)(&adr)*8 + (bit) )
#define delay_clock=4000000

void pausa (char ciclos);


main()
{
 TRISB   = 0x00;

while(1)
{
PORTB=0x01; // verde
pausa(20000000000000);
PORTB=0x02; // amarillo
pausa(500000000);
PORTB=0x04; // rojo
pausa(2000000000000);
}

}

void pausa (char ciclos)
{
char a;
a=0;                //Se inicia una variable en 0
if(a<ciclos)
{
delay_clock(200000000);   
   a++;
}
else
return;
}

Desconectado maniviesa

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con semaforo en c y hi-tech
« Respuesta #1 en: 02 de Enero de 2010, 10:15:28 »
Bueno visto el exito de la ayuda, y despues de un dia dedicandole tiempo al proyecto he llegado a la solucion del mismo.
Se trata de un semaforo, bueno de dos pq es un cruce.
He utilizado hi-tech y proteus para emplementarlo, dejo el codigo puesto.
El reloj en proteus para que se cumplieran los tiempos lo he tenido q poner a 20MHZ, gracias por las respuestas xD
Era ironia, para quien no lo piye...
#include   <pic.h>   
#define    PORTBIT(adr, bit) ( (unsigned)(&adr)*8 + (bit) )
#define TOINI 61
#define LED RB1

//-- Divisor del prescar a 256
#define T_10ms 61

#define LED RB1

void timer0_delay(unsigned char t0ini)
{
  //-- Dar valor inicial del timer
  TMR0=t0ini;
 
  //-- Flag de interrupcion a cero
  T0IF=0;

  //-- Esperar a que transcurra el tiempo indicado
  while(T0IF==0);
}

/*******************************************************/
/* Pausa                                               */
/* ENTRADA: duracion de la pausa en centesimas (10ms)  */
/*******************************************************/
void timer0_delay_long(unsigned int duracion)
{
  unsigned int i;

  for (i=0; i<duracion; i++)
    timer0_delay(T_10ms);
}

void main(void)
{
  TRISB   = 0x00;
  LED=0;
 
  //-- Configurar Timer 0
  //-- Modo temporizador
  T0CS=0; PSA=0;

  //-- Presscaler a 256
  PS2=1; PS1=1; PS0=1;

  //-- Hacer parpadear el led con periodo de 1segundo
  while(1) {
    //
   PORTB=0x91;
   timer0_delay_long(1000);
    PORTB=0x92;
   timer0_delay_long(300);
   PORTB=0x24;
   timer0_delay_long(1000);
   PORTB=0x44;
   timer0_delay_long(300);
  }
}