3425|27

3252

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

i j k和定时的关系是怎样的?还是软件生成的? [复制链接]

 

i j k和定时的关系是怎样的?还是软件生成的?

QQ图片20200701115852.png (346.25 KB, 下载次数: 0)

QQ图片20200701115852.png
此帖出自单片机论坛

最新回复

最大256,还要怎么大?   详情 回复 发表于 2020-7-14 16:37
点赞 关注
 

回复
举报

1792

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

和定时的数值有关,这种定时一般不准,实际使用中也不会有人硬延时500ms的

此帖出自单片机论坛

点评

这个i  j  k也是软件生成的吗    详情 回复 发表于 2020-7-1 14:46
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
sint27 发表于 2020-7-1 13:45 和定时的数值有关,这种定时一般不准,实际使用中也不会有人硬延时500ms的

这个i  j  k也是软件生成的吗  

此帖出自单片机论坛

点评

ijk叫变量呀,“软件生成”有从何说起,没太看明白  详情 回复 发表于 2020-7-1 18:36
 
 
 

回复

2万

帖子

341

TA的资源

版主

4
 

for循环嵌套,i , j , k是定义的变量

此帖出自单片机论坛
 
 
 

回复

9716

帖子

24

TA的资源

版主

5
 
这种延时功能是让CPU重复执行一段无用的代码 浪费CPU的处理资源来实现延时目的 延时的时长受CPU的频率的影响 CPU主频越高延时时间越短 i,j,k的初始值也要适当增加
此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

6
 

楼主就TH0+TL0构成的16位定时器发了不少帖子,应该不会再用这种极低效的方式延时让一个LED闪烁了。

此帖出自单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

7
 
QWE4562009 发表于 2020-7-1 14:46 这个i  j  k也是软件生成的吗  

ijk叫变量呀,“软件生成”有从何说起,没太看明白

此帖出自单片机论坛

点评

很明显,是没有C语言编程的基础,直接去看单片机的入门了,肯定会晕  详情 回复 发表于 2020-7-2 13:52
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

8
 

你在写下 unsigned char i,j,k; 时编译程序已经在RAM中为你分配了三个字节作为 i、j、k。

这三个字节与定时器TH0、TL0……一点关系也没有。

此帖出自单片机论坛

点评

那i j k 的取值和时间长度有怎样的关系  详情 回复 发表于 2020-7-3 10:13
 
 
 

回复

2146

帖子

8

TA的资源

五彩晶圆(初级)

9
 
huo_hu 发表于 2020-7-1 18:36 ijk叫变量呀,“软件生成”有从何说起,没太看明白

很明显,是没有C语言编程的基础,直接去看单片机的入门了,肯定会晕

此帖出自单片机论坛
 
个人签名坐而言不如起而行
 
 

回复

4005

帖子

0

TA的资源

版主

10
 

爱问问题的楼主呢?

此帖出自单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

11
 
maychang 发表于 2020-7-2 13:49 你在写下 unsigned char i,j,k; 时编译程序已经在RAM中为你分配了三个字节作为 i、j、k。 这三个字节与 ...

那i j k 的取值和时间长度有怎样的关系

此帖出自单片机论坛

点评

