Ну для начала просьба не выкладывать такие куски прямо в посте, а прикреплять их в виде файлов. Да и если куски кода постите, то оформляйте их как код, а то без форматирования разбираться в этом очень тяжело
Теперь по программе. Сильно я в ней не разбирался, но конечно она не может дать такой объем кода, чтобы забить всю флеш. Поэтому:
- проверьте установки вашего проекта и настройки линкера и его командный файл .xcl
- устраните все ошибки, которые выдаются на этапе компиляции. Что-то мне не верится что их нет. Та ошибка, что вы приводите, это ошибка линкера. А если есть ошибки компилятора, то что делает линкер уже непредсказуемо.
Одна явная ошибка налицо:
Цитата(Andrеys @ Dec 26 2007, 20:54)

Код
__intrinsic int __flash_read_int( unsigned short address );
char flash_read(char address)
{
char b;
b = __flash_read_int( address );
return b;
}
byte = flash_read(0x008F);
Адрес двухбайтный, вы его объявили char. Читаете флеш через ненужную паразитную функцию по какому-то абсолютному адресу

Где вы эти адреса взяли?
Попробуйте так:
Код
char __flash massO[]={0x00, 0x3e, 0x41, 0x41, 0x41, 0x3e};
byte = __flash_read_int((unsigned short)&massO[0]);
...
byte = __flash_read_int((unsigned short)&massO[5]);
В PIC16 константы во флеши хранятся в виде инструкций RETLW byte и результат функции __flash_read_int все равно будет усекаться до одного байта.
Ещё бросилось в глаза:
Цитата(Andrеys @ Dec 26 2007, 20:54)

Код
rezultat=ADRESH;
for ( i=0; i<8; i++)
{
rezultat <<= 1;
}
rezultat=rezultat+ADRESL;
Тут вы явно перемудрили, достаточно такого:
Код
rezultat = ((unsigned int)ADRESH<<8)|ADRESL;
Ну и напоследок, если у вас целые беззнаковые, то и объявляйте их unsigned int rezultat;
А то компилятор будет их обрабатыват как знаковые, а это не везде будет правильно