📄 main.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 + -