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

📄 main.lst

📁 MicroChip等单片机开发的专业RTOS,源代码
💻 LST
字号:
     1: #define OS_MAIN

     2: #include "\jacos\incl\jacos.h"

     3: #include "\jacos\prim\prim_io.h"

     4: 

     5: OST_TASK_T key_monitor_tcb;

     6: OST_TASK_T led_1_tcb;

     7: OST_TASK_T led_2_tcb;

     8: OST_TASK_T led_3_tcb;

     9: 

    10: #define LED1      0x01

    11: #define LED2      0x02

    12: #define LED3      0x04

    13: #define key1      0x08

    14: #define key2      0x10

    15: #define key3      0x20

    16: #define led1_stop 0x40

    17: 

    18: #define LED_OFF(a)  {PORTB |=  (a);}

    19: #define LED_ON(a)   {PORTB &= ~(a);}

    20: 

    21: #if defined(_AVR_) || defined(_GAVR_)

    22:   #define is_key_pressed(a)  !(PINB & (a))

    23:   #define PORT_INIT() {DDRB = (char)(~(key1+key2+key3));}

    24: 

    25: #elif defined(_PIC_) || defined(_PIC18I)

    26:   #define is_key_pressed(a)  !(PORTB & (a))

    27:   #define PORT_INIT() {TRISB = key1+key2+key3;}

    28: 

    29: #endif

    30: 

    31: unsigned char keys;

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

    33: 

    34: __task void key_monitor(void)

    35: {

    36:   static unsigned char  m_key1, m_key2, m_key3;

    37:   PORT_INIT();

    38:   while(1) {

    39:     OS_Delay(3);

    40:     if (is_key_pressed(key1)) {

    41:       if (++m_key1 & 0x04) keys |= key1;

    42:     } else {

    43:       keys &= ~key1;

    44:       m_key1 = 0;

    45:     }

    46:     if (is_key_pressed(key2)) {

    47:       if (++m_key2 & 0x04) keys |= key2;

    48:     } else {

    49:       m_key2 = 0;

    50:       keys &= ~key2;

    51: 

    52:     }

    53:     if (is_key_pressed(key3)) {

    54:       if (++m_key3 == 0x04) {

    55:         keys ^= led1_stop;

    56:         keys |= key3;

    57:       }

    58:     } else {

    59:       m_key3 = 0;

    60:       keys &= ~key3;

    61:     }

    62:   }

    63: }

    64: 

    65: __task void led_1( void )

    66: {

    67:   while(1) {

    68:     while(1) {

    69:       if (keys & led1_stop) break;

    70:       LED_ON(LED1);

    71:       OS_Delay(25);

    72:       LED_OFF(LED1);

    73:       OS_Delay(25);

    74:       if (keys & led1_stop) break;

    75:       LED_ON(LED1);

    76:       if (keys & key1) {

    77:         OS_Delay(150);

    78:       } else {

    79:         OS_Delay(25);

    80:       }

    81:       LED_OFF(LED1);

    82:       OS_Delay(25);

    83:     }

    84:     OS_Task_Stop();

    85:   }

    86: 

    87: }

    88: 

    89: __task void led_2( void )

    90: {

    91:   static unsigned char symb, cou;

    92:   while(1) {

    93:     symb = 0;

    94:     do {

    95:       for (cou = 3; cou != 0; cou--) {

    96:         LED_ON(LED2);

    97:         OS_Delay(sos[symb]);

    98:         LED_OFF(LED2);

    99:         OS_Delay(10);

   100:       }

   101:       OS_Delay(20);

   102:     } while (++symb < 3);

   103:     OS_Delay(100);

   104:     if (keys & key2) {

   105:       OS_Delay(150);

   106:     }

   107:   }

   108: }

   109: 

   110: __task void led_3( void )

   111: {

   112:   while(1) {

   113:     LED_ON(LED3);

   114:     OS_Delay(10);

   115:     LED_OFF(LED3);

   116:     OS_Delay(50);

   117:   }

   118: }

   119: 

   120: void OS_Idle(void)

   121: {

   122:   if ((OS_Task_Status(&led_1_tcb) & OSS_STOPPED) && !(keys & led1_stop)) {

   123:     OS_Task_Resume(&led_1_tcb);

   124:   }

   125: }

   126: 

   127: void main(void)

   128: {

   129:   OS_Init();

   130:   OS_Task_Create(key_monitor,&key_monitor_tcb);

   131:   OS_Task_Create(led_1,&led_1_tcb);

   132:   OS_Task_Create(led_2,&led_2_tcb);

   133:   OS_Task_Create(led_3,&led_3_tcb);

   134: 

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

   136: 

   137:   while(1) {

   138:     OS_Scheduler();

   139:   }

   140: }

   141: 

   142: //__interrupt void intr(void)

   143: #include "\jacos\prim\prim_isr.c"

   144: {

   145:   OS_Timer_Tick_Set();

   146:   OS_Timer();

   147: }

   148: 

   149: 

   150: 

   151: 

   152: 

⌨️ 快捷键说明

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