找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4350|回复: 39
收起左侧

帮忙看看这几句代码啥意思,谢谢 主要是那两个for循环

  [复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
ID:373620 发表于 2018-7-19 16:42 | 显示全部楼层 |阅读模式
8.png
主要是那两个for循环啥意思,还有1141是咋来的
回复

使用道具 举报

ID:375161 发表于 2018-7-19 22:10 | 显示全部楼层
毫秒延时函数;但这个是粗略延时,思路是假设单片机执行完一句代码的时间是固定的,反复执行就可以达到一个延时效果。这个有两个循环,外层i的循环是确定毫秒时间数,内层j的循环是为了让多次循环凑够1ms。1141是计算出来的,执行一行代码所画的时间是根据单片机和晶振算出来的。具体怎么计算,百度搜索“51执行一句代码的时间如何计算?”我就不搬运了。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375821 发表于 2018-7-20 14:29 | 显示全部楼层
上面大神都有回帖,我再补充一下,这个1141是根据晶振计算出一条命令的时间,延时程序转化为汇编后,按汇编命令挨个的计算时间,最后就出来了,最后的结果是以汇编的命令计算出来的,精确要是用定时器 G6ZZ`D)F~K{BU@P[R%8}U0L.png

指令:

1、MUL、DIV:仅有的4周期指令

2、包含DPTR和PC的指令均为2周期指令

3、所有的绝对跳转和条件转移指令,均为2周期指令

4、所有包括A寄存器的指令,均为单周期指令

5、位操作指令中,ANL和ORL是2周期指令

6、所有包含立即地址的指令,除INC direct及DEC direct外,均为2周期指令

7、剩下的均为单周期指令。

_nop_函数可以在keil软件的C51->HLP->C51lib.chm文档中查阅

反推这个晶振应该是12M的




评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:250337 发表于 2018-7-19 18:53 | 显示全部楼层
延时函数,执行空操作 ,CPU在这里等待一段时间    1141应该是根据晶振大小计算出来的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375081 发表于 2018-7-19 19:06 | 显示全部楼层
这个应该是延时函数,用两个for循环来达到延时的目的
回复

使用道具 举报

ID:245937 发表于 2018-7-19 19:30 | 显示全部楼层
利用cpu的运行周期来计算出来的,CPU每一个运行周期的时间,是一样的,可以利用它来做延时时间。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:155507 发表于 2018-7-19 19:36 | 显示全部楼层
这个是软件延时程序,用两个for循环来达到延时的目的,  1141应该是根据晶振大小计算出来的

软件延时,这种方法主要采用循环体进行。
j加一次{;}就循环一次,当j=1141时就转到while外循环中了

11.0592MHz 晶振的延时函数

这是一个1ms基准延时程序
//N ms延时
void delay_ms(uint n)
{
uint i,j;
for(i=n;i>0;i–)
for(y=114;y>0;y–);
}



在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。

指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

时钟周期:也称为振荡周期,一个时钟周期 = 晶振的倒数。对于单片机时钟周期,时钟周期是单片机的基本时间单位,两个振荡周期(时钟周期)组成一个状态周期。

机器周期:单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作,如取指令、存储器读/写等。

机器周期=6个状态周期=12个时钟周期。

51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/ 晶振频率)= x μs。常用单片机的晶振为11.0592MHz,12MHz,24MHz。其中11.0592MHz的晶振更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。

回复

使用道具 举报

ID:375094 发表于 2018-7-19 19:44 | 显示全部楼层
这两个循环是延时函数的算法,因为要简化计算所以弄了两个循环,ms乘以1141就是可以延时的时间,1141是可以自己改的,决定于你想要延时的时间多少

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375160 发表于 2018-7-19 21:36 | 显示全部楼层
通过语句循环,浪费时间来,来实现延时

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:372402 发表于 2018-7-20 09:14 | 显示全部楼层
两个for语句是用来延时的,至于你说的数字1141则是根据你要延时多久算出来的,这个要看你用的晶振频率算出CPU的时钟周期,最终确定这个数字的。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:350999 发表于 2018-7-20 10:59 | 显示全部楼层
for语句的嵌套,第一个for后面没有分号,编译器认为第二个for是第一个for的内部语句,而第二个for语句内部语句为空,程序自行的时候,第一个加一次,第二个执行1141次。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:144356 发表于 2018-7-20 11:26 | 显示全部楼层
延时用的,程序运行到这里时会卡住一定的时间,时间过后才会继续往下走,你可以下载一个

单片机小精灵v1.3

里面可以根据晶振大小直接计算

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375685 发表于 2018-7-20 11:34 | 显示全部楼层
延时函数,单片机在这里等待一段时间    1141应该是根据晶振或单片机内置RC大小计算出来的

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375758 发表于 2018-7-20 12:56 | 显示全部楼层
延时函数
回复

使用道具 举报

ID:375800 发表于 2018-7-20 13:46 | 显示全部楼层
延时程序,for是嵌套循环的用法。1141这个参数是根据实际的单片机的时钟,通过调试测试得来的1ms,不一定适用于你自己的硬件系统。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375818 发表于 2018-7-20 14:05 | 显示全部楼层
延时函数
回复

使用道具 举报

ID:375818 发表于 2018-7-20 14:05 | 显示全部楼层
毫秒延时用的,不准
回复

使用道具 举报

ID:375829 发表于 2018-7-20 14:11 | 显示全部楼层
毫秒延时程序模块
回复

使用道具 举报

ID:316181 发表于 2018-7-20 14:27 | 显示全部楼层
通过执行ms*1141这么多条空语句来实现延时,延时时间由晶振频率和单片机执行效率决定,并不是所有的都是1141为1ms

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375868 发表于 2018-7-20 14:42 | 显示全部楼层
用空指令来消耗时间,本质上上就是一个延时函数。
回复

使用道具 举报

ID:353216 发表于 2018-7-20 14:52 | 显示全部楼层
粗略计时
回复

使用道具 举报

ID:304011 发表于 2018-7-20 15:16 | 显示全部楼层
for循环是用于延时
回复

使用道具 举报

ID:375911 发表于 2018-7-20 15:21 | 显示全部楼层
毫秒延时程序模块时间不准,要看指令时钟频率
回复

使用道具 举报

ID:373270 发表于 2018-7-20 15:31 | 显示全部楼层
两个for循环搭建延时函数,通过占用CPU时间执行加减运算达到延时的目的,1141是根据板子晶振周期计算而出,一般不用改,延时的长短通过给ms取不同值实现。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:368431 发表于 2018-7-20 15:43 | 显示全部楼层
延迟用的东西
回复

使用道具 举报

ID:375938 发表于 2018-7-20 15:48 | 显示全部楼层
用来延时的
回复

使用道具 举报

ID:375964 发表于 2018-7-20 16:05 | 显示全部楼层
延时函数,1141一般是试出来的
回复

使用道具 举报

ID:375979 发表于 2018-7-20 16:19 | 显示全部楼层
就一个延时函数,主要是靠运行的次数来延时的,而是延时精准度不高
回复

使用道具 举报

ID:376008 发表于 2018-7-20 16:40 | 显示全部楼层
应该是程序问题
回复

使用道具 举报

ID:376008 发表于 2018-7-20 16:40 | 显示全部楼层
程序有些问题
回复

使用道具 举报

ID:376024 发表于 2018-7-20 16:51 | 显示全部楼层
延时,函数执行需要时间,根据给的不同数字,它运行的时候就相当于把你循环运行的时间当延时用
回复

使用道具 举报

ID:376026 发表于 2018-7-20 16:54 | 显示全部楼层
延时语句,没啥具体用处
回复

使用道具 举报

ID:370510 发表于 2018-7-21 15:27 | 显示全部楼层

延时程序,for是嵌套循环,要求不高
用while(i--)就可以吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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