- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?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(;t0;t--)???for(j=
您可能关注的文档
最近下载
- 药物分析与常用组学技术在药学服务中的应用题库答案-2025年华医网继续教育.docx VIP
- 江苏开放大学剧场艺术史第三次形成性考核作业:单元三、四、五练习.doc VIP
- 2025年汉语言文学自考(中)国古代文学作品选(二)习题练习.pdf VIP
- 重庆市綦江实验中学校2017-2018学年高一上学期六校联盟第一次联合考试语文试题 Word版缺答案.doc VIP
- 温升试验报告.docx VIP
- 13-模块化与信息隐藏.pdf VIP
- 防御性驾驶培训.pptx VIP
- 国家开放大学《花旗公司和旅行者集团的合并》案例分析参考答案.docx VIP
- AI赋能教师专题培训:AI生成式人工智能赋能教育高质量发展.pptx VIP
- 医疗器械应急预案.docx VIP
原创力文档


文档评论(0)