controlando cuscopic via rs232

4
Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008 Exemplo de conexão da CUSCOPIC ao PC usando a RS232 Este programa irá permitir a conexão da CUSCOPiC ao PC via porta serial. Usando-se um software adequado (como o HyperTerminal) é possível se controlar a estação via LINHA DE COMANDO. Ao efetuar a comunicação, poderão ser digitados os comandos manualmente. A lista de “comandos” é esta: Lxx : Liga saída digital. XX é o pino, dado por D0, D1, D2, ... C0, C1, C2 ... etc... Exemplo: LE2 (ativará o pino E2) Dxx : Desliga saída 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 analógica n. Exemplo: AD1 (exibe valor correspondente a analógica 1) Exx : Retorna valor digital do pino dado por xx. Exemplo: ED0 (retorna o valor lógico 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 básicos para adicionar a funcionalidade de comunicação 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 funções 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) // função para converter caracters para maiúsculo { 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 saída { 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);

Upload: cristiano-rosa-dos-santos

Post on 11-Apr-2015

52 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Controlando Cuscopic via Rs232

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

Exemplo de conexão da CUSCOPIC ao PC usando a RS232

Este programa irá permitir a conexão da CUSCOPiC ao PC via porta serial. Usando-se um software adequado (como o HyperTerminal) é possível se controlar a estação via LINHA DE COMANDO.

Ao efetuar a comunicação, poderão ser digitados os comandos manualmente. A lista de “comandos” é esta: Lxx : Liga saída digital. XX é o pino, dado por D0, D1, D2, ... C0, C1, C2 ... etc... Exemplo: LE2 (ativará o pino E2) Dxx : Desliga saída 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 analógica n. Exemplo: AD1 (exibe valor correspondente a analógica 1) Exx : Retorna valor digital do pino dado por xx. Exemplo: ED0 (retorna o valor lógico 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 básicos para adicionar a funcionalidade de comunicação via RS232 ao microcontrolador. #include <16f877.h> // identifica microcont rolador alvo #device ADC=10 // define AD para 10 bi ts, variando de 0 a 1023 #use delay (clock=20000000) // <- define cristal pa ra 20Mhz. Para outros valores, mude e recompile. #include <cuscostdio.h> // inclui biblioteca de funções do projeto CUSCOPiC #use RS232(baud=9600, parity=N, bits=8, xmit=PIN_C 6,rcv=PIN_C7) // configura serial // serial configurada para velocidade de 9600 bps // sem paridade, 8 bits char touper(char x) // função para converter carac ters para maiúsculo { if (x >= 'a' && x <= 'z') x -= ('a'-'A'); // conv erte caracter para maiusculo return(x); } void erro() // envia mensagem de erro. { printf("\n\rComando invalido!"); } void dado(short b) // envia dado para determinada saída { 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);

Page 2: Controlando Cuscopic via Rs232

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

if (P == 'D') output_bit(PIN_D2,b); if (P == 'E') output_bit(PIN_E2,b); break; case 3 : if (P == 'A') output_bit(PIN_A3,b); if (P == 'B') output_bit(PIN_B3,b); if (P == 'C') output_bit(PIN_C3,b); if (P == 'D') output_bit(PIN_D3,b); if (P == 'E') erro(); break; case 4 : if (P == 'A') output_bit(PIN_A4,b); if (P == 'B') output_bit(PIN_B4,b); if (P == 'C') output_bit(PIN_C4,b); if (P == 'D') output_bit(PIN_D4,b); if (P == 'E') erro(); break; case 5 : if (P == 'A') output_bit(PIN_A5,b); if (P == 'B') output_bit(PIN_B5,b); if (P == 'C') output_bit(PIN_C5,b); if (P == 'D') output_bit(PIN_D5,b); if (P == 'E') erro(); break; case 6 : if (P == 'A') erro(); if (P == 'B') output_bit(PIN_B6,b); if (P == 'C') output_bit(PIN_C6,b); if (P == 'D') output_bit(PIN_D6,b); if (P == 'E') erro(); break; case 7 : if (P == 'A') erro(); if (P == 'B') output_bit(PIN_B7,b); if (P == 'C') output_bit(PIN_C7,b); if (P == 'D') output_bit(PIN_D7,b); if (P == 'E') erro(); break; default: erro(); } } else 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();

Page 3: Controlando Cuscopic via Rs232

Projeto CUSCOPiC – Daniel Corteletti – Novembro de 2008

break; case 4 : if (P == 'A') return(input(PIN_A4)) ; if (P == 'B') return(input(PIN_B4)) ; if (P == 'C') return(input(PIN_C4)) ; if (P == 'D') return(input(PIN_D4)) ; if (P == 'E') erro(); break; case 5 : if (P == 'A') return(input(PIN_A5)) ; if (P == 'B') return(input(PIN_B5)) ; if (P == 'C') return(input(PIN_C5)) ; if (P == 'D') return(input(PIN_D5)) ; if (P == 'E') erro(); break; case 6 : if (P == 'A') erro(); if (P == 'B') return(input(PIN_B6)) ; if (P == 'C') return(input(PIN_C6)) ; if (P == 'D') return(input(PIN_D6)) ; if (P == 'E') erro(); break; case 7 : if (P == 'A') erro(); if (P == 'B') return(input(PIN_B7)) ; if (P == 'C') return(input(PIN_C7)) ; if (P == 'D') return(input(PIN_D7)) ; if (P == 'E') erro(); break; default: erro(); } } void display() // exibe informação 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 analógica { char P, pin; P = touper( getchar() ); putchar(P);

Page 4: Controlando Cuscopic via Rs232

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() // função principal { char x; signed long aux; lcd_init(); while(1) // laço infinito { printf("\n\rCUSCOPIC:\>"); while(1) { if ( kbhit() ) // se houver caractere no buffer de entr ada da serial ... { x = touper( getch() ); // busca este caractere putchar(x); switch(x) { case 'L' : dado(1); // SER FOR L, LIGA R 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 à es tação (verificar jumpers p/ posição RS232) Rodar programa HYPER TERMINAL, do MS Windows, ou al gum programa similar. Configurar conforme tela ao lado. Com a CUSCOPiC em modo de execução, a cada tecla pr essionada, surgirão avisos no terminal.