- #include "stc32g.h"
-
- // 包含基础C支持代码
- #include "intrins.h"
- #include "math.h"
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
-
- // 变量类型重定义
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- // 多线程功能定义
- #define Task_Max 10 // 最大线程数
- u8 Task = 0; // 全局线程指针
- u8 Task_This[Task_Max] = {0}; // 线程状态表
- u16 Task_Timer[Task_Max] = {0}; // 线程私有定时器
- void Core_Init(void); // 函数声明
- void Delay(unsigned int Time);
- void Get_Delay(void);
- void main(void)
- {
- Core_Init();
- while (1)
- {
- Task = 1; // 线程1开始
- switch (Task_This[Task])
- {
- case 0:
- if(温度标志位)
- {
- P20 = 0;
- Delay(500);
- }
- break;
- case 2:
- P20 = 1;
- Task_This[Task] = 0; // 回到最初的状态
- break;
- default:
- Get_Delay();
- break;
- }
- }
- }
-
- // 初始化定时及核心功能
- void Core_Init(void)
- {
- AUXR |= 0x80; // 定时器时钟1T模式
- TMOD &= 0xF0; // 设置定时器模式
- TL0 = 0x40; // 设置定时初始值@24MHz,1ms
- TH0 = 0xA2; // 设置定时初始值
- TF0 = 0; // 清除TF0标志
- TR0 = 1; // 定时器0开始计时
- ET0 = 1; // 使能定时器0中断
- EA = 1;
- // IO初始化
- P0M0 = P0M1 = P1M0 = P1M1 = P2M0 = P2M1 = P3M0 = P3M1 = P4M0 = P4M1 = P5M0 = P5M1 = 0x00;
- P_SW2 |= 0x80; // 允许操作寄存器
- }
-
- void Timer0_Isr(void) interrupt 1
- {
- u8 xdata i;
- // 遍历所有线程定时器
- for (i = 0; i < Task_Max; i++)
- {
- if (Task_Timer[i] > 0)
- {
- Task_Timer[i]--;
- }
- }
- }
-
- // 设置非堵塞定时,刻度1ms
- void Delay(unsigned int Time)
- {
- Task_Timer[Task] = Time;
- Task_This[Task]++;
- }
-
- // 获取当前定时器状态
- void Get_Delay(void)
- {
- if (Task_Timer[Task] == 0)
- {
- Task_This[Task]++;
- }
- }
复制代码
早说功能不就行了
|