你在另一些帖子里面曾问TH0、TL0构成的定时器,用硬件定时器延时,时间也是精确的。  详情 回复 发表于 2020-7-3 11:21
如果使用汇编语言完成这样的延时功能,则执行这段程序所需要的时间是完全确定的。  详情 回复 发表于 2020-7-3 11:19
for(i=41;i>0;i--) 的意思是:先对 i 这个 char 型变量(一字节)赋值41,检查 i 是否大于0,若不是,i 减1,若是,执行完毕转向下一个 for(j=133;j>0;j--)。检查 i 是否大于0以及 i 减1这两个操作需要多长时间(几  详情 回复 发表于 2020-7-3 11:18
在C语言所写的程序中,i、j、k取值和延时时间长度的关系不是很确定,或者叫不准确。在汇编语言写的程序中,这段时间是可以比较严格确定的。  详情 回复 发表于 2020-7-3 10:40
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

12
 
QWE4562009 发表于 2020-7-3 10:13 那i j k 的取值和时间长度有怎样的关系

在C语言所写的程序中,i、j、k取值和延时时间长度的关系不是很确定,或者叫不准确。在汇编语言写的程序中,这段时间是可以比较严格确定的。

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

13
 
QWE4562009 发表于 2020-7-3 10:13 那i j k 的取值和时间长度有怎样的关系

for(i=41;i>0;i--) 的意思是:先对 i 这个 char 型变量(一字节)赋值41,检查 i 是否大于0,若不是,i 减1,若是,执行完毕转向下一个 for(j=133;j>0;j--)。检查 i 是否大于0以及 i 减1这两个操作需要多长时间(几个机器周期),无法知道。可能是两个机器周期,但也可能是更多个机器周期。转向下一句用几个机器周期也不知道。我们甚至连i、j、k的地址都不知道。

此帖出自单片机论坛

点评

那就是说 ijk的取值没办法知道?随意定的?  详情 回复 发表于 2020-7-3 15:46
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

14
 
QWE4562009 发表于 2020-7-3 10:13 那i j k 的取值和时间长度有怎样的关系

如果使用汇编语言完成这样的延时功能,则执行这段程序所需要的时间是完全确定的。

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

15
 
QWE4562009 发表于 2020-7-3 10:13 那i j k 的取值和时间长度有怎样的关系

你在另一些帖子里面曾问TH0、TL0构成的定时器,用硬件定时器延时,时间也是精确的。

此帖出自单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

16
 
maychang 发表于 2020-7-3 11:18 for(i=41;i>0;i--) 的意思是:先对 i 这个 char 型变量(一字节)赋值41,检查 i 是否大于0,若不是,i ...

那就是说 ijk的取值没办法知道?随意定的?

此帖出自单片机论坛

点评

如果编程时采用large模式,那么 i、j、k 可能是放在外部 RAM。对外部 RAM 操作,时间要长得多,要好几个机器周期(从外部RAM读入到A,再放入工作寄存器,修改,判断,再放回外部RAM)。执行 for(i=41;i>0;i--) 就需  详情 回复 发表于 2020-7-3 17:43
如果编程时采用small模式,那么i、j、k 三个一字节变量会放到片内RAM中。石英晶体频率为12MHz情况下,一个机器周期就是1us。51单片机有一条 DJNZ 指令(减1不为0转移)。这是占用两个机器周期的指令。若使用这条指令,  详情 回复 发表于 2020-7-3 17:36
i、j、k 在一楼图片中分别赋值41、133、252。 至于为什么赋予这样的初值,你看到的那本书中应该有说明。  详情 回复 发表于 2020-7-3 15:50
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

17
 
QWE4562009 发表于 2020-7-3 15:46 那就是说 ijk的取值没办法知道?随意定的?

i、j、k 在一楼图片中分别赋值41、133、252。

至于为什么赋予这样的初值,你看到的那本书中应该有说明。

此帖出自单片机论坛

点评

没有说明这三个数的赋值    详情 回复 发表于 2020-7-3 16:49
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

18
 
maychang 发表于 2020-7-3 15:50 i、j、k 在一楼图片中分别赋值41、133、252。 至于为什么赋予这样的初值,你看到的那本书中应该有说明 ...

没有说明这三个数的赋值  

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

19
 
QWE4562009 发表于 2020-7-3 15:46 那就是说 ijk的取值没办法知道?随意定的?

如果编程时采用small模式,那么i、j、k 三个一字节变量会放到片内RAM中。石英晶体频率为12MHz情况下,一个机器周期就是1us。51单片机有一条 DJNZ 指令(减1不为0转移)。这是占用两个机器周期的指令。若使用这条指令,那么从41减少到0需要82个机器周期。再考虑赋初值和跳转,for(i=41;i>0;i--)可能需要86个机器周期。

 

但是,DJNZ 指令仅限用于一个字节,如果 i、j、k 定义为 int 类型变量(这是完全合法的),就不能简单地使用 DJNZ 指令,而要考虑到向高字节借位(高字节减1)。这要增加额外的时间。

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

20
 
QWE4562009 发表于 2020-7-3 15:46 那就是说 ijk的取值没办法知道?随意定的?

如果编程时采用large模式,那么 i、j、k 可能是放在外部 RAM。对外部 RAM 操作,时间要长得多,要好几个机器周期(从外部RAM读入到A,再放入工作寄存器,修改,判断,再放回外部RAM)。执行 for(i=41;i>0;i--) 就需要更多的机器周期。若是 i、j、k 是放在外部RAM的int型变量,需要的时间更长。

所以,执行 for(i=41;i>0;i--)所需要的时间并不完全确定,还需要知道石英晶体频率、 i、j、k 放在哪里,是char型变量还是int型变量……

此帖出自单片机论坛

点评

说了很多。那就是说已知时间的情况还是不能计算出IJK的值  只能用软件生成了?  详情 回复 发表于 2020-7-3 17:55
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表