#include "D:\PIC\movil\movil.h"
#include <string.h>
#include "glcd_modificada.c"
#include <stdlib.h>
#use rs232 (baud=9600 , xmit=pin_c6, rcv=pin_c7 , bits=8)
#define adrs 0x00
#byte TRISA=0xF92
#byte PORTA=0xF80
#byte TRISB=0xF93
#byte PORTB=0xF81
int const bufer= 100;
char valor[bufer];
int a=0;
int j=0;
int z=0;
#int_RDA
RDA_isr()
{
int i=0;
int k=0;
a=1;
do{
if(kbhit()) //compruebo si hay algún dato disponible
{
if(k=1){ //condición para ciclo continuo si el caracter es el deseado
++i;
}
valor[i]=getc(); // cojo el valor
if (valor[i]=0x0D) // compruebo si es el que espero
{
k=1; // es el correto, activa flag para ciclo continuo
}
}
else{ //si no es el correcto,lo ponho a cero
valor[i]=0;
i=0;
}
if(i=101) //para salir del ciclo despues de los 100 caracteres
{
z=1;
break;
}
}while(k=1); //ciclo continuo si el caracter es el bueno
}
#int_EEPROM // interupción final de escritura eeprom
eeprom_isr()
{
z=1; //flag para saber q ha habido interrupción
}
void main()
{
TRISA=0xFF;
//TRISB=0x00;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EEPROM);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true)
{
if (a=1) // si ha habido interrupción por usart
{
a=0; // reseteo el flag
if(z=1){ // flag para saber si ha habido interrupcion
write_eeprom (adrs+j,valor[j]); //por fin de escritura eeprom
++j;
z=0; //escribe en la eeprom
}
}
}
}
#include "D:\PIC\movil\movil.h"
#include <string.h>
#include "glcd_modificada.c"
#include <stdlib.h>
#use rs232 (baud=9600 , xmit=pin_c6, rcv=pin_c7 , bits=8)
//#byte TRISA=0xF92
//#byte PORTA=0xF80
//#byte TRISB=0xF93
//#byte PORTB=0xF81
char rx_buffer[100]; // Buffer de recepción
int8 next_rx=0; // siguiente posición a utilizar
int1 flag_rx_complete=0; // flag que indica recepción completa
int1 flag_Writing_INTERNAL_EEPROM; // flag que indica fin de escritura de EEPROM
#int_RDA
RDA_isr(void){
char c;
if(kbhit()){ // Si hay algo pendiente de recibir ...
c=getc(); // lo recogemos sobre la variable c
if(c==0x0D){ // Si lo recibido es el carácter especial de fin ...
flag_rx_complete=1; // marcamos el fin de la recepción y no hacemos nada mas.
}
else{ // En caso contrario ...
rx_buffer[next_rx++]; // lo guardamos en la posición next_rx de rx_buffer e incrementamos next_rx
}
}
}
#int_eeprom
void eeprom_isr(void){
flag_Writing_INTERNAL_EEPROM=0;
}
void escribe_byte_en_EEPROM( char data, int8 memAddress){
flag_Writing_INTERNAL_EEPROM=1;
enable_interrupts(int_eeprom);
write_eeprom (memAddress, data);
while(flag_Writing_INTERNAL_EEPROM==1){/*Espera hasta finalizar la escritura*/}
disable_interrupts(int_eeprom);
}
void escribe_buffer_en_EEPROM(void){
int8 i;
for(i=0;i< next_rx;i++){
escribe_byte_en_EEPROM(rx_buffer[next_rx++],i);
}
}
void main(){
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true){
if(flag_rx_complete==1){ // Si la recepción está completa ...
escribe_buffer_en_EEPROM(); // escribimos el contenido del buffer en la EEPROM y ...
next_rx=0; // ponemos a cero la siguiente posición a utilizar y ...
flag_rx_complete=0; // ponemos a cero el flag que indica recepción completa.
}
}
}
#int_RDA
RDA_isr(void){
char c;
if(kbhit()){ // Si hay algo pendiente de recibir ...
c=getc(); // lo recogemos sobre la variable c
if(c==0x0D){ // Si lo recibido es el carácter especial de fin ...
flag_rx_complete=1; // marcamos el fin de la recepción y no hacemos nada mas.
}
else{ // En caso contrario ...
(rx_buffer[next_rx++]); // lo guardamos en la posición next_rx de rx_buffer e incrementamos next_rx
}
#int_RDA
RDA_isr(void){
char c;
if(kbhit()){ // Si hay algo pendiente de recibir ...
c=getc(); // lo recogemos sobre la variable c
if(c==0x0D){ // Si lo recibido es el carácter especial de fin ...
flag_rx_complete=1; // marcamos el fin de la recepción y no hacemos nada mas.
}
else{ // En caso contrario ...
(rx_buffer[next_rx++])=c; // lo guardamos en la posición next_rx de rx_buffer e incrementamos next_rx
}
rx_buffer[next_rx++]; ///escribio el maestro RedPic, se le paso poner lo que estabamos recibiendo
rx_buffer[next_rx++]=c; ///ahora si funciona
Hola, solo escribo para corregir un pequeño detalle que se le ha pasado a el maestro RedPic ...