многократный сдвиг сдвигового регистра не передается на следующий регистр
я передаю байт в сдвиговый регистр, затем сдвигаю на единицу и опять передаю. цель - двигать 1 включенный бит по последовательно включенным регистрам.
Проблема в том, что первые 8 сдвигов от 0 до 7 правильно последовательно двигают единицу по всем разрядам, но при этом 1.начинают передаваться биты в следующие регистры, хотя до последнего выхода единица еще не добралась. 2.9 и последующие сдвиги не продолжают сдвигать бит во 2 и 3 регистре, загораются какие то непоследовательные биты, но больше единица не ползет последовательно по всем битам 2 и 3 регистра. хотя подключен выход Qs на вход последовательных данных следующего регистра.
//--------------------------light all digits then off all the digits
while (i<12)
{
//-------- indicator cycles
SetPgAddr(i,i);
SetClmAddr((i*3),120);
if (i<10)
{
d=1;s=i+1; //print 1st digit 0 2nd digit is real number +1 (my coding)
Char1(d); Char1(s);
}
if ((i>9)&(i<20))
{
d=2;s=i+1-10;
Char1(d); Char1(s);
}
if ((i>19)&(i<30))
{
d=3;s=i+1-20;
Char1(d); Char1(s);
}
//-------------indicator end -------------
SPDR = 0b00000000; //set to data register nulls
while(!(SPSR & (1<<SPIF)));//wait while data will be transferred / russian : ???????? ???? ?????? ???????????
// then generate negative front (drop) for recording to the STORAGE REGISTER ??????????? ????????????? ????? ??? ?????? ? STORAGE REGISTER
//------------CREATING PULSE -----------------
PORTB |= (1<<PORTB2); //HIGH LEVEL PB2-to 12 pin on register/??????? ???????
_delay_ms(50);
PORTB &= ~(1<<PORTB2); //LOW LEVEL ?????? ???????
//------------ PULSE CREATED -------------
_delay_ms(1000);
//SPDR = 0b11111111;//set to data register 1's
//SPDR = 0b00000001;//set to data register 1's
SPDR = (1<<i);
while(!(SPSR & (1<<SPIF)));//wait while data will be transferred/ ???????? ???? ?????? ???????????
// then generate negative front (drop) for recording to the STORAGE REGISTER ??????????? ????????????? ????? ??? ?????? ? STORAGE REGISTER
PORTB |= (1<<PORTB2); //HIGH LEVEL /??????? ???????
_delay_ms(50);
PORTB &= ~(1<<PORTB2); // LOW LEVEL / ?????? ???????
_delay_ms(2500);
i++;
}
i=0;
Clearscreen();
//------------------------END light all digits then off all the digits