📄 sample_c.c
字号:
#include <REG51F.H>
#include "k51.h"
unsigned char idata sig1;
unsigned char idata mut1;
unsigned int count_t1_intrs;
#pragma rb(0)
void task1()
{
for (;;)
{
TI = 0;
SBUF = '1';
k51_sleep(0x10);
}
}
#pragma rb(1)
void task2()
{
// this task waits on a signal witch can be signaled by isr.
for (;;)
{
k51_signal_wait(&sig1);
k51_mutex_wait(&mut1);
// send "Timer1 signal."
TI = 0;
SBUF = 'T';
k51_sleep(1);
TI = 0;
SBUF = 'i';
k51_sleep(1);
TI = 0;
SBUF = 'm';
k51_sleep(1);
TI = 0;
SBUF = 'e';
k51_sleep(1);
TI = 0;
SBUF = 'r';
k51_sleep(1);
TI = 0;
SBUF = '1';
k51_sleep(1);
TI = 0;
SBUF = ' ';
k51_sleep(1);
TI = 0;
SBUF = 'S';
k51_sleep(1);
TI = 0;
SBUF = 'i';
k51_sleep(1);
TI = 0;
SBUF = 'g';
k51_sleep(1);
TI = 0;
SBUF = 'n';
k51_sleep(1);
TI = 0;
SBUF = 'a';
k51_sleep(1);
TI = 0;
SBUF = 'l';
k51_sleep(1);
TI = 0;
SBUF = '.';
k51_sleep(1);
// send "CRLF"
TI = 0;
SBUF = 0xd;
k51_sleep(1);
TI = 0;
SBUF = 0xa;
k51_mutex_release(&mut1);
}
}
#pragma rb(2)
void task3()
{
unsigned char i;
for (;;)
{
k51_sleep(60);
k51_mutex_wait(&mut1);
for (i=0; i<6; i++)
{
TI = 0;
SBUF = '3';
k51_sleep(1);
}
TI = 0;
SBUF = 0xd;
k51_sleep(1);
TI = 0;
SBUF = 0xa;
k51_mutex_release(&mut1);
}
}
#pragma rb(3)
void task4()
{
unsigned char i;
for (;;)
{
k51_sleep(80);
k51_mutex_wait(&mut1);
for (i=0; i<8; i++)
{
TI = 0;
SBUF = '4';
k51_sleep(1);
}
TI = 0;
SBUF = 0xd;
k51_sleep(1);
TI = 0;
SBUF = 0xa;
k51_mutex_release(&mut1);
}
}
#pragma rb(3)
void main()
{
unsigned char i;
count_t1_intrs = 0;
k51_signal_init(&sig1);
k51_mutex_init(&mut1);
k51_init();
task1_init(); /* task will really active after an interrupt */
/* because PRIO_MAIN is set to 1, this function */
/* returns error_prio, failed */
task2_init();
task3_init();
task4_init();
TMOD = 0x11; /* timer1 mode1...timer0 mode1 */
TR1 = 1;
TR0 = 1;
IE = 0x8a; /* enable timer1 and timer0 intr */
for (;;)
{
k51_sleep(20);
k51_mutex_wait(&mut1);
for (i=0; i<2; i++)
{
TI = 0;
SBUF = '1';
k51_sleep(1);
}
TI = 0;
SBUF = 0xd;
k51_sleep(1);
TI = 0;
SBUF = 0xa;
k51_mutex_release(&mut1);
}
}
// timer0 intr provides system timer
void isr_timer0()
{
k51_tick(); // k51_tick() can be called at any level
}
// timer1 interrupt service function.
// it sends signal to task2, and makes it active.
void isr_timer1()
{
count_t1_intrs++;
if (count_t1_intrs >= 300)
{
count_t1_intrs = 0;
k51_signal_send(&sig1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -