⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MicroChip等单片机开发的专业RTOS,源代码
💻 C
字号:
#define OS_MAIN
#include "\jacos\incl\jacos.h"
#include "\jacos\prim\prim_io.h"

OST_TASK_T key_monitor_tcb;
OST_TASK_T led_1_tcb;
OST_TASK_T led_2_tcb;
OST_TASK_T led_3_tcb;

#define LED1      0x01
#define LED2      0x02
#define LED3      0x04
#define key1      0x08
#define key2      0x10
#define key3      0x20
#define led1_stop 0x40

#define LED_OFF(a)  {PORTB |=  (a);}
#define LED_ON(a)   {PORTB &= ~(a);}

#if defined(_AVR_) || defined(_GAVR_)
  #define is_key_pressed(a)  !(PINB & (a))
  #define PORT_INIT() {DDRB = (char)(~(key1+key2+key3));}

#elif defined(_PIC_) || defined(_PIC18I)
  #define is_key_pressed(a)  !(PORTB & (a))
  #define PORT_INIT() {TRISB = key1+key2+key3;}

#endif

unsigned char keys;
const unsigned char sos[3] = {10,30,10};

__task void key_monitor(void)
{
  static unsigned char  m_key1, m_key2, m_key3;
  PORT_INIT();
  while(1) {
    OS_Delay(3);
    if (is_key_pressed(key1)) {
      if (++m_key1 & 0x04) keys |= key1;
    } else {
      keys &= ~key1;
      m_key1 = 0;
    }
    if (is_key_pressed(key2)) {
      if (++m_key2 & 0x04) keys |= key2;
    } else {
      m_key2 = 0;
      keys &= ~key2;

    }
    if (is_key_pressed(key3)) {
      if (++m_key3 == 0x04) {
        keys ^= led1_stop;
        keys |= key3;
      }
    } else {
      m_key3 = 0;
      keys &= ~key3;
    }
  }
}

__task void led_1( void )
{
  while(1) {
    while(1) {
      if (keys & led1_stop) break;
      LED_ON(LED1);
      OS_Delay(25);
      LED_OFF(LED1);
      OS_Delay(25);
      if (keys & led1_stop) break;
      LED_ON(LED1);
      if (keys & key1) {
        OS_Delay(150);
      } else {
        OS_Delay(25);
      }
      LED_OFF(LED1);
      OS_Delay(25);
    }
    OS_Task_Stop();
  }

}

__task void led_2( void )
{
  static unsigned char symb, cou;
  while(1) {
    symb = 0;
    do {
      for (cou = 3; cou != 0; cou--) {
        LED_ON(LED2);
        OS_Delay(sos[symb]);
        LED_OFF(LED2);
        OS_Delay(10);
      }
      OS_Delay(20);
    } while (++symb < 3);
    OS_Delay(100);
    if (keys & key2) {
      OS_Delay(150);
    }
  }
}

__task void led_3( void )
{
  while(1) {
    LED_ON(LED3);
    OS_Delay(10);
    LED_OFF(LED3);
    OS_Delay(50);
  }
}

void OS_Idle(void)
{
  if ((OS_Task_Status(&led_1_tcb) & OSS_STOPPED) && !(keys & led1_stop)) {
    OS_Task_Resume(&led_1_tcb);
  }
}

void main(void)
{
  OS_Init();
  OS_Task_Create(key_monitor,&key_monitor_tcb);
  OS_Task_Create(led_1,&led_1_tcb);
  OS_Task_Create(led_2,&led_2_tcb);
  OS_Task_Create(led_3,&led_3_tcb);

  #include "\jacos\prim\prim_t10.c"

  while(1) {
    OS_Scheduler();
  }
}

//__interrupt void intr(void)
#include "\jacos\prim\prim_isr.c"
{
  OS_Timer_Tick_Set();
  OS_Timer();
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -