Qué tal, disculpen estoy trabajando en el lenguaje CCS compiler con el pic18f4550, en la activación de unos reles, los cuales me realicen diferentes combinaciones, mientras unos están activados, otros desactivados y se presenten en una lcd, pero no se si estoy realizando de manera adecuada la activación de los reles, porque cuando corro mi programa unos si se activan y los que deben permanecer desactivados se respeta la combinación pero hasta dicha pulsación ya no respeta la combinación, estoy usando dos push boton, la programación la hice de manera de incremento y a su vez en decremento si es que quiero que se haga una combinación anterior.
Dejo el programa, no se si me puedan ayudar por favor.
#include<18F4550.H>
#fuses HSPLL, PLL5, USBDIV, NOWDT, CPUDIV1, NOPROTECT, NODEBUG, NOPBADEN, NOLVP, NOVREGEN
#use delay (clock=4000000) //Fosc=4Mhz
#define LCD_DATA_PORT getenv("SFR:PORTD")
#include <lcd.c>
#BYTE PORTA = 0xF80
// Memoria de los puertos 18F4550
#BYTE PORTA = 0xFF
#BYTE PORTA = 0XF0
#BYTE PORTB = 0xF1
#BYTE PORTA = 0x0F
int push;
VOID MAIN(){
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("PROGRAMA");
push=0;
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("PROGRAMA CHIDO");
while (true){
delay_ms(500);
if (input(pin_B0)==01){
push=push+1;
}
if (input(pin_B1)==01){
push=push-1;
}
if(push==1){
output_low(pin_A3);
output_high(pin_A1);
output_high(pin_A2);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("A-N+=0 GRADOS");
}
if(push==2){
output_high(pin_A2);
output_low(pin_A3);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("C+A-=30 GRADOS");
}
if(push==3){
output_high(pin_A2);
output_low(pin_A3);
output_low(pin_A4);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("C+N-=60 GRADOS");
}
if(push==4){
output_low(pin_A4);
output_high(pin_A2);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("B-C+=90 GRADOS");
}
if(push==5){
output_low(pin_A4);
output_high(pin_A0);
output_high(pin_A2);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("B-N+=120 GRADOS");
}
if(push==6){
output_high(pin_A0);
output_low(pin_A4);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("A+B-=150 GRADOS");
}
if(push==7){
output_high(pin_A0);
output_low(pin_A4);
output_low(pin_A5);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("A+N-=180 GRADOS");
}
if(push==8){
output_low(pin_A5);
output_high(pin_A0);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("C-A+-=210 GRADOS");
}
if(push==9){
output_low(pin_A5);
output_high(pin_A0);
output_high(pin_A1);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("C-N+=240 GRADOS");
}
if(push==10){
output_high(pin_A2);
output_low(pin_A5);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("B+C-=270 GRADOS");
}
if(push==11){
output_high(pin_A2);
output_low(pin_A3);
output_low(pin_A5);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("B+N-=300 GRADOS");
}
if(push==12){
output_low(pin_A3);
output_high(pin_A1);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("A-B+=330 GRADOS");
}
if(push==13){
push=0;
}
}
}