TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: maniviesa 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;
}
-
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);
}
}