void delayms(unsigned char ms)

#include<reg51.h>/#include<intrins.h>voiddelayms(unsignedcharms)//延时子程序{unsignedchari... #include <reg51.h> /
#include <intrins.h>

void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
P2 = LED;
delayms(250);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110
}
}

我不太明白的是这段延时程序是怎么样的逻辑,初学51机
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
然后后面又出现delayms(250); 这个句子,这个句子中间的250表示什么意思???
展开
 我来答
cdyzxy
推荐于2018-03-08 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3736万
展开全部
这个程序是根据51的主频,经实际测试进行一次循环:for(i = 0; i < 120; i++);实测要用1ms时间(约120次++运算耗时),所以调用这个循环几次就约等于延时几毫秒。
250表示需要由延时函数调用循环250次以实现延时250毫秒(1/4秒)。
百度网友247f6335c
2018-10-11 · 超过19用户采纳过TA的回答
知道答主
回答量:57
采纳率:60%
帮助的人:17万
展开全部
for(i=0;i<120;i++);需要循环执行120次才结束本次循环,每次循环需要执行“MOV传送指令(1-2个机器周期)”、“比较判断CJNE(2个机器周期)”、“JNC判零转移(2机器周期)”、等大约8-9个机器周期。执行for循环一次大约需要1000个机器周期,以晶振位12M的单片机系统(一个机器周期消耗时间大约是1us),执行120次需要1MS的时间。 总的来说相当于标一个1MS的刻度吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
27...7@qq.com
2013-10-30 · 超过18用户采纳过TA的回答
知道答主
回答量:52
采纳率:100%
帮助的人:38.4万
展开全部
表示延时一段时间,delayms(250)中的参数越大延时也就越长,这个时间是不确定的,和你机子的运行速度有关
追问
难道没有直接靠晶振延时的方法吗?
追答
我是学通用程序的,对单片机研究不深,抱歉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
求学6上
2013-10-30 · TA获得超过107个赞
知道答主
回答量:30
采纳率:0%
帮助的人:15.8万
展开全部
250是传给函数void delayms(unsigned char ms)的参数

也就是说,ms为250
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式