Помогите поймать золотую рыбку, ну или хотя бы малька.
Требуется принимать на ATMega328 поток байт по протоколу RS232 на скорости 9600. Причем штатный UART занят своими делами и его трогать нельзя.
Вот накропал шедевр, а он не пашет. Может кто чего подскажет?
Код: Выделить всё
#include <avr\io.h>
#include <util/delay.h>
#define BIT_DELAY 104 //Это длительность бита на скорости 9600 в микросекундах
unsigned char RxByte(void){//Функция которая принимает битики на лапе PB1
unsigned char buf = 0, //Холодильник для рыбы, он же буфер куда битики принимаются
i;//Просто счетчик
while(1){
buf = 0;
while(PINB & 2);//Ждем кода приплывает рыба-лоцман, он же старт-бит
_delay_us(BIT_DELAY/4);//Обождем 1/4 от длительности бита
for (i = 7; i!=0; i--){//Как говорится - пошла вода по трубам!
_delay_us(BIT_DELAY);//Обождем еще длительность бита
if (PINB & 2)//Как оно? рыба или пусто?
buf |= 0b10000000;//Есть рыбка
else
buf &= 0b01111111;//Нету ничего
buf >>= 1;//Пихаем в холодильник, то бишь в буфер
}
//Все! Косяк прошел, проверим замыкающую акулу
_delay_us(BIT_DELAY);//через длительность бита
if (PINB & 2)//Акула проплыла, усе нормально. Холодильник закрываем
return(buf);
}
}
символ "R" - начало тела косяка
три байта цифр - собственно промысловая рыба
и 0x0D - хвостик косяка
А принимается вот что: 0x1f, 0x4f, 0x68, 0x68, 0x30,, 0x3, 0x, 0x72, 0x36, 0x3, 0x19, 0x0 и т.д.
Че-то я уже измучился ловить не то, что надо. Гуглосетью забредал - ничего толкового не выловил.
Помогите пожалуйста найти косяк!


