// discadora por pulso via pc
//Autor :Aguivone
//data : 29/01/2008
//..............................................................
#include <16f877A.h>
#fuses NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=4M) // usado nos delays, define o CLOCK usado. No caso, 4_MHz
#use RS232(baud=9600, parity=N, bits=8, xmit=PIN_C6,rcv=PIN_C7)
#locate tx_reg= 0x19
#locate rx_reg= 0x1A
int digito[20],max,aux,a,b;
long int p;
int16 reg;
boolean flag,ok,fim;
char dado;
//funçoes auxiliares...................................
void pulso(void)
{
output_high(PIN_B4);
delay_ms(30);
output_low(PIN_B4);
delay_ms(60);
}
void tempo(long int valor)
{
p=0;
reg=0;
fim=0;
while(reg!=1)
{
delay_ms(1);
if(fim==1||p==valor)
{
reg=1;
}
p++;
}
}
///interrupção.........................................
#int_RDA
void recebido(void)
{
dado = rx_reg;
if(flag==1)
{
switch(dado)
{
case '0':digito[aux]=10;
break;
case '1':digito[aux]=1;
break;
case '2':digito[aux]=2;
break;
case '3':digito[aux]=3;
break;
case '4':digito[aux]=4;
break;
case '5':digito[aux]=5;
break;
case '6':digito[aux]=6;
break;
case '7':digito[aux]=7;
break;
case '8':digito[aux]=8;
break;
case '9':digito[aux]=9;
break;
case 'f':
{
max=aux;
flag=0;
ok=1;
aux=0;
}
break;
}
aux++;
}
if(dado =='*')
{
flag=1;
aux=0;
}
if(dado=='#')
{
fim=1;
}
}
//função principal.............................................
void main(void)
{
port_b_pullups(FALSE);
enable_interrupts(global);
enable_interrupts(int_rda); //interrupção de recebimento
for(a=0;a<=20;a++) { digito[a]=0; } for(;;) { if (ok==1) { output_high(PIN_B4); tempo(2500); for(b=0;b<=max;b++) { if(digito[b]>0)
{
for(a=1;a<=digito[b];a++)
{
pulso();
}
output_high(PIN_B4);
tempo(620);
}
else
{
output_high(PIN_B4);
}
}
output_high(PIN_B4);
tempo(60000); //espera 1 minuto
printf("ok"); //tempo para atender e depois desliga
for(a=0;a<=20;a++)
{
digito[a]=0;
}
output_low(PIN_B4);
aux=0;
ok=0;
flag=0;
}
}
}
Engenheiro eletricista - Desenvolvedor de hardware. Protótipos e projetos. Desenvolvimento de software de interface.(aguivone@gmail.com)
quarta-feira, 8 de setembro de 2010
Discadora por pulso via pc (com pic)
Assinar:
Postar comentários
(
Atom
)
Nenhum comentário :
Postar um comentário
olá,digite aqui seu comentário!