标题: STC8单片机跑RTX51 OS 1T模式 [打印本页]

作者: 李牧林    时间: 2019-9-12 22:07
标题: STC8单片机跑RTX51 OS 1T模式
本帖最后由 李牧林 于 2019-9-14 10:47 编辑

网上能找到的资料,大部分是STC15单片机或者STC12或者STC89在12T的模式下跑RTX51,本人觉得太浪费这些增强型的51单片机芯片了,于是经过测试,成功在1T模式下跑RTX51。
具体涉及的操作如下:
1.在工程中添加RTX51
2.头文件包含#include <rtx51tny.h>
3.修改Conf_tny.A51的INT_CLOCK   EQU  55400  这边的55400原来默认为10000

测试的主函数如下所示:
#include <rtx51tny.h>
#define MAIN_Fosc                11059200L        //定义主时钟
#include        "STC8.H"
#include        "uart.H"

sbit LED_B=P0^7;     //蓝色LED用IO口P07

void job0(void) _task_ 0  
{
        AUXR |= 0x80;  //定时器时钟1T模式
        P0M1 &= 0x7F;        P0M0 &= 0x7F;   //设置P0.7为准双向口
        UartInit();
        os_create_task(1);         //创建任务1
        os_create_task(2);         //创建任务1
         os_delete_task(0);        //删除自己(task0),使task0退出任务链表
}  

void job1(void) _task_ 1  
{  
                while(1)
                {              
                        LED_B = !LED_B;
                        os_wait(K_IVL, 10, 0);  //等待10个时钟滴答(ticks),即100ms
    }  
}  

void job2(void) _task_ 2  
{  
                while(1)
                {              
                        UART_SendString("hello\r\n");
                        os_wait(K_IVL, 100, 0);  //等待100个时钟滴答(ticks),即1s
    }  
}  


经过测试,os_wait(K_IVL, 1, 0)的时间基本能比较接近10ms。os_wait(K_IVL, 10, 0)的时间比较接近100ms。看下图。



最后注意,本环境是在
#define MAIN_Fosc 11059200L 的情况下测试的。



作者: 51hei团团    时间: 2019-9-13 16:48
很好,值得学习的好东东
作者: Mac-Mac    时间: 2019-9-14 16:32
很好,值得学习
作者: m182892    时间: 2019-9-15 08:38
谁分享一下RTX51
作者: yuche2018    时间: 2019-9-15 11:57
新手 来学习一下
作者: 李牧林    时间: 2019-9-15 16:01
m182892 发表于 2019-9-15 08:38
谁分享一下RTX51

百度资料非常多吧
作者: 1113634577    时间: 2019-9-26 11:34
谢谢!我调试一下看看效果
作者: payforme    时间: 2020-3-1 22:15
没有关系,,tick周期是你定的,,和MCU快慢没关系,无论12T还是1T,,你都定的10ms,,,没区别
作者: sandgod    时间: 2020-5-17 00:16
55400怎么来的?
作者: Thinker2014    时间: 2020-7-20 14:03
sandgod 发表于 2020-5-17 00:16
55400怎么来的?

不知道怎么计算的   我猜测的这个  INT_CLOCK 应该是和timer计时类似的计算方法

如果是1ms中断一次的话, 则可以设  周期数为  CX, 然后有如下 公示:
CX = 1000*11.0592/1T = 11059
则初值设置为: 65535 - CX = 54476  约等于 54400   

但这个是1ms发生中断的INT_CLOCK值。  楼主那个具体的值是如何得到的,尚不清楚。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1