Você está na página 1de 4

Exemplo de conexo da CUSCOPIC ao PC usando a RS232

Este programa ir permitir a conexo da CUSCOPiC ao PC via porta serial. Usando-se um software adequado (como o HyperTerminal) possvel se controlar a estao via LINHA DE COMANDO. Ao efetuar a comunicao, podero ser digitados os comandos manualmente. A lista de comandos esta: Lxx : Liga sada digital. XX o pino, dado por D0, D1, D2, ... C0, C1, C2 ... etc... Exemplo: LE2 (ativar o pino E2) Dxx : Desliga sada digital. XX o pino, dado por D0, D1, D2, ...C0, C1, C2, ... etc. Exemplo: DE2 (desativar o pino E2) ADn : Retorna o valor da entrada analgica n. Exemplo: AD1 (exibe valor correspondente a analgica 1) Exx : Retorna valor digital do pino dado por xx. Exemplo: ED0 (retorna o valor lgico do pino D0) W1ssssssssssssssssss : Escreve a string dada por s na primeira linha do display. Exemplo: W1ola mundo : Escreve mensagem ola mundo no LCD W2ssssssssssssssssss : Escreve a string dada por s na segunda linha do display. Exemplo: W2ola mundo : Escreve mensagem ola mundo no LCD CLR: Limpa display. Em negrito temos os elementos bsicos para adicionar a funcionalidade de comunicao via RS232 ao microcontrolador.
#include <16f877.h> // identifica microcontrolador alvo #device ADC=10 // define AD para 10 bits, variando de 0 a 1023 #use delay (clock=20000000) // <- define cristal para 20Mhz. Para outros valores, mude e recompile. #include <cuscostdio.h> // inclui biblioteca de funes do projeto CUSCOPiC #use RS232(baud=9600, parity=N, bits=8, xmit=PIN_C6,rcv=PIN_C7) // configura serial // serial configurada para velocidade de 9600 bps // sem paridade, 8 bits

char touper(char x) // funo para converter caracters para maisculo { if (x >= 'a' && x <= 'z') x -= ('a'-'A'); // converte caracter para maiusculo return(x); } void erro() // envia mensagem de erro. { printf("\n\rComando invalido!"); } void dado(short b) // envia dado para determinada sada { char P, pin; P = touper(getchar()); putchar(P); if (P >= 'A' && P <= 'E') { pin = getchar() - '0'; putchar(pin+'0'); switch(pin) { case 0 : if (P == 'A') output_bit(PIN_A0,b); if (P == 'B') output_bit(PIN_B0,b); if (P == 'C') output_bit(PIN_C0,b); if (P == 'D') output_bit(PIN_D0,b); if (P == 'E') output_bit(PIN_E0,b); break; case 1 : if (P == 'A') output_bit(PIN_A1,b); if (P == 'B') output_bit(PIN_B1,b); if (P == 'C') output_bit(PIN_C1,b); if (P == 'D') output_bit(PIN_D1,b); if (P == 'E') output_bit(PIN_E1,b); break; case 2 : if (P == 'A') output_bit(PIN_A2,b); if (P == 'B') output_bit(PIN_B2,b); if (P == 'C') output_bit(PIN_C2,b);

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

case 3 :

case 4 :

case 5 :

case 6 :

case 7 :

default: } } else erro(); }

