Rosilene 0 Denunciar post Postado Abril 30, 2013 Fiz a programação que segue abaixo usando o MPLAB X IDE, para uma central de chamada a ser utilizada em enfermaria de um hospital. Ou seja quando um paciente chama declarei como C (chamada), e esta chamada é registrada no led com o número do quarto do paciente (p. ex. C101), ao ser atendido no quarto, quem está atendendo aciona um botão que é identificado no led como P (presença) e se ao chegar for necessário, o atendente pode acionar outro botão que é definido por E (emergência). Depois de ter terminado a programação, numa sumulação, se 10 quartos diferentes chamarem ao mesmo, o programa está pulando um quarto. Revisei toda a programação e também o hardware, e não encontro o problema. Será que pode me dar uma dica porque está acontecendo este erro de pular o quarto que está chamando? Segue abaixo os códigos. O programa tem 2574 linhas. #include <p18f4620.h> //Aqui é informado o processador que será utilizado pelo projeto #include <string.h> #include "lcd.h" #include <delays.h> #pragma config OSC = INTIO67 //clock interno #pragma config WDT = OFF //desliga watchdog #pragma config LVP = OFF //desliga programação em baixa tensão void lcd_texto(char *texto); void main (void) { //OSCCON=0b01100011; char dado [20]; int x; char y; lcd_inic(); TRISAbits.RA4=1; TRISAbits.RA3=1; TRISEbits.RE3=0; PORTEbits.RE0=0; y=17; volta: x=1; lcd_locate(1,1); strcpypgm2ram(dado,"Hospital São Lucas"); lcd_texto(dado); /************************************************************************* ** ** ** QUARTOS 1~10 ** ** ** **************************************************************************/ if (PORTA==0B00000001) { /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); lcd_locate(2,1); strcpypgm2ram(dado,"C101"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000010) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C102"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000011) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C103"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000100) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C104"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000101) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C105"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000110) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C106"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00000111) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C107"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00001000) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C108"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00001001) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C109"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00001010) { lcd_locate(2,1); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,1); strcpypgm2ram(dado,"C110"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(25); PORTEbits.RE0=0; Delay10KTCYx(25); } if(PORTA==0B00001011) { /*lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P101"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00001100) { /* lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P102"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00001101) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P103"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00001110) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P104"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00001111) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P105"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010000) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P106"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010001) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P107"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010010) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P108"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010011) { lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado,"P109"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010100) { PORTEbits.RE0=0; lcd_locate(2,6); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,6); strcpypgm2ram(dado,"P110"); lcd_texto(dado); Delay10KTCYx(50); } if(PORTA==0B00010101) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E101"); lcd_texto(dado); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00010110) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E102"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00010111) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E103"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011000) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E104"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011001) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E105"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011010) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E106"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011011) { /* lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E107"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011100) { /*lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E108"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011101) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E109"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } if(PORTA==0B00011110) { lcd_locate(2,11); strcpypgm2ram(dado," "); lcd_texto(dado); /* y=y+1; if (y==11) { Fazer a andar no display y=1; }*/ lcd_locate(2,11); strcpypgm2ram(dado,"E110"); lcd_texto(dado); Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); PORTEbits.RE0=1; Delay10KTCYx(12); PORTEbits.RE0=0; Delay10KTCYx(12); } Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Abril 30, 2013 Rosilene, O seu código é um pouco longo demais, pela descrição do teu problema, verifique se você não tem alguma variável de controle de quantidade de quartos que esteja limitada em 10 ou algo parecido. Analisar seu código, sem connhecer o algorítmo, fica complicado de entender a sua solução para o problema. Compartilhar este post Link para o post Compartilhar em outros sites
Rosilene 0 Denunciar post Postado Abril 30, 2013 Gabriel, eu peguei esta programação como finalizada. Não conheço o programa MPLAB X IDE, e conheço pouco de eletrônica. Quando fui testar a central de chamadas anotei os erros que continha. Examinei a programação consegui resolver um problema na chamada dita em linha, ou seja, numa sequencia de 10 chamadas simultâneas. Mas ao executar chamadas simultâneas do quarto 101, 102, 103, 109, 112, 115 e 116, uma chamada é pulada. Veja abaixo como esta descrito na programação. #include <p18f4620.h> //Aqui é informado o processador que será utilizado pelo projeto #include <delays.h> #include <delays.h> #pragma config WDT = OFF //desliga watchdog #pragma config LVP = OFF //desliga programação em baixa tensão #pragma config OSC = INTIO67 //Oscillator(LP,XT,HS,RC,EC,ECIO,HSPLL,RCIO,INTIO67,INTIO7 #define ch PORTAbits.RA0 #define pr PORTAbits.RA1 #define em PORTAbits.RA2 #define sg1 PORTCbits.RC0 #define sg2 PORTCbits.RC1 #define s_ch PORTBbits.RB0 #define s_pr PORTBbits.RB1 #define s_em PORTBbits.RB2 #define led_ch PORTBbits.RB3 #define led_pr PORTBbits.RB4 #define led_em PORTBbits.RB5 #define led_sg PORTBbits.RB6 void main (void) { ADCON1=0b00001111; TRISA=1; //Trasnforma Port A em entrada PORTA=0; //Zera todas as entradas em A TRISB=0; //Trasnforma Port B em saida PORTB=0; //Zera todas as saidas em B TRISCbits.RC0=0; //Trasnforma Port sg1 em saida //PORTC=0; //Zera todas as saidas em C TRISCbits.RC1=1; //Trasforma RC1 em Entrada loop: if (ch==1 && s_pr==0) //Se Chamada apertada e Presença desligada { s_ch=1; //Envia sinal de chamada pra central led_ch=1; //Acende os leds de chamada sg1=1; //liga siga-me 1 Delay10KTCYx(5); } if (pr==1 && s_pr==0) //Se precença apertada 1° vez { sg1=0; Delay10KTCYx(5); s_ch=0; //Desliga sinal de chamada para central led_ch=0; //Desliga leds de chamada s_pr=1; //Liga sinal de Presença para central led_pr=1; //Liga led de precença Delay10KTCYx(5); } if (sg2==1 && s_pr==1) //Se siga-me liga enquanto presença ligada { led_sg=1; //Acende led Siga-me } else //se não siga-me desliga apaga led siga-me { led_sg=0; } if (pr==1 && s_pr==1) //Se precença apertada estando ativada { s_pr=0; //Desliga sinal de Presença para central led_pr=0; //Desliga led de precença led_em=0; //Desliga led de emergência s_em=0; //Desliga sinal de emergência Delay10KTCYx(5); } if (s_em==0 && em==1 && s_pr==1) //Se emergência estiver desligada e for apertada { s_em=1; //Liga sinal de emergência led_em=1; //Liga led de emergência Delay10KTCYx(5); } if (s_em==1 && em==1) //se emergência estiver ligada e for apertada novamente { s_em=0; //desliga sinal de emergência led_em=0; //desliga led de emergência Delay10KTCYx(5); } goto loop; } Rosilene, O seu código é um pouco longo demais, pela descrição do teu problema, verifique se você não tem alguma variável de controle de quantidade de quartos que esteja limitada em 10 ou algo parecido. Analisar seu código, sem connhecer o algorítmo, fica complicado de entender a sua solução para o problema. Gabriel, eu peguei esta programação como finalizada. Não conheço o programa MPLAB X IDE, e conheço pouco de eletrônica. Quando fui testar a central de chamadas anotei os erros que continha. Examinei a programação consegui resolver um problema na chamada dita em linha, ou seja, numa sequencia de 10 chamadas simultâneas. Mas ao executar chamadas simultâneas do quarto 101, 102, 103, 109, 112, 115 e 116, uma chamada é pulada. Veja abaixo como esta descrito na programação. #include <p18f4620.h> //Aqui é informado o processador que será utilizado pelo projeto #include <delays.h> #include <delays.h> #pragma config WDT = OFF //desliga watchdog #pragma config LVP = OFF //desliga programação em baixa tensão #pragma config OSC = INTIO67 //Oscillator(LP,XT,HS,RC,EC,ECIO,HSPLL,RCIO,INTIO67,INTIO7 #define ch PORTAbits.RA0 #define pr PORTAbits.RA1 #define em PORTAbits.RA2 #define sg1 PORTCbits.RC0 #define sg2 PORTCbits.RC1 #define s_ch PORTBbits.RB0 #define s_pr PORTBbits.RB1 #define s_em PORTBbits.RB2 #define led_ch PORTBbits.RB3 #define led_pr PORTBbits.RB4 #define led_em PORTBbits.RB5 #define led_sg PORTBbits.RB6 void main (void) { ADCON1=0b00001111; TRISA=1; //Trasnforma Port A em entrada PORTA=0; //Zera todas as entradas em A TRISB=0; //Trasnforma Port B em saida PORTB=0; //Zera todas as saidas em B TRISCbits.RC0=0; //Trasnforma Port sg1 em saida //PORTC=0; //Zera todas as saidas em C TRISCbits.RC1=1; //Trasforma RC1 em Entrada loop: if (ch==1 && s_pr==0) //Se Chamada apertada e Presença desligada { s_ch=1; //Envia sinal de chamada pra central led_ch=1; //Acende os leds de chamada sg1=1; //liga siga-me 1 Delay10KTCYx(5); } if (pr==1 && s_pr==0) //Se precença apertada 1° vez { sg1=0; Delay10KTCYx(5); s_ch=0; //Desliga sinal de chamada para central led_ch=0; //Desliga leds de chamada s_pr=1; //Liga sinal de Presença para central led_pr=1; //Liga led de precença Delay10KTCYx(5); } if (sg2==1 && s_pr==1) //Se siga-me liga enquanto presença ligada { led_sg=1; //Acende led Siga-me } else //se não siga-me desliga apaga led siga-me { led_sg=0; } if (pr==1 && s_pr==1) //Se precença apertada estando ativada { s_pr=0; //Desliga sinal de Presença para central led_pr=0; //Desliga led de precença led_em=0; //Desliga led de emergência s_em=0; //Desliga sinal de emergência Delay10KTCYx(5); } if (s_em==0 && em==1 && s_pr==1) //Se emergência estiver desligada e for apertada { s_em=1; //Liga sinal de emergência led_em=1; //Liga led de emergência Delay10KTCYx(5); } if (s_em==1 && em==1) //se emergência estiver ligada e for apertada novamente { s_em=0; //desliga sinal de emergência led_em=0; //desliga led de emergência Delay10KTCYx(5); } goto loop; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 3, 2013 Existe uma tag CODE p/ postar código no fórum. Use. Compartilhar este post Link para o post Compartilhar em outros sites