6842|7

633

帖子

0

TA的资源

裸片初长成(中级)

楼主
 

基于Easy51RTOS的Mini51板万年历,DS1302+DS18B20 [复制链接]

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑

来源:大学生电子实验室 基于Easy51RTOS的Mini51板万年历,DS1302时钟、DS18B20温度传感器,人性化按键设计…… 程序设计思想提炼如下图所示 共4个按键操作 1、时间设置:3秒长按进入时钟调整模式,单次按键循环选择设置对象; 2、加操作:对指定的对象(闪烁提示)进行加1操作,加操作为循环方式; 3、减操作:对指定的对象(闪烁提示)进行减1操作,减操作为循环方式; 4、OK键,设置好参数,按该键退出设定模式,进入自然走钟模式。 特别是进入设置时间模式后,长时间不按键,10s自动退出回到走钟模式, 按键虽然是查询模式,在100Hz扫描频度上,反映灵敏,要多快有多快,不丢失有效按键。 另外解决了千年问题,可以设置2199或9999年! 以上人性化按键编程值得大家学习喔! Easy51RTOS:精简协作式不可剥夺嵌入式操作系统! 功能不断完善,教程慢慢整理…… task0(); //按键扫描100Hz,周期10ms,响应足够快! task1(); //LCD显示,周期300ms task2(); //温度测量,周期100ms,根据18b20的特点,任务内部计数延时,等待温度转换,不占CPU task3(); //实时时钟,读取周期200ms 实物版指在Mini51板V4上实际测试。 [ 本帖最后由 clark 于 2009-8-28 09:26 编辑 ]

 

DS18B20.pdf

136.59 KB, 下载次数: 84

DS1302.pdf

217.31 KB, 下载次数: 97

Easy51RTOS_modle.rar

87.11 KB, 下载次数: 163

Easy51RTOS模板程序

small_rtos_exa1.rar

117.91 KB, 下载次数: 112

基于Easy51RTOS的Mini51板万年历.rar

216.11 KB, 下载次数: 182

实时时钟电路DS1302的原理及应用.doc

349.5 KB, 下载次数: 126

数字温度传感器DS18B20的应用.pdf

133.58 KB, 下载次数: 92

此帖出自电子竞赛论坛

最新回复

如何去掉CPLD运行?  详情 回复 发表于 2018-4-30 02:35
点赞 关注(1)
 
 

回复
举报

633

帖子

0

TA的资源

裸片初长成(中级)

沙发
 
本帖最后由 paulhyde 于 2014-9-15 09:29 编辑

Easy51RTOS设计思路
单片机编程技巧--功能强大的时钟中断   在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。   下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。   定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要7~8个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及PSW的值压入堆栈,然后即把0D8F7h装入T0。   设置一个单元,每次中断加1 我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。   在中断中读键 通常,我们在主程序中读键盘,步骤为:扫描键盘,若有键按下,则延时几十毫秒去抖动,再次确认此键确实按下,然后处理该键对应的工作,完成后再次重上述步骤。但这有两点不足:1.处理相应工作时无法锁存按键的输入,即可能漏键。2.延时去抖时CPU无法做其它事情,效率不高。如果把读键放入时钟中断中,则可避免上述不足。方法为:如果两次相邻的中断中都读到同一个键按下,则这个键是有效的(达到了去抖目的),并将其锁存到先入先出(队列)的键盘缓冲区,等主程序来处理。这样,主程序处理按键的同时,仍可响应键盘的输入。缓冲区深度通常可设为8级,若锁存的键数多于8个,则忽略新的按键,并报警提示用户新的按键将无效。若键盘缓冲队列停滞的时间大大长于主程序处理按键所需要的最大时间,说明主程序已出错或跑飞,可以在中断用指令将系统复位,起到了看门狗的目的。   主程序中的延时 由于有常开的时钟中断,所以当主程序中有需要时间较短、精度较高的延时时,应暂时把时钟中断关闭。而程序中需要时间较长、精度不高的延时时,便可仿照下需的写法,避免多层嵌套的循环延时。   例:在P1.1输出1秒的高电平脉冲 MOV A,INCPI INC A CJNE A,INCPI$ ;等待一次中断处理完成 SETB P1.1 ;设P1.1为H,脉冲开始 ADD A,#50 ;50个20mS为1秒 CJNE A,INCPI,$ ;等中断将INCPI加一50次 CLR P1.1 ;设P1.1为L,脉冲结束   结束语:从上看出,要灵活地应用时钟中断,将任务合理分配给中断和主程序,并且二者要分工明确,接口简单。这其中的技巧还需要大家在实践中多多摸索与体会。另外要注意:应尽量缩短中断处理程序的执行时间,更不要长于20mS。

 

