Amigos :estoy peleando con el cartucho de memoria que graba datos desde el serial y los pone en unas fram
cuando intento mandar desde el macro manager del siow ( terminal de puerto serie de windows) una cadena de caracteres formado por 254 bytes , lo hace correctamente , mas cuando le pongo un byte mas ( 255 ) , se come todos e imprime el ultimo , si coloco 257 , imprime solamente los 2 ultimos , tipico comportamiento de una variable int8 sin embargo , la variable dom del for que voy a colocar a continuacion es de 16

la variable int16 dom esta en el cart.h
#include "cart.h"
void main( )
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi ( SPI_MASTER | SPI_L_TO_H | SPI_XMIT_L_TO_H |SPI_CLK_DIV_64 |SPI_SAMPLE_AT_END);
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);
// enable_interrupts(INT_RDA);
//enable_interrupts(GLOBAL);
setup_oscillator(False);
porta = 0b00000000 ; trisa = 0b00000100 ;
portb = 0b00111111 ; trisb = 0b00000000 ;
portc = 0b00000000 ; trisc = 0b11010000 ;
portd = 0b11111111 ; trisd = 0b00000000 ;
porte = 0b00000000 ; trise = 0b00000000 ;
delay_ms ( 40 ) ;
fm25256_reset ( ) ;
delay_ms ( 40 ) ;
printf ( "Hola\r\n" ) ;
while ( true )
{
dom = 0 ; chip = 0 ; dato = 0 ; // inicializo las variables por las dudas...
for ( chip = 0 ; chip < 7 ; chip++ ) // para las 7 memorias
{
for ( dom = 0 ; dom < 32000 ; dom++ ) // que recorra los domicilios de la memoria ****ESTE SE COMPORTA COMO DE INT8****
{
dsr = 1 ; // habilito el puerto
while ( ~ kbhit ( ) ) { } ; // si kbhit no tiene nada que se quede ahi
{ // si entro un caracter...
dato = getc ( ) ; // lo descargo ...
dsr = 0 ; // detengo el tx del puerto
fm25256_wr_en ( chip ); // proceso de escritura de la fram
fm25256_wr_data ( chip , dom , dato ) ; // grabo el chip , pos de memoria y dato
if ( dato == 0xf8 ) // si el dato es fin de archivo ( 0xf8 )...
{
led = 1 ; // prendo el led
goto aqui ; // va a leer la memoria
}
dato = 0 ; // pongo a cero dato por las dudas
}
}
}
aqui: dsr = 1 ; // activacion tx del puerto PARA PODER HACER EL PRINTF
dom = 0 ; chip = 0 ; dato = 0 ;
for ( chip = 0 ; chip < 7 ; chip++ )
{
for ( dom = 0 ; dom < 32000 ; dom++ )
{
dato = fm25256_rd_data ( chip , dom ) ; //proceso de lectura
printf ( "leo en chip:%u memoria:%lu dato:%0x\r\n" , chip , dom , dato ) ;
if ( dato == 0xf8 )
{
led = 0 ;
goto fin ;
}
}
}
fin:;
}
}
desde ya gracias!!