if (P == if (P == break; if (P == if (P == if (P == if (P == if (P == break; if (P == if (P == if (P == if (P == if (P == break; if (P == if (P == if (P == if (P == if (P == break; if (P == if (P == if (P == if (P == if (P == break; if (P == if (P == if (P == if (P == if (P == break; erro();

'D') output_bit(PIN_D2,b); 'E') output_bit(PIN_E2,b); 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') output_bit(PIN_A3,b); output_bit(PIN_B3,b); output_bit(PIN_C3,b); output_bit(PIN_D3,b); erro(); output_bit(PIN_A4,b); output_bit(PIN_B4,b); output_bit(PIN_C4,b); output_bit(PIN_D4,b); erro(); output_bit(PIN_A5,b); output_bit(PIN_B5,b); output_bit(PIN_C5,b); output_bit(PIN_D5,b); erro(); erro(); output_bit(PIN_B6,b); output_bit(PIN_C6,b); output_bit(PIN_D6,b); erro(); erro(); output_bit(PIN_B7,b); output_bit(PIN_C7,b); output_bit(PIN_D7,b); erro();

short entrada() // entradas digitais { char P, pin; P = touper(getchar()); putchar(P); if (P < 'A' || P > 'E') { erro(); return(0); } pin = getchar() - '0'; putchar(pin+'0'); switch(pin) { case 0 : if (P == 'A') return(input(PIN_A0)); if (P == 'B') return(input(PIN_B0)); if (P == 'C') return(input(PIN_C0)); if (P == 'D') return(input(PIN_D0)); if (P == 'E') return(input(PIN_E0)); break; case 1 : if (P == 'A') return(input(PIN_A1)); if (P == 'B') return(input(PIN_B1)); if (P == 'C') return(input(PIN_C1)); if (P == 'D') return(input(PIN_D1)); if (P == 'E') return(input(PIN_E1)); break; case 2 : if (P == 'A') return(input(PIN_A2)); if (P == 'B') return(input(PIN_B2)); if (P == 'C') return(input(PIN_C2)); if (P == 'D') return(input(PIN_D2)); if (P == 'E') return(input(PIN_E2)); break; case 3 : if (P == 'A') return(input(PIN_A3)); if (P == 'B') return(input(PIN_B3)); if (P == 'C') return(input(PIN_C3)); if (P == 'D') return(input(PIN_D3)); if (P == 'E') erro();

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

break; case 4 : if (P == if (P == if (P == if (P == if (P == break; case 5 : if (P == if (P == if (P == if (P == if (P == break; case 6 : if (P == if (P == if (P == if (P == if (P == break; case 7 : if (P == if (P == if (P == if (P == if (P == break; default: erro(); } }

'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E') 'A') 'B') 'C') 'D') 'E')

return(input(PIN_A4)); return(input(PIN_B4)); return(input(PIN_C4)); return(input(PIN_D4)); erro(); return(input(PIN_A5)); return(input(PIN_B5)); return(input(PIN_C5)); return(input(PIN_D5)); erro(); erro(); return(input(PIN_B6)); return(input(PIN_C6)); return(input(PIN_D6)); erro(); erro(); return(input(PIN_B7)); return(input(PIN_C7)); return(input(PIN_D7)); erro();

void display() // exibe informao no lcd { char L; L = getchar(); putchar(L); L -= '0'; if (L == 1) lcd_gotoxy(1,1); else if (L == 2) lcd_gotoxy(1,2); else erro(); printf(" Txt p/lcd lin%u =>", L); while(1) { L = getchar(); putchar(L); if (L != 0x0D) lcd_putc(L); else break; } } void clear_lcd() // limpar lcd { char P; P = touper(getchar()); putchar(P); if (P != 'L') { erro(); return; } P = touper(getchar()); putchar(P); if (P != 'R') { erro(); return; } lcd_init(); } signed long analogica() // leitura da analgica { char P, pin; P = touper(getchar()); putchar(P);

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

if (P == 'D') { pin = getchar() - '0'; putchar(pin+'0'); if (pin > 7) { erro(); return(-1); } return(AD(pin)); } erro(); return(-1); } void main() // funo principal { char x; signed long aux; lcd_init(); while(1) // lao infinito { printf("\n\rCUSCOPIC:\>"); while(1) { if (kbhit()) // se houver caractere no buffer de entrada da serial ... { x = touper(getch()); // busca este caractere putchar(x); switch(x) { case 'L' : dado(1); // SER FOR L, LIGAR DETERMINADO PINO break; case 'D' : dado(0); break; case 0x0d: break; case 'W' : display(); break; case 'C' : clear_lcd(); break; case 'A' : aux = analogica(); if (aux >= 0) printf("==> Vlr da entrada (10 bits) em %04li", aux); break; case 'E' : if (entrada()) printf("==> ATIVADA"); else printf("==> DESATIVADA"); break; default : erro(); printf("%X", x); } break; } } } } Executar este programa. Conectar o cabo serial estao (verificar jumpers p/ posio RS232) Rodar programa HYPER TERMINAL, do MS Windows, ou algum programa similar. Configurar conforme tela ao lado. Com a CUSCOPiC em modo de execuo, a cada tecla pressionada, surgiro avisos no terminal.

Projeto CUSCOPiC Daniel Corteletti Novembro de 2008

Você também pode gostar