Ir ao conteúdo

Gravação na memória 16F877


Tiago Shimizu

Posts recomendados

Postado

Olá a todos. Estou com o seguinte problema. Preciso fazer a gravação de um valor x em uma posição y de meu PIC 16F877. Detalhe, envio esses valores pela porta serial do PC. Por exemplo, tenho que enviar a string WR0x01|0x09 onde gravo na memória 0x01 o valor 0x09 e quando envio a string RD0x01 ele me dá um printf do valor que está na posição 0x01 do PIC. Como posso estar fazendo isso? Estou programando em C. Outra coisa também, é possível através do pc fazer um debug online de um PIC, para saber o estado de cada pino do pic? Obrigado desde já.

Postado

Olha,eu monto gravdores de eeprom usando esta técnica,mas não uso string pois fica mais lento,mas;

1-Eu programo o SoftWare do PC tambem.

2-Programo em ASM.

3-Gravar na eeprom interna de um PIC voce acha muitos exemplos na net e livros.

Acho que voce vai precisar ser um programador 'completo' e não sabemos o seu conhecimento de HardWare/SoftWare em Microcontroladore e PC,quero dizer,talvez alguem aqui no fórum lhe demosntre como gravar na eeprom interna,outro pode mostrar como trabalhar com a serial etc,mas voce vai ter que 'juntar' tudo.

Postado

Tipo, hoje já comunico meu PIC com a porta serial do PC. Consigo enviar dados para ele e receber dados. Também, se tinho um valor do tipo int no próprio PIC e mando gravar na memória interna do PIC consigo. Meu problema no caso estaria em fazer a conversão do dado enviado pela serial do PC para int e depois gravar no PIC.

Postado
Mas voce precisa converter?

Tente trabalhar pensando em 'bytes',que é como o PC se comunica com o meio externo.

Certo, mas vê se concorda comigo. Como comentei no primeiro tópico, preciso enviar para o PIC a posição a ser grava e depois o valor. Ex:WR0x01|0x09. O WR é o que vai identificar que é uma gravação, o 0x01 refere-se a posição de gravação e por final 0x09 o valor. Primeiramente, vou ter de separar esta string em partes e depois fazer a gravação. Tentei fazer o seguinte:
static char string[11];

gets (string);

if (string[0] == 'W' || string[0] == 'w')

{

if (string[1] == 'R' || string[1] == 'r')

{

Até aí ele até faz a identificação da primeira parte, se é leitura ou gravação, contudo, minha dificuldade agora está em pegar o restante e dividir.

Postado

Como programo em ASM,esta parte é bem fácil,ja em C voce terá que aguardar par alguem postar uma solução eficaz,eu não saberia postar o código em C que seja bastante eficiente ou rápido.

Postado

Estranho, estav tentando fazer esta bendita comunicação e percebi que quando executo o seguinte código, meu PIC 16F877A trava:

#include <16f877A.h>

#fuses NOWDT,XT, PUT, NOPROTECT, BROWNOUT, LVP, NOCPD, NOWRT, NODEBUG

#use delay (clock=8000000)

#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)

#include <LCD.c>

void main(void)

{

static char string_recebida[5];

lcd_init();

while(true)

{

gets (string_recebida);

if (string_recebida[0] == 'W' || string_recebida[0] == 'w')

{

if (string_recebida[1] == 'R' || string_recebida[1] == 'r')

{

output_high(PIN_B0);

delay_ms(1000);

output_low(PIN_B0);

}

else

{

printf (lcd_putc, "\f Nada recebido");

}

}

else

{

printf (lcd_putc, "\f Nada recebido");

}

}

}

O que pode ser? Tenho este mesmo código em um16F628 e roda de boa...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...