很久没有使用51单片机了,先试试RTX51吧,它是keil c51自带的,使用简单,效率高,占用空间少。
我们以闪灯为例,首先创建一个51空白程序,单片机选择SST89X58RD,然后将Keil\C51\RtxTiny2\SourceCode目录下的Conf_tny.A51文件复制到用户目录,并添加到项目中。
在项目选项中,操作系统(Operating system)选择RTX51 tiny。
打开Conf_tny.A51,修改INT_CLOCK为50000(默认是10000,通常在 1000-60000之间),这个值决定了系统的基本时间片。因为CH554上电后默认时钟频率是6M,芯片的指令周期是12分频,所以50000对应着 50000 x (12/6000000) = 0.1s = 100ms。时间越长,时间片就长,中断次数少;否则中断频率高。
TIMESHARING参数暂时不用修改,它决定了每个任务最长的执行时间(强制切换)。这里我们主动切换,就用不到这个参数。
然后添加主程序。
主程序
设计两个任务,每个任务控制一个LED。一个1S翻转一次,另外一个500ms翻转一次。使用RTX51时,不需要编写main()函数,软件从任务0开始执行。
- #include <reg52.h>#include <rtx51tny.h>
-
- sbit LED1 = P1^6;
- sbit LED2 = P1^7;
-
- job0 () _task_ 0
- {
- os_create_task (1);
-
- while(1)
- {
- // 1s
- LED1 = !LED1;
- os_wait(K_TMO, 10, 0);
- }
- }
-
- job1 () _task_ 1
- {
- while(1)
- {
- // 500ms
- LED2 = !LED2;
- os_wait(K_TMO, 5, 0);
- }
- }
完整例子:
blinky.zip
(32.9 KB)
(下载次数: 3, 2017-10-13 14:24 上传)
本帖最后由 dcexpert 于 2017-10-13 16:23 编辑