Страница 1 из 1

Функции вывода зацикливаются! (Решено)

Добавлено: Сб ноя 13, 2010 03:13:26
krysun
Поднимал несколько раз тему по выводу данных по SPI на 4094, Вывод данных на 4094 по маске...
Проблема:

Код: Выделить всё

unsigned int m_ch [10] = {
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111
};

void send_byte(unsigned int byte)
{
   PORTB &= ~(1<<0);
   for(unsigned int mask = 0b10000000;mask;mask>>=1)
   {
      if(m_ch[byte]&mask){PORTB |= (1<<5);}
      else {PORTB &= ~(1<<5);}
      PORTB |= (1<<7);
      PORTB &= ~(1<<7);_delay_us(5);
   }
   PORTB |= (1<<0);_delay_ms(1000);
}

void main (void)
{
DDRB=0xFF;
//test();
send_byte(1);
send_byte(2);
send_byte(3);
while(1);
}


Первый вызов функции проходит и на 3-х индикаторах светятся 1 (единицы).
Первый же вызов функции зацикливается.

Пробовал таким образом:

Код: Выделить всё

void test()
{
   PORTB &= ~(1<<0);_delay_ms(10);
   for(unsigned int mask = 0b10000000;mask;mask>>=1)
   {
      if(m_ch[3]&mask){PORTB |= (1<<5);}
      else {PORTB &= ~(1<<5);}
      PORTB |= (1<<7);_delay_ms(10);
      PORTB &= ~(1<<7);_delay_ms(10);
   }
   PORTB |= (1<<0);_delay_ms(1000);
//****
   PORTB &= ~(1<<0);_delay_ms(10);
   for(unsigned int mask = 0b10000000;mask;mask>>=1)
   {
      if(m_ch[4]&mask){PORTB |= (1<<5);}
      else {PORTB &= ~(1<<5);}
      PORTB |= (1<<7);_delay_ms(10);
      PORTB &= ~(1<<7);_delay_ms(10);
   }
   PORTB |= (1<<0);_delay_ms(1000);
   //*****
   PORTB &= ~(1<<0);_delay_ms(10);
   for(unsigned int mask = 0b10000000;mask;mask>>=1)
   {
      if(m_ch[5]&mask){PORTB |= (1<<5);}
      else {PORTB &= ~(1<<5);}
      PORTB |= (1<<7);_delay_ms(10);
      PORTB &= ~(1<<7);_delay_ms(10);
   }
   PORTB |= (1<<0);_delay_ms(1000);
   //exit();   
   
}

void main (void)
{
DDRB=0xFF;
test();
while(1);
}


Итог: Цифры 3,4 и 5 бегают по кругу.

Тов. Мявтор подкинул проэкт в Протеусе - все работает.
На реальном "станке" же опять с функции выйти не могу.

Код: Выделить всё

spi(1);
spi(2);
spi(3);


-> Результат тот же. На 2-х индикаторах светится "1".

Где копать? В FUSE-ах?

Mega162, 3.6864 Mz. Выставлен только SUT0=0.

Надеюсь на ваши мудрые советы.
Спасибо!

Re: Функции вывода зацикливаются!

Добавлено: Сб ноя 13, 2010 03:20:04
krysun
Урря! И лыжи то у меня едут)
Проблема решена.
В FUSE-ах была галочка, которой я не придал значения:
M161C=0 - Режим совместимости с mega161.
Снял и все заработало.
Сори за головняк!
:beer: