| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【51单片机】 -> 正文阅读 |
|
[嵌入式]【51单片机】 |
#include <reg51.h> ?????????????//51 单片机头文件 #define GPIO0_CONCTRON P0 ?????????????// 定义 IO #define GPIO1_CONCTRON P1 #define GPIO2_CONCTRON P2 #define GPIO3_CONCTRON P3 #define true 1 #define flase 0 #define MaxTask 3? ?????????????// 总任务数 #define Task_one 0? ?????????????// 任务 0 #define Task_two 1? ?????????????// 任务 1 #define Task_three 2? ?????????????// 任务 2 #define Task_one_Period 100? ?????????????// 任务 0 的挂起周期 // 也就是说 它过了这个时间再运行 #define Task_two_Period 4000? ?????????????// 任务 0 的挂起周期 #define Task_three_Period 70? ?????????????// 任务 0 的挂起周期 int count = 0; typedef struct? ?????????????// 结构体 { unsigned int wTaskPeriod; ??????????????// 运行周期 unsigned int wTaskCount; ?????????????// 运行周期计数器 unsigned int wEvent; ?????????????// 任务信号 }OSTCB; OSTCB OS_TCB[MaxTask]; void OS_Create_Task(unsigned int mTaskPro,unsigned int mTaskPreiod) ?????????????// 创建任务第一个参数 任务 ID 号 第二个参数 任务运行周期 { OS_TCB[mTaskPro].wTaskPeriod= mTaskPreiod;???????????? ?// 把任务运行周期加载到 ?TCB 结构体 } void OS_Event_Post(unsigned char mTask,unsigned int mEvent)???????????? // 任务信号邮箱 { OS_TCB[mTask].wEvent =( 1<<mEvent); } void OS_Updata_Task(void)???????????? // 任务加载 { int mTemp; for(mTemp = 0;mTemp < MaxTask;mTemp ++)???????????? ?// 查询三个任务, { OS_TCB[mTemp].wTaskCount ++; if(OS_TCB[mTemp].wTaskCount == OS_TCB[mTemp].wTaskPeriod)???????????? // 如果运行周期计数器 = 运行周期 则任务发送信号量 说明改任务要运行了 { OS_TCB[mTemp].wTaskCount = 0; OS_Event_Post(mTemp,mTemp);???????????? // 第一个参数任务 ID 号 第二个参数 任务信号量 } } } void OS_Task_Int(void)???????????? // 任务初始化 { unsigned char mTemp; for(mTemp = 0;mTemp < MaxTask;mTemp ++) { OS_TCB[mTemp].wTaskPeriod = 0; OS_TCB[mTemp].wTaskCount = 0; OS_TCB[mTemp].wEvent = 0; } } unsigned int OS_Event_Pend(unsigned char mTask)??????????? ?// 发送任务邮箱 { unsigned int mTaskEvent;??????????? // 发送这个任务的信号量 mTaskEvent = OS_TCB[mTask].wEvent; OS_TCB[mTask].wEvent &=~mTaskEvent;??????????? ?// 运行完后就清这个任务的信号量 return mTaskEvent; } void Int_Hardware(void)??????????? //51 单片机复位 { GPIO0_CONCTRON = 0xff; GPIO1_CONCTRON = 0x01; GPIO2_CONCTRON = 0xff; GPIO3_CONCTRON = 0xff; } void Task1(void)??????????? // 任务 1 运行函数 { unsigned int GetEvent; while(1) { GetEvent = OS_Event_Pend(Task_one); if(GetEvent == 0) { return; } if(GetEvent &(1<<Task_one)) { GPIO0_CONCTRON = ~GPIO0_CONCTRON; } } } void Task2(void)??????????? // 任务 2 行函数 { unsigned int GetEvent; while(1) { GetEvent = OS_Event_Pend(Task_two); if(GetEvent == 0) { return; } if(GetEvent & (1<<Task_two)) { GPIO1_CONCTRON = ~GPIO1_CONCTRON; } } } void Task3(void)????????? ?// 任务 3 行函数 { unsigned int GetEvent;????????? ?// 获取信号量 while(1) { GetEvent = OS_Event_Pend(Task_three);????????? // 查任务是否运行完 返回信号量 if(GetEvent == 0)????????? // 如任务运行完成任务挂起,等待下次运行 { return; } if(GetEvent & (1<<Task_three))????????? // 有任务在运行,就运行这个任务 { GPIO2_CONCTRON = ~GPIO2_CONCTRON;????????? // 单片机 IO 取反 } } } void OS_start(void)????????? // 任务开始 { while(1) { Task1(); Task2(); Task3(); } } void main(void) { IE = 0x82;????????? // 开中断 TMOD = 0x01; TH0 = (65536-1)/256; TL0 = (65536-1)%256; TR0 = 1;????????? ?// 开定时器 Int_Hardware();????????? ?// 硬件复位 OS_Task_Int();????????? // 任务初始化 while(1) { OS_Create_Task(Task_one,Task_one_Period);????????? ?// 在 TCB 结构体里任务加载下面 3 个任务 OS_Create_Task(Task_two,Task_two_Period); OS_Create_Task(Task_three,Task_three_Period); OS_start(); } } void inter(void) interrupt 1 ??????????// 任务毫秒 查循一次进行任务调度 { TH0 = (65536-1)/256; TL0 = (65536-1)%256; OS_Updata_Task();????????? // 任务查询,更新 和 发送 } |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 10:07:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |