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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
krysun
Открыл глаза
Сообщения: 41
Зарегистрирован: Вт окт 19, 2010 02:24:42
Откуда: Odessa

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

Сообщение 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.

Надеюсь на ваши мудрые советы.
Спасибо!
Последний раз редактировалось krysun Сб ноя 13, 2010 03:21:06, всего редактировалось 1 раз.
Это лыжи не едут!!!
Аватара пользователя
krysun
Открыл глаза
Сообщения: 41
Зарегистрирован: Вт окт 19, 2010 02:24:42
Откуда: Odessa

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

Сообщение krysun »

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

Вернуться в «Микроконтроллеры и ПЛИС»