📄 main.c
字号:
#include "include.h"
/**************************************************************************************
* 函数原型:
* 函数功能:
* 输入参数:
* 输出参数:
* 函数说明:
**************************************************************************************/
OS_TID TaskA_ID;
OS_TID TaskB_ID;
OS_TID TaskC_ID;
OS_TID TaskD_ID;
/**************************************************************************************
函数名称:InitT0
函数功能:定时器0初始化
输入参数:
输出参数:
函数说明:T0工作于模式1,16位计数器,1ms中断一次
**************************************************************************************/
void InitT0(void)
{
TMOD &= 0xF0; // Clear all T0 bits (T1 left unchanged)
TMOD |= 0x01; //T0工作于模式1
TH0=T0H_COUNTER; //
TL0=T0L_COUNTER;
Timer0Run(); //TR0=1;T0开始计数
//PT0=1; //T0中断优先级高
IrqAll_Enable(); //打开总中断
IrqT0_Enable(); //打开T0中断允许
}
/**************************************************************************************
函数名称:InT0
函数功能:定时器0中断服务程序
输入参数:
输出参数:
函数说明:1ms中断一次
**************************************************************************************/
//void InT0(void) interrupt 1 //using 1
//{ IrqT0_Unable();
// TH0=T0H_COUNTER;
// TL0=T0L_COUNTER;
// IrqT0_Enable();
//}
void MainInit(void)
{
InitT0();
}
void TaskA(void)
{char a;
while (1)
{
//os_evt_set(B0000_0100, TaskB_ID);
a++;
P1 = P1^B0000_0001;
tsk_lock();
printf("TaskA is Running!\r\n");
tsk_unlock();
os_dly_wait(ms(1000));
}
}
void TaskB(void)
{char b;
OS_RESULT result;
while (1)
{
b++;
result=os_evt_wait_or ( B0000_0111, ms(8000) );
if(result==OS_R_TMO)
{
tsk_lock();
printf("result is OS_R_TMO!\r\n");
tsk_unlock();
}
else
{
tsk_lock();
printf("result is OS_R_EVT!\r\n");
tsk_unlock();
}
P1 = P1^B0000_0010;
//os_dly_wait(ms(4000));
tsk_lock();
printf("TaskB is Running!\r\n");
tsk_unlock();
}
}
void TaskC(void)
{char c;
//char buf[3];
while (1)
{
os_evt_set(B0000_0010, TaskB_ID);
c++;
P1 = P1^B0000_0100;
tsk_lock();
printf("TaskC is Running!\r\n");
tsk_unlock();
os_dly_wait(ms(12000));
}
}
void TaskD(void)
{char d=0;
//char buf[3];
while (1)
{
os_evt_set(B0000_0001, TaskB_ID);
d++;
// if(d==5)
// {
// OSTaskResume(1);
// OSTaskSuspend(3);
// }
P1 = P1^B0000_1000;
tsk_lock();
printf("TaskD is Running!\r\n");
tsk_unlock();
os_dly_wait(ms(16000));
}
}
void InitCom()
{
PCON = 0x00;//0x80; //波特率加倍
SCON |= 0x50; //设定串行端口工作于模式1,允许接收数据
TMOD |= 0x20; //设定计时器1工作于模式2
TH1 = 0xfd; //设定波特率为19200BPS
TL1 = 0Xfd;
TR1 = 1; //timer 1 run
//ES=1,EA=1;
TI = 1;//使用printf函数时必须设置为1才能发送数据
}
/*
//main~TaskA, main~TaskB, main~TaskC, main~TaskD
//init~TaskA, init~TaskB, init~TaskC, init~TaskD
*/
uint8 xdata taskA_stack[50];
uint8 xdata taskB_stack[50];
uint8 xdata taskC_stack[50];
uint8 xdata taskD_stack[50];
void init (void)
{
//在 os_sys_init 中调用 OSInit(SP);
//OSTaskCreate(TaskA, 0);
//OSTaskCreate(TaskB, 1);
//OSTaskCreate(TaskC, 2);
TaskA_ID=os_tsk_create_user( TaskA, 0, taskA_stack, sizeof(taskA_stack) );
TaskB_ID=os_tsk_create_user( TaskB, 1, taskB_stack, sizeof(taskB_stack) );
TaskC_ID=os_tsk_create_user( TaskC, 2, taskC_stack, sizeof(taskC_stack) );
TaskD_ID=os_tsk_create_user( TaskD, 3, taskD_stack, sizeof(taskD_stack) );
InitCom();
//os_dly_wait(ms(100));
//os_tsk_delete_self ();
MainInit();
//OSTaskSuspend(TaskB_ID);
DelayNop(1);
}
//44.2368MHz
void main(void)
{//char ie_par;
DelayNop(1);
os_sys_init(init);
//MainInit();
while(1)
{
DelayNop(1);
PCON = PCON | 0x01; // CPU进入休眠状态
//ie_par=IE;
DelayNop(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -