- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C及汇编延时程序课件
有个好帖,从精度考虑,它得研究结果是:?void?delay2(unsigned?char?i)???????{????????while(--i);?????????}?为最佳方法。分析:假设外挂12M(之后都是在这基础上讨论)我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay2(0):延时518us?????????518-2*256=6delay2(1):延时7us(原帖写“5us”是错的,^_^)delay2(10):延时25us???????????25-20=5delay2(20):延时45us???????????45-40=5delay2(100):延时205us?????????205-200=5delay2(200):延时405us?????????405-400=5见上可得可调度为2us,而最大误差为6us。精度是很高了!但这个程序的最大延时是为518us?显然不能满足实际需要,因为很多时候需要延迟比较长的时间。那么,接下来讨论将t分配为两个字节,即uint型的时候,会出现什么情况。void?delay8(uint?t){?while(--t);}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay8(0):延时524551us?????????524551-8*65536=263delay8(1):延时15usdelay8(10):延时85us????????????85-80=5??delay8(100):延时806us??????????806-800=6delay8(1000):延时8009us????????8009-8000=9delay8(10000):延时80045us??????80045-8000=45delay8(65535):延时524542us?????524542-524280=262如果把这个程序的可调度看为8us,那么最大误差为263us,但这个延时程序还是不能满足要求的,因为延时最大为524.551ms。那么用ulong?t呢?一定很恐怖,不用看编译后的汇编代码了。。。那么如何得到比较小的可调度,可调范围大,并占用比较少得RAM呢?请看下面的程序:/*--------------------------------------------------------------------程序名称:50us?延时注意事项:基于1MIPS,AT89系列对应12M晶振,W77、W78系列对应3M晶振例子提示:调用delay_50us(20),得到1ms延时全局变量:无返回:????无--------------------------------------------------------------------*/void?delay_50us(uint?t){?uchar?j;???for(;t0;t--)?????for(j=19;j0;j--)????;}我编译了下,传了些参数,并看了汇编代码,观察记录了下面的数据:delay_50us(1):延时63us?????????????63-50=13delay_50us(10):延时513us???????????503-500=13??delay_50us(100):延时5013us?????????5013-5000=13delay_50us(1000):延时50022us???????50022-50000=22赫赫,延时50ms,误差仅仅22us,作为C语言已经是可以接受了。再说要求再精确的话,就算是用汇编也得改用定时器了。/*--------------------------------------------------------------------程序名称:50ms?延时注意事项:基于1MIPS,AT89系列对应12M晶振,W77、W78系列对应3M晶振例子提示:调用delay_50ms(20),得到1s延时全局变量:无返回:????无--------------------------------------------------------------------*/void?delay_50ms(uint?t){?uint?j;???/****可以在此加少许延时补偿,以祢补大数值传递时(如delay_50ms(1000))造成的误差,但付出的代价是造成传递小数值(delay_50ms(1))造成更大的误差。因为实际应用更多时候是传递小数值,所以补建议加补偿!****/?for
您可能关注的文档
- 手术室入室着装要求详解.ppt
- 手卫生医疗废物管理培训详解.ppt
- CRTSⅢ型板式无砟轨道自密实混凝土课件.doc
- CRTSI型双块式无砟轨道桥梁底座板施工技术交底1课件.doc
- 打枣课件1详解.ppt
- CRTS_I型板施工课件.ppt
- CS6.0操作教程1课件.ppt
- crm项目需求文档课件.doc
- CRESTRON培训文件课件.ppt
- 托盘天平的使用-朱小春详解.ppt
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)