此帖出自电子竞赛论坛
 
 
 

回复

633

帖子

0

TA的资源

裸片初长成(中级)

板凳
 

回复 沙发 clark 的帖子

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑

抢占式多任务操作系统 在Windows 3.1中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在 Windows 95 中使用的就是“抢占式多任务”了,它的总控制权在 Windows 手中,Windows 会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,Windows 会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成 95 和 3.1 性能上的不同:3.1 中如果有一个任务死锁,则系统也同样死锁;95 中有一个任务死锁,系统仍能正常运行。

 

此帖出自电子竞赛论坛
 
 
 

回复

633

帖子

0

TA的资源

裸片初长成(中级)

4
 

回复 板凳 clark 的帖子

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑

“协作式多任务”、“抢占式多任务”、“多进程”、“多线程”这些词真可以算是如雷贯耳了,不过词是词,了解是了解,两回事。我曾经煞有介事的向 一个同学说明什么是“多进程”,什么是“多线程”,不多久就发现我的解释是完全错了的,所以现在我要讲的是 β2 版,有什么错误敬请提出。 先说说“协作式多任务”和“抢占式多任务”。在 Windows 3.1 中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃 使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在 Windows 95 中使用的就是“抢占式多任务”了,它的总控制权在 Windows 手中,Windows 会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,Windows 会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成 95 和 3.1 性能上的不同:3.1 中如果有一个任务死锁,则系统也同样死锁;95 中有一个任务死锁,系统仍能正常运行。 再说说“多进程”和“多线程”。同一个程序的多个运行的副本就是“多进程”了;在 Windows 95 中,一个进程只是一段放置程序的内存,只有线程才是 真正运行的任务,所以一个进程至少包含一个线程,事实上,系统为每一个进程创建一个缺省线程,叫做主线程,主线程可以创建子线程,子线程仍然可以再创 建子线程,这就是“多线程”了。Windows 对待线程是一视同仁的都作为一个任务看待的,并不对主线程有什么优惠,这和 OS/2 稍有不同:Windows 下一个进 程中只要有一个线程在运行就不终止,但在 OS/2 下主线程结束时会同时关闭所有的子线程。有一个同事对 OS/2 的这种线程管理方式很赞赏,我却不以为然, 我以为让线程自然的结束会比强制结束好的多。 Windows 3.1 是没有“多线程”的概念的,因为没有意义,只有在“抢占式多任务”的方式下,“多线程”才有其用武之地。

 

此帖出自电子竞赛论坛
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(高级)

5
 
本帖最后由 paulhyde 于 2014-9-15 09:29 编辑

怎么下载又要芯币啊?:(

 

此帖出自电子竞赛论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼主的无私奉献,谢谢,收藏了
此帖出自电子竞赛论坛
个人签名新奇智慧,新颖出奇,xinqi99,久久新奇
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

7
 
第一次玩 OS  ,

/*LCD1602接口定义*/
unsigned char xdata LCD_CW _at_ 0xfceb;
unsigned char xdata LCD_CR _at_ 0xfeeb;
unsigned char xdata LCD_DW _at_ 0xfdeb;
unsigned char xdata LCD_DR _at_ 0xffeb;

这个怎样操作?
此帖出自电子竞赛论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

8
 
如何去掉CPLD运行?
此帖出自电子竞赛论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表