Easyelectronics.ru

Электроника для всех
Текущее время: 07 дек 2019, 04:29

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Не работает в реале
СообщениеДобавлено: 01 мар 2015, 00:17 
Заглядывает иногда

Зарегистрирован: 22 июн 2014, 14:36
Сообщения: 197
написал прогу простую для отработки стате машине и прерывания на кнопках. в симуляции работает, и на вид вродь все правильно. но в реале загружаешь в пик и ничего не прет.сколько не крутил и так и так - не работает.
Код:
#include <sahl_tx.h>
enum states {start, wake_up, work} stateSM;
int counter;
int1 flag_wake;
int1 flag_work;

#INT_RB
void  RB_isr(void)
{
   if((!input(BUT_WAKE))||(!input(BUT_WORK)))
   {
      delay_ms(30); //debonce
      if(!input(BUT_WAKE))
      {
         flag_wake = 1;
      }
      if(!input(BUT_WORK))
      {
         flag_work = 1;
      }
      disable_interrupts(INT_RB);
      enable_interrupts(GLOBAL);
   }
}

#INT_TIMER1
void  TIMER1_isr(void)
{

   counter++;
}

void init_PIC();

void main()
{
   stateSM = start;
   while(TRUE)
   {
      switch (stateSM)
      {
         case start:
            init_PIC();
            stateSM = wake_up;
         case wake_up:
            clear_interrupt(INT_RB);
            enable_interrupts(INT_RB);
            while(1)
            {
               if(flag_wake == 1)
               {
                  printf("I'm wake\n");
                  output_high(LED_WAKE);
                  stateSM = work;
                  flag_wake = 0;
                  clear_interrupt(INT_RB);
                  enable_interrupts(INT_RB);
                  break;
               }
               if(flag_work == 1)
               {
                  flag_work = 0;
                  clear_interrupt(INT_RB);
                  enable_interrupts(INT_RB);
               }
            }
         case work:
            clear_interrupt(INT_RB);
            enable_interrupts(INT_RB);
            while(1)
            {
               if(flag_work == 1)
               {
                  printf("I'm working\n");
                  output_high(LED_WORK);
                  flag_work = 0;
                  clear_interrupt(INT_RB);
                  enable_interrupts(INT_RB);
               }
               if(flag_wake == 1)
               {
                  flag_wake = 0;
                  clear_interrupt(INT_RB);
                  enable_interrupts(INT_RB);
               }
            }
      }
   }

}

void init_PIC()
{
   port_B_pullups(0x30);
   //setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);      //524 ms overflow
   input(BUT_WAKE);
   input(BUT_WORK);
   
   output_high(LED_WAKE);
   output_high(LED_WORK);
   delay_ms(2000);
   output_low(LED_WAKE);
   output_low(LED_WORK);
   
   counter = 0;
   flag_wake = 0;
   flag_work = 0;
   
   disable_interrupts(INT_RB);
   disable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не работает в реале
СообщениеДобавлено: 03 мар 2015, 22:43 
Заглядывает иногда

Зарегистрирован: 22 июн 2014, 14:36
Сообщения: 197
неужели за все это время никто не понял в чем дело?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB