单片机c语言编程的问题请教高人 为什么不是一直停在while函数的啊

[复制链接]
查看11 | 回复3 | 2010-7-30 08:00:36 | 显示全部楼层 |阅读模式
#include "reg51.h"
/***************/
sbit led = P2^0;
//管脚定义 类似于起名字

//用led 来代替P2。0 管脚,

//使用者一看就知道P20管脚接的是LED,而不是其他的器件
/******************************/

void delay(unsigned int time);

//延时子函时,

//参数 d_time 控制延时的时间

//作用,灯亮和熄灭必须持续一定时间,人眼才能看到
/***************/
//主函数

void main(void)
{
while(1) //主程序循环
{
led=1;
// 第1位LED灯灭
delay(5); //延时,改变参数,改变变化时间
led=0; //第1位LED灯亮
delay(5); //延时
}
}
/*******************************/
//延时子函数
//参数范围 0-65536
void delay(unsigned int time) //参数 time 大小
{
//决定延时时间长短
while(time--);
}

回复

使用道具 举报

千问 | 2010-7-30 08:00:36 | 显示全部楼层
你这个delay(5)太短了。若是12MHZ的晶振,delay(5),才只有5个us,实际应该10个us都不到,要想看到灯闪中间间隔最少要100个MS。改成void delay(unsigned long time) //参数 time 大小{
//决定延时时间长短 while(time--);} 在delay();中改成200000试下
回复

使用道具 举报

千问 | 2010-7-30 08:00:36 | 显示全部楼层
是一直停留在while循环当中的 ,可是你的延时时间太短了 根本就看不到LED的闪烁delay(unsigned int time)//MS单位{
unsigned int j;
for(i=0;i<time;i++)
{
for(j=0;j<120;j++)//晶振频率在11.0592MHZ的时候这个
回复

使用道具 举报

千问 | 2010-7-30 08:00:36 | 显示全部楼层
一直就停在while循环里啊。延时函数时间太短了,仿真一下看看时间。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行