многократный сдвиг сдвигового регистра не передается на следующий регистр

введите сюда описание изображенияя передаю байт в сдвиговый регистр, затем сдвигаю на единицу и опять передаю. цель - двигать 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

Ответы (0 шт):