2 zhang0564 zhang0564 于 2015.06.30 07:16 提问

如何编写延时函数,求指点迷津

cpu频率为400MHz,如何编写延时为1us的延时函数?请大哥门指点下。cpu为armv7架构的s5pv210处理器

2个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.30 08:18

振荡频率为16MHZ,则Tcy=0.0625us。
编写us级延时函数如下:
void Delay_us(unsigned char nCount)
{
while(--nCount);
}
函数反汇编后如下:
push a
OFST: set 0
L13: dec(OFST+1,SP)
jrne L13
pop a
ret

主要是计算nCount

smils
smils   2015.09.06 20:01

400MHZ=400000000HZ,就是一秒钟震动的次数,
1S=1000ms=1000000μs,
1S/400MHZ=1000000μs/400000000HZ=0.0025μs,就是说一个频率周期需要0.0025μs,
那么,你要知道的是s5pv210芯片多少个时钟周期是一个机器周期,假设 是4个
那么一个机器周期等于4*0.0025μs=0.01us
你要求 延时1us 只需要 100个机器周期就行了
你循环里面的代码 转换成 100条汇编指令 就延时 1us了 ,
需要注意的是 取消编译器优化

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
初学者:C51的延时函数的编写及工程创建
初次系统地用keil for C51软件学习C51单片机,今天就简单地聊聊如何创建keil工程编写延时函数delay(). 1.首先,打开keil软件,在工程菜单栏(project)里选择New Project,并命名一个工程。 2.接着,选择所要使用的芯片类型,比如我所学的芯片是STC89C52RC,虽然这个国产的芯片在keil中没有相应的选项,但是因为这个芯片是以C51的为内核的,那么我们
怎样编写精确的延时函数
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时   单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振
汇编语言子函数——延时函数
在汇编语言中,延时子函数用的也较多,在这里同样要编写一个子函数 CPU在执行语句的时候也是需要耗时的,只是CPU运行速度太快,我们没办法看清楚,所以如果CPU执行语句越多,所需要的时间就越多,根据这个原理,就可以通过让CPU随便执行语句,起到延时的效果,这被称为“软件延时”,CPU执行一条指令耗时近似1us,就可以通过这种办法加上循环就可以实现延时效果 这里可以用一个大数字减法和循环的办法来实
C51延时函数delay的编写
例如,要写一个延迟10ms的delay函数:(12M晶振) void delay_10ms() { unsigned char i,j,k; for(i=5;i>0;i--) { for(j=4;j>0;j--) { for(k=248;j>0;j--); }
STM8S延时函数
/* MAIN.C file  *  * Copyright (c) 2002-2005 STMicroelectronics  */  //延时函数 #include "stm8s103f3p.h" void delay_40us(void); void delay_1ms(void); void delay_ms(int); void delay_1s(void); vo
嵌入式编程经验之延迟函数
<br />嵌入式编程经验之延迟函数<br /><br />通常有两种方法来实现延迟函数,第一种用for循环实现,另一方法就是用定时器实现。<br />for循环实现的延迟函数常用于不精确的延迟,大概的意思。<br />定时器方式延迟能够实现精确的延迟。<br /><br />for循环实现延迟<br />void delay1ms(int time)<br />{<br />unsigned int i;<br />while(time--)<br />for(i=0; i<124; i++);//124
51单片机C语言延时函数
关键字:51单片机 C语言 延时函数      C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void)
C51 延迟函数编写 [李园7舍_404]
背景:STC89C52   1_nop_() 功能:_nop_函数用于在代码中产生一条NOP指令。这条指令能被用来延迟一个机器周期的时间。 返回值:无。 头文件:#include   验证 1.      在C51工程的主文件的main函数中测试_nop_()函数执行的时间。在测试之前需要选中当前工程,然后project-->Option for target 项目名-->T
项目总结(一)——延时函数Delay
暑假花了一个多月的时间,和另一个同学合作完成了《实用英语语音教程》一书的配套辅助学习系统的开发,以下是我完成这一项目后的一些总结,记录实际项目编程中的一些知识。   项目实际需求介绍 (1)题目:听录音,标出被朗读的单词。 (2)说明:每小题有四个选项,随机朗读其中的两项,一个界面放5小题,播放完自动显示下5题内容。如下图所示:   (3)要求:播放每题的两个选项(单词)之间,每小
Linux下的延时函数
Linux下的延时函数 – JUNJIA