Hei otavio, vc estava certo. era hardware, fiz o que você falou, retirei o MAX232 da placa (ele fica em um soquete) e coloquie em um protoboard, catei uns capacitores de 10uf e fiz um cabo ligando os pinos que vc falou e o programa funcionou corretamente sem resetar!!!
o esquema de ligação que eu usei foi esse:
e o resultado foi esse:
Fiz o modelo no proteus e coloquei no arquivo para que se alguem quiser fazer o download, o arquivo esta com o fonte em C.
Download:
http://www.4shared.com/file/5465987/3b37320/rs23216f628aget_string.html
Arquivo de teste no proteus:
+-----------------------------------------------------------------------------------------+
só mais uma coisa, a função get_string original espera vc apertar <ENTER> para poder mostrar o resultado, fiz uma alteração no código para que se vc chegar ao limite de letras ele mostre o resultado, se vc quizer que ele só mostre se for apertado <ENTER> é só retirar o Break.
- Código: Selecionar todos
#include <16F628a.H>
#pragma fuses HS,NOWDT,NOPROTECT,NOLVP
#pragma use delay(clock=4000000)
#pragma use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
#fuses NOMCLR,INTRC_IO,NOWDT,PUT,NOLVP
//#include <input.c> // a função original get_string esta nesse arquivo
char x[8]; // string de caracteres que pode acumular no máximo 7 digitos
// para alterar a quantidade é só mudar esse valor
void get_string(char* s, int max)
{
int len;
char c;
--max;
len=0;
do {
c=getc();
if(c==8) // Se apertar Backspace volta uma tecla
{
if(len>0)
{
len--;
putc(c);
putc(' ');
putc(c);
}
} else if ((c>=' ')&&(c<='~')) // não digitar caracteres
if(len<max)
{
s[len++]=c;
putc(c);
}
if(len==max) // MELHORIA NO CÓDIGO
{ // Sem esse BREAK o programa espera vc apertar
Break; // a tecla ENTER para sair
}
} while(c!=13);
s[len]=0;
}
void main()
{
printf("\n\r+------------------------------------------------------------------+");
printf("\n\rTeste de RS232 GET_STRING");
printf("\n\r+------------------------------------------------------------------+");
printf("\n\rDigite uma palavra 7 digitos ou aperter <ENTER>: ");
do {
get_string(x,8); // X é a string de caracteres
// 8 é a quantidade de caracteres definido na string de caracteres
printf("\r\nA palavra digitada foi %s\r\n",x);
printf("\n\rDigite outra palavra 7 digitos ou aperter <ENTER>: ");
} while(1);
}
Valeu galera, muito obrigado Anderson, Andre, Jorge e Otavio Luiz por me ajudaram nesse post!!!