×

使用AT89S52在RTX51 tiny实时操作系统中实现4个LED的详细资料说明

消耗积分:1 | 格式:pdf | 大小:0.11 MB | 2019-04-23

张磊

分享资料个

  一、设计需求

  设单片机的时钟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循环来构建。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !