


Acredito que o problema seja algum erro de definição no input( sou novo na programação de PIC com CCS) e consequentemente não funciona o chaveamento dos pinos a,b,e,f,g nos respectivos comandos if.
Visto que só vejo em programas if(input(pin_b0) e não if(a==0) //(onde a=input(pin_b0) // talvez este seja o erro .
Poderiam me confirmar?
PS. é um programa para servomotor
- Código: Selecionar todos
#include<16f628a.h>
#fuses NOWDT,NOPROTECT,PUT,NOLVP,MCLR,INTRC_IO
#use delay(clock=4000000)
#use fast_io(b)
long int valor;
long int i;
/* ************************************* */
// neutro 1.5 ms
void neutro() //fun��o neutro ok
{
output_high(pin_b7);
delay_us(500); //t_high=1.5 ms
delay_ms(1);
output_low(pin_b7);
for(i=0;i<180;i++) // t_low=20,1 ms
{
delay_us(100);
}
}
/* ************************************* */
// aumento de pulsos
int aumenta(int valor)//fun��o para aumentar o ciclo
{
if(valor>=20) //ok
{
output_high(pin_b7); //t_high=2ms
delay_ms(2);
output_low(pin_b7);
for(i=0;i<180;i++) // t_low=20,1 ms
{
delay_us(100);
}
}
else //ok
{
output_high(pin_b7);
for(i=0;i<valor;i++) //crescente
{
delay_us(100);
}
output_low(pin_b7);
for(i=0;i<180;i++) // t_low=20.1 ms
{
delay_us(100);
}
}
return valor;
}
/* ************************************* */
//Diminui ospulsos
int diminui(valor)
{
if(valor<=10)
{
output_high(pin_b7); // t_high=1ms
delay_ms(1);
output_low(pin_b7);
for(i=0;i<180;i++) // t_low=20.1 ms
{
delay_us(100);
}
}
else
{
output_high(pin_b7);
for(i=0;i<valor;i++)
{
delay_us(100);
}
output_low(pin_b7);
for(i=0;i<180;i++) // t_low=20,5 ms
{
delay_us(100);
}
return valor;
}
}
/* ************************************* */
// Escrita em eprom
int write_eprom()
{
write_eeprom(0,valor);
}
/* ************************************* */
// Leitura em eprom
int read_eprom()
{
int eprom;
eprom=read_eeprom(0);
if(eprom==15)
{
neutro();
}
else if(eprom>15)
{
valor=eprom;
aumenta(valor);
}
else if(eprom<15)
{
valor=eprom;
diminui(valor);
}
}
/* ************************************* */
// Fun��o principal
void main()
{
int a,b,c,d,e,f,g;
set_tris_b(0x7F);
port_b_pullups(true);
valor=15;
a=input(pin_b0); //esquerda
b=input(pin_b1); //direita
c=input(pin_b2); //up - ainda não funcional
d=input(pin_b3); //down -ainda não funcional
e=input(pin_b4); //neutro
f=input(pin_b5); //write_eprom
g=input(pin_b6); //read_eprom
output_low(pin_b7);
while(true)
{
if(a==0 && b==1 && c==1 && d==1 && e==1 && f==1 && g==1)
{
aumenta(valor);
valor=valor+1;
}
else if(a==1 && b==0 && c==1 && d==1 && e==1 && f==1 && g==1)
{
diminui(valor);
valor=valor-1;
}
else if(a==1 && b==1 && c==1 && d==1 && e==0 && f==1 && g==1)
neutro();
else if(a==1 && b==1 && c==1 && d==1 && e==1 && f==0 && g==1)
write_eprom();
else if(a==1 && b==1 && c==1 && d==1 && e==1 && f==1 && g==0)
read_eprom();
else if(a==1 && b==1 && c==1 && d==1 && e==1 && f==1 && g==1)
{
delay_us(1);
output_low(pin_b7);
}
}
}