延时函数

article/2025/9/24 22:43:05

延时函数

什么是延时函数

所谓延时函数就是在函数中设置了几个空操作的动作,每次操作都需要消耗一定的时间,动作结束了,就会跳出延时函数继续做其他事情了。

为什么要延时

为了使CPU某些芯片的时序而采用的一些机制,比如独立按键、LED灯闪烁等

单片机时序

单片机时序就是CPU在执行指令命令时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路在唯一的时钟信号下严格的控制时序进行工作。
振荡周期:为单片机提供定时信号的振荡源的周期又称时钟周期
状态周期:2个振荡周期为1个状态周期,
机器周期:1个机器周期含6个状态周期,12个振荡周期。在一个机器周期内,CPU可以完成一个独立的操作。
指令周期:它是指CPU完成一条操作的所需的全部时间。,它以机器周期为单位

nop指令

执行一个_nop_() ,就是一个空操作,占用一个机器周期,也就是12个时钟周期。
一个机器周期=12/12MHz=1us
#include<intrins.h>
Void delay10us() //调用此函数需要执行LACLL指令耗时2个机器周期
{
nop();
nop();
nop();
nop();
nop();
nop();
} //结束执行一次RET指令耗时2个机器周期
Delay10us( )函数中共用了6个NOP ( )语句,每个语句执行时间为1 us。主函数调用Delay10us( )时,先执行个LCALL指令 (2 us),然后执行6个NOP ()语句(6 μs),最后执行了一个RET指令(2μs),所以执行上述函数时共需要10 uS。 可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用[4],以实现较长时间的延时,但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 us。这是因为执行Delay40us( )时,先执行了一次LCALL指令(2μs) , 然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us(),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84μs) ,所以,实际延时时间为86 us。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 us。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。

分号“;”和nop指令

1、两个语句的相同点是都不会有实质上的控制操作;
2、两个语句的不同点是nop语句执行了就相当于延时一个机器周期(尽管一个机器周期很短),而;仅仅相当于一个格式上的字符,不会执行任何语句,也不会延时,和没有代码的作用一致。
注:;含义意指在for和while循环中常用。

Void delay(u16 i) void delay(u16 i)
{ {
for(;i>0;i–) for(;i>0;i–)
nop();
} }

keil4精确计算时间

1.设置成开发板晶振,比如12MHz;
在这里插 入图片描述
2.设置断点,进入时间仿真,并把时间复位
(设置断点时,要把你想仿真的语句的前后两个语句都设置成断点,这就好比,一段绳子,切成三段,而我取的是中间那一段,进入仿真按照截图标号依次点击)
在这里插入 图片描述
3.开始运行(断点上的箭头是蓝色时代表未开始运行,当变成黄色时代表已运行一次,黄色箭头所指语句代表还未执行此语句,只是执行了箭头上面的语句)
在这里插入 图片描述4.再次运行,计算delay的运行时间
在这里插入 图片描述
注意:这种计算延时时间有一定的误差,因为每次调用延时函数时会浪费一定的时间,每次执行语句达到的延时效果,还要额外加上调用函数所延时的时间,所以与自己设置的延时时间误差值为调用函数所产生的时间,理想设置延时时间=执行两次延时语句-执行一次延时语句,调用函数时间=执行一次延时语句-理想设置延时时间。通过反汇编也可以计算时间,在前面的nop指令,有简单介绍。

stc烧录软件延时函数

可以根据自己的需求设置时间,优点:生成代码速度快精准,缺点:不能在代码上灵活的修改延时的时间。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/cUWvyomD.shtml

相关文章

C语言里的延时函数

C语言延时 悬赏分&#xff1a;0 - 解决时间&#xff1a;2007-2-18 14:48s级的时间延时杂写啊&#xff1f;大侠们帮哈忙啊 最佳答案 在Windows下最简单的办法是调用系统函数Sleep(time)&#xff0c;单位是ms&#xff0c;在windows.h中声明&#xff0c;注意大小写&#xff1b;不然…

连接oracle数据库报错:ORA-12505

连接oracle数据库报错:ORA-12505 今天在使用程序连接oracle数据库时本来很简单的填写url,用户名和密码&#xff0c;测试连接提示失败。和pl_sql 对比了下写的也没毛病&#xff0c;有图为证&#xff1a; 看了下数据库地址端口和用户名密码都没问题&#xff0c;打开数据日志看到…

解决oracle报错ORA-12505

连接oracle报错ORA-12505 主要原因是sid错误&#xff0c;网上有很多解决办法&#xff0c;我这里是因为url链接方式写错了&#xff0c;给我的是service-name&#xff0c;我却用jdbc:oracle:thin:host:port:SID 方式去链接&#xff0c;而正确的写法是 jdbc:oracle:thin://host:p…

连接Oracle时出现ORA-12505错误

连接Oracle时出现ORA-12505错误 问题&#xff1a;使用eclipse连接Oracle数据库时报错&#xff1a;Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 原因&#xff1a;重新配置了…

ORA-01555

报错&#xff1a; 数据泵导入时报错如下&#xff0c;快照太旧 分析原因&#xff1a; snapshot 是存储undo中 undo的作用事务恢复、事务回滚、读一致性&#xff0c;显然和读一致性作用有关 数据泵的原理&#xff1a;将数据库的信息以转储文件的形式存储到操作系统中  S…

