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表示什么意思??? 展开
#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表示什么意思??? 展开
4个回答
展开全部
for(i=0;i<120;i++);需要循环执行120次才结束本次循环,每次循环需要执行“MOV传送指令(1-2个机器周期)”、“比较判断CJNE(2个机器周期)”、“JNC判零转移(2机器周期)”、等大约8-9个机器周期。执行for循环一次大约需要1000个机器周期,以晶振位12M的单片机系统(一个机器周期消耗时间大约是1us),执行120次需要1MS的时间。 总的来说相当于标一个1MS的刻度吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
表示延时一段时间,delayms(250)中的参数越大延时也就越长,这个时间是不确定的,和你机子的运行速度有关
追问
难道没有直接靠晶振延时的方法吗?
追答
我是学通用程序的,对单片机研究不深,抱歉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
250是传给函数void delayms(unsigned char ms)的参数
也就是说,ms为250
也就是说,ms为250
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询