сегодня, 8 марта 2009, наконец-то получил передачу- прием данных на
TRC101. Я вижу, есть люди (_grey_ на 21 странице темы, от 15 января) , которые уже отчаялись с запуском этих приемо-передатчиков. Но прошло уже около 2-х месяцев с последних сообщений по теме...
В общем, если кому еще есть интерес к trc101, мои фрагменты исходников для PIC (
PIC16F876A), которые я написал (язык СИ):
while(1) // основной цикл приема
{
// чистим и устанавливаем бит 1 для перезапуска
//опознования синхронного образца:
WriteCMD(0xCA80);
WriteCMD(0xCA82);
CheckSum=0;
nCS=1;
nFSEL=0;
// это точки для отладки в MPLAB ICD2
asm("nop");
// первый принимаемый байт - число передаваемых
//байтов
n = READ_BYTE();
asm("nop");
// второй принимаемый байт - контрольная сумма
ks = READ_BYTE(); asm("nop");
// основная информация принимвется здесь
for (j=0; j ‹ n; j++)
{
BUFER[j]=READ_BYTE();
// подсчитываем контрольную сумму
CheckSum=CheckSum+BUFER[j];
};
asm("nop");
if (CheckSum==ks)
{
// зажигаем светодиод, если равно - прием верный:
LED=0;
}
DelayMs(250); // мс всего
LED=1; // гасим
}
и еще :
//************************************************** ***********
unsigned char READ_BYTE(void) // чтение FIFO обращением к регистру
{
unsigned char i, temp;
SCK=0;
temp=0;
mm1:
if (nFINT) // ждем когда поднимется - значит байт принят
{
for(i = 0; i‹16; i++)
{
temp=temp‹‹1;
SCK=1;
DelayUs(5);
if (SDO) temp=temp|0x01;
i++;
SCK=0;
DelayUs(5);
} ;
return temp;
};
goto mm1;
}
Изюминка чтения буфера FIFO альтернативным методом чтения для меня оказалась в том, что его надо считывать 16-ю тактами , и только с 9 по 16 такты нужный мне регистр заполняется данными... Ну все правильно, FIFO 16- разрядный, данные заполняются , например, справа, а читаю с вывода SDO слева, нужная мне информация будет с 9 по 16-й такты. При заполнении буфера FIFO 8-ю битами (число предварительно запрограммировано) nFINT поднимается в 1, к этоту моменту первые 8 бит на ножке SDO ,будут нулями, вторые 8 бит -нужные данные...