【数据源】连接Oracle失败 Listener refused the connection with the following error: ORA-12505

连接Oracle失败 Listener refused the connection with the following error: ORA-12505 使用场景解决方案 使用场景 数据源平台配置了Oracle&#xff0c;在其它工具测试能够正常连接&#xff0c;但数据源平台在确认配置无误情况下点击测试连接提示失败&#xff0c;报错信息提…

Oracle SQL Developer连接报错(ORA-12505)

理论实践 Oracle SQL Developer连接报错(ORA-12505) 作者&#xff1a;Vashon 时间&#xff1a;20150415 之前我的Oracle数据库出现问题&#xff0c;费大波周折终于弄好了&#xff0c;今天又创建了一个DBA管理员的连接方式出现问题&#xff0c;本人现在把解决方案分享给大家&am…

使用dbeaver链接oracle报错ORA-12505, TNS:listener does not currently know of SID given in connect descripto

业务需求需要读取oracle数据库数据, 想先在dbeaver连接oracle数据库进行操作, 但是管理员一开始给的用户名与密码连接不上, 报错: 以及打开详细 Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error: ORA-12505, TNS:listener …

ORA-12505错误的解决方法

在使用ORACLE数据库的时候,遇到这样一个问题:每隔一段时间,ORACLE数据库就打不开,显示错误是ORA-12505,大概就是指向监听和SID名字错误的说明。网上有很多解决办法。多数说的是将Listener-ora文件改写,将监听打开重启即可解决。在将以上措施都尝试一遍之后都没有解决,可…

【Oracle连接】java.sql.SQLException: Listener refused the connection with the following error: ORA-12505

连接数据库时&#xff0c;提示错误描述&#xff1a; java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 问题描述&#xff1a;情况使用帆软报表连接数…

ORA-12505:TNS:listener does not currently know of SID given in connect descriptor

Oracle安装好之后&#xff0c;默认的listener是localhost&#xff0c;现在为了在局域网内能够访问&#xff0c;其他电脑访问的时候&#xff0c;提示如下错误&#xff1a; ORA-12505&#xff1a;TNS:listener does not currently know of SID given in connect descriptor。 修…

ORA-12505:TNS: 监听程序当前无法识别连接描述符中所给出的 SID

问题描述&#xff1a; 小学期修Oracle课程&#xff0c;为了小团队的便利性&#xff0c;在腾讯云中使用Docker创建了Oracle容器进行共享&#xff0c;在这段时间使用是正常的。在一两个星期后使用nacicat连接oracle时&#xff0c;报了ORA-12505&#xff1a;TNS: 监听程序当前无法…

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor解决方式

启动项目连接oracle数据报&#xff1a;ORA-12505, TNS:listener does not currently know of SID given in connect descriptor ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID 报错原因&#xff1a;通过报错内容 “TNS:listener does not currently know of …

ORA-12505

oracle 数据库&#xff0c;用sqldeveloper 打开报了 ORA-12505: TNS:listener does not currently know of SID given in connect descriptor&#xff1b; 先通过sqlplus\命令行, 查看当前正在使用的数据库实例及主机名 SQL>conn/as sysdba SQL>select instance_name fr…

关于oracle连接ORA-12505错误的直观解决方法

oracle连接一直好好的&#xff0c;突然间连接的时候报错了&#xff0c;报错为ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 。网上找了好长时间也没解决。现在将个人的解决方法分享出来&#xff0c;大家有什么不同意见的&#xff0c;…

ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法【连接本机】

遇到这个问题首先考虑检查配置文件listener.ora和tnsnames.ora。 1 listener.ora文件 获取电脑主机名称&#xff1a;可通过dba登录sqlplus利用 select HOST_NAME from v$instance; 语句查询主机名 模板如下&#xff1a; SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAM…

【Navicat】连接Oracle报错 ORA-12505

文章目录 一、错误描述1.1、Navicat连接Oracle错误码&#xff1a; ORA-125051.2、Oralce数据库版本1.3、Navicat版本 二、分析2.1、排查 ORA-12505 错误码含义2.2 排查windowns 服务 三、解决方案3.1、下载 Oracle 的instant-client服务3.2、 解压到合适的位置3.3、配置Navicat…

ora 12505

报错为ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 。具体步骤如下; 1、首先先检查检查自己的数据库配置部分时候有错&#xff0c;正确配置如下图 错误配置&#xff1a; 可能是后面的参数导致的。 2、Oracle的 listener.ora 文件配…

俄罗斯方块源码(彩色版)

此程序使用C语言简单实现了俄罗瑟方块主要的游戏功能&#xff08;包含统计得分、速度等级设置、下一方块提示&#xff09;&#xff0c;还有简单的消除特效。 使用的编译器为&#xff1a;Visual Studio 2022 效果图&#xff1a; 主要缺点&#xff1a; 1&#xff1a;代码较长 …

html 小游戏 俄罗斯方块

样式如下&#xff1a; html代码如下&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title>俄罗斯方块</title><style>body, div, dl, dt, dd…