RTX51tiny 测试验证---led、中断、串口、task之间传递信息等

一、设计需求

设单片机的时钟12MHz,型号为AT89S52。单片机引脚连接有4个LED,其中:

  1. LED1以30Hz的固定频率闪烁;
  2. LED2在外部中断发生以后,亮0.2秒,然后熄灭;
  3. LED3在LED2熄灭以后以20Hz的频率闪烁10次然后熄灭;
  4. *将LED的亮灭情况实时通过串口输出;

二、题目分析

题目中4个LED需要“同时”执行不同的操作,如果使用常规的方式来构建,是有一些难度的;而如果用RTX51 tiny,实现起来将比较简单。我们只需要构建不同的task,每一个task都相当于在单独执行,但是宏观上看起来多个任务是在 “同时”执行的,根据题目要求,除了简单的创建task,我们还需要用到task之间的信号传递。对于rtos的理解有点类似于数码管,快速依次去点亮每一位数码管,这显然是串行的操作,但是看起来这几位数码管是同时亮起来的,又像是在并行工作。

三、模块分析

3.1 点亮LED1

题目要求LED1以30Hz的固定频率闪烁,经过计算可知LED1的电平状态需要33ms翻转一次。创建一个task,在这个task里每延时33ms让LED1电平翻转一次即可。

关于RTOS的延时,系统中给了os_wait2( )函数,这个函数有两个输入参数,详细可以看帮助文档。这里需要注意一个tick代表多长时间,这个可以在Conf_tny.51文件中查看,通过INT_CLOCK的值来计算,默认值为10000,如果使用12M的晶振,那么这里就是10ms,也就是说如果我们写了os_wait2( K_TMO,1),就表示延时10ms。我们发现这里最小的延时单位只能是10ms。可以更改INT_CLOCK的值来减小延时单位长度。这里将INT_CLOCK的值改为1000,一个延时单位就是1ms。需要注意,os_wait2( )中的参数类型是unsigned char,意味着我们最大只能写255,如果需要更长的延时,可以通过for循环来构建。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值