再谈picc延时函数设计

[复制链接]
 楼主| tkalxy 发表于 2007-11-1 14:02 | 显示全部楼层 |阅读模式
 楼主| tkalxy 发表于 2007-11-1 14:03 | 显示全部楼层

内容

学习picc这么长时间了,但是一直对于软件延时很不理解。发现通过c语言设计的延时函数,经过编译后的汇编代码都不一样,很不明白!例如<br /><br />参考本网站的picc设计技巧的**cypok的言论搜集,发现许多好像不正确。例如文中说<br /><br />x=100;while(--x){;}&nbsp;<br />汇编后:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;100&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;3,5&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;3,6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;l2&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;l2&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;<br /><br />但是我做了不是这样的,还有<br /><br />最能精确控制指令时间的:&nbsp;<br />void&nbsp;delay(char&nbsp;x,char&nbsp;y){&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;z;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z=y;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do{;}while(--z);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}while(--x);&nbsp;<br />}&nbsp;<br />其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call指令、页面设定、传递参数<br />花掉的7个指令。则是:14+(3*(Y-1)+7)*(X-1)。<br /><br />我不知道有没有人用,经过实验了没有?对于高手怎么设计延时函数,难道只看stopwatch?对于简单的延时难道非要用硬件延时?请高手出来说句话阿!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

117

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部