搜索
bottom↓
回复: 2

请教马老师:关于定时1us的问题

[复制链接]

出0入0汤圆

发表于 2008-7-10 21:40:29 | 显示全部楼层 |阅读模式
最近准确要定时1us,能有什么办法,听说在C中嵌入汇编可以,我对汇编不是很懂,怎么用汇编编写中断服务子程序嵌入到C中,有这方面的资料嘛?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-7-10 22:03:47 | 显示全部楼层
用单片机应该比较麻烦吧

假设用AVR,工作有外部晶振16M,指令周期0.0625us,1us要用掉16个指令周期,如果非得要用中断
只能用汇编来写。但是程序频繁的进出中断,做其他事情又很麻烦。

出0入0汤圆

发表于 2008-7-11 01:24:17 | 显示全部楼层
LZ的问题提的不好,我想你是否是指1us的延时,这个与定时有区别。定时通常采用定时器中断,1us的中断可以做到,但不能做其它事情了。

以1楼的例子,即使使用16M的时钟,指令周期0.0625us,1us要最多只能执行16条指令,而中断响应和返回本身需要12-14个指令周期,剩下的时间只能做3-4条指令,用汇编也解决不了问题的。

如果程序需要1us的延时,可以通过嵌如入汇编的“nop”指令,具体嵌汇编的方法,请查看你使用的C平台的帮助,里面有的,每个C的平台嵌入的方式有区别的。另外就是写一句或重复一句单周期的C语句,例如PORTB = 0,前提是不影响正常的程序,以及此C语句肯定只对应1条单周期的指令。

如果多处需要1us的延时,系统时钟是16M,那么多处嵌入16条“NOP”就浪费空间了,那么可以写一个子程序,里面嵌入10条左右的NOP,注意要把调用子程序和返回的时间计算准确并扣除掉。这就需要掌握一点汇编的基础,通过编译后,查看LIST文件,核对时间。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-10 04:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表