矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 4084|回复: 26

关于单片机c语言延时计算请教

[复制链接]
     
发表于 2023-1-9 19:41:36 | 显示全部楼层 |阅读模式
延时.png
阶梯信号程序,参考流水灯坛友公开资料等示例修改
请教for(i=231;i>0;i--);循环需要多长时间,delay(5)是(单循环+3)*5,还有例子第一行,说明没明白,648带进去也不是1ms(用仿真算的时间不是1ms)
想阶梯信号一个台阶10ms.
     
发表于 2023-1-9 19:57:42 | 显示全部楼层
10ms还是用定时器好些。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2023-1-9 20:13:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-9 20:22:37 | 显示全部楼层
w6955 发表于 2023-1-9 19:57
10ms还是用定时器好些。

感谢指点,坛友的阶梯信号编程就是用定时器做的,稍微复杂没看懂,有一个汇编语言编的比较简单我就套用C语言了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-9 20:24:34 | 显示全部楼层
闻太师 发表于 2023-1-9 20:13
打开交叉列表文件,看看那个循环语句编译成了哪些指令,再根据每条指令的执行周期数就能算出循环语句需要多 ...

感谢指教,网上也搜了就是用汇编语言计算的,比较纳闷怎么来的这么熟练,原来是这样计算的
回复 支持 反对

使用道具 举报

     
发表于 2023-1-9 20:38:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-9 20:51:39 | 显示全部楼层
闻太师 发表于 2023-1-9 20:38
有两点需要稍微注意一下:
1. 改了优化选项需要重新计算
2. delay过程中如果有中断发生,delay就不准了

非常感谢,知道了,又接触单片机原来的学习一点点也大部分还给老师了。
回复 支持 反对

使用道具 举报

     
发表于 2023-1-9 21:26:19 | 显示全部楼层
俺是来学习的
回复 支持 反对

使用道具 举报

     
发表于 2023-1-9 21:30:57 | 显示全部楼层
俺是来学习的
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-10 11:22:39 | 显示全部楼层
延时1.png
网上搜的汇编语言做的单循环延迟程序
延时2.png
keil c语言编制的单循环延迟程序一部分,比较复杂。还是用仿真计算延时时间更方便。
请教汇编语言做的单循环延迟程序,因为R7是8位寄存器,所以TIME只能为char型,其值域为0~255则定时范围为 4us~1020us,这个限制对keil c语言编制的单循环延迟程序也适用吗?




补充内容 (2023-1-10 13:49):
看到C51流水灯实例,循环语句 unsigned int i,数值用到50000.应该不受存储器限制,采用数据与定义数据类型一致就行。应该是C语言和汇编语言的差别。

补充内容 (2023-1-10 13:58):
还有keil仿真计算时间时,时没注意循环语句数据类型,一直增加数值溢出,还有数值变化存盘没有rebuild运行,还是老数据,运行时间仿真一直不变。
回复 支持 反对

使用道具 举报

     
发表于 2023-1-10 14:40:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-10 17:15:04 | 显示全部楼层
闻太师 发表于 2023-1-10 14:40
你看看交叉列表文件就什么都明白了。51是8位机,8位加法(包括减法)一条指令搞定。16位加法咋办?自然是用 ...

感谢指教,“16位加法:自然是用一条不累加进位标志的加法指令完成低字节加法,再用累加进位标志的加法指令完成高位加法。”还是似懂非懂,单片机存储器总线地址总线控制器等等比较糊度,单片机框图和昨天看的又不一样。
单片机框图.png
回复 支持 反对

使用道具 举报

     
发表于 2023-1-10 17:22:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-1-10 19:05:16 | 显示全部楼层
闻太师 发表于 2023-1-10 17:22
你把二进制16位加法,看做十进制两位数加法就明白了。十进制两位数加法是不是先做个位数加法,并记下进位 ...

感谢指教,加进位标志理解了,就是进位标识在进位上位加。51是8位机,8位加法(包括减法)一条指令搞定。16位加增加一个8位寄存器吧。
回复 支持 反对

使用道具 举报

     
发表于 2023-1-10 19:16:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 06:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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