Intentaré hacerme entender. Antes aclaro que no uso CCS, por lo tanto colocaré una especie de pseudocódigo para tratar de explicarme
void main(void)
{
//declaraciones de variables
unsigned int ciclo; // variable de 8 bits
unsigned int ciclo_anterior; // variable de 8 bits
//todas tus configuraciones, tanto de PWM como los tris
while (1) // En ccs se suele utilizar while (TRUE)
{
//si esta presionada la tecla de incrementar ciclo.....
if (ciclo <= 254) ciclo++;
//si esta presionada la tecla de decrementar ciclo...
if (ciclo >= 1) ciclo--;
if (ciclo |= ciclo_anterior)
{
varias tu duty
ciclo_anterior = ciclo;
}
//si esta presionada la tecla de parar
llevas a 0 ambas salidas
//si esta presionada únicamente la tecla de encendido
arranca el motor hacia la derecha
/*
la funcion anterior tambien serviria para cambiar el giro hacia la derecha
*/
//si esta presionada únicamente la tecla de giro a la izquierda
seteas tus salidas para que gire a la izquierda
}
}
He modificado el código de la siguiente manera, ya funciona el arranque (ra0), paro (ra3), y sentido de giro (ra1 y ra2) pero la velocidad lo que es el pwm no funciona (ra4 y ra5) y no encuentro el error en ello.
Código:
#include <16F877A.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, NOPUT,
#use delay(clock = 4000000)
int x=0;
void main()
{
set_tris_A(0b111111);
set_tris_B(0b000000);
output_B(0b00000000);
while (1){
input_A();
if ((input(pin_A0)==1) ){
x=1;
}
if ((input(pin_A1)==1) & (x==1 || x==3)){
x=2;
}
if ((input(pin_A2)==1) & (x==2) ){
x=3;
}
if ((input(pin_A3)==1) ){
x=4;
}
if(x==1){
output_high(PIN_B2);
output_low(PIN_B3); // enciende el motor y gira a la derecha
}
if(x==2){
output_high(PIN_B3);
output_low(PIN_B2) ; // gira hacia la izquierda
}
if(x==3){
output_high(PIN_B2);
output_low(PIN_B3); //GIRA HACIA LA DERECHA
}
if(x==4){
output_low(PIN_B2);
output_low(PIN_B3); //paro
x=0;
}
}
{
output_low(PIN_C2);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 124, 1);
set_pwm1_duty(0);
delay_ms(1000);
long ciclo=0;
{
if(input(PIN_a4)){
ciclo++;
delay_ms(10);
if(ciclo>254)
ciclo=255;
}
if(input(PIN_a5)){
if(ciclo>0){
ciclo--;
delay_ms(10);
}
}
}
set_pwm1_duty(ciclo);
delay_ms(10);
}
}