程序一与程序二的区别在于程序一的两个延时函数是先声明后定义,而
程序二的两个延时函数是直接在主函数之前定义的并未声明。这两个平
时看似可以互换的两种函数定义的方法,在此显出了其中的差异,单往
单片机中烧录程序一的时候步进电机会一直转动,不停止,(其原因是
此种情况下,主函数在反复执行,所以会不停的重复正转)而按程序来
分析步进电机在转过几圈之后会自动停止,这显然与结果冲突。而当往
单片机中烧录程序二的时后步进电机却再转了几圈后停止。以后要注意
直接将函数定义在主函数之前。
二
程序一:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int 
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
#define A {d1=1,d2=0,d3=0,d4=0;}
#define B {d1=0,d2=1,d3=0,d4=0;}
#define C {d1=0,d2=0,d3=1,d4=0;}
#define D {d1=0,d2=0,d3=0,d4=1;}
#define E {d1=0,d2=0,d3=0,d4=0;}
void delay(uchar t);
void delayMS(uchar t);
uchar speed;
void main()
{ 	
	uint i=200;
	speed=5;	
	while(i--)
	{
		A
		delayMS(speed);
		B
		delayMS(speed);
		C
		delayMS(speed);
		D
		delayMS(speed);
	}
}
void delay(uchar t)
{
	while(--t);
}
void delayMS(uchar t)
{
	while(t--)	
	{
		delay(245);
		delay(245);
	}
}

程序二:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int 
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
#define A {d1=1,d2=0,d3=0,d4=0;}
#define B {d1=0,d2=1,d3=0,d4=0;}
#define C {d1=0,d2=0,d3=1,d4=0;}
#define D {d1=0,d2=0,d3=0,d4=1;}
#define E {d1=0,d2=0,d3=0,d4=0;}
void delay(uchar t)
{
	while(--t);
}
void delayMS(uchar t)
{
	while(t--)	
	{
		delay(245);
		delay(245);
	}
}
uchar speed;
void main()
{ 	
	uint i=200;
	speed=5;	
	while(i--)
	{
		A
		delayMS(speed);
		B
		delayMS(speed);
		C
		delayMS(speed);
		D
		delayMS(speed);
	}
}
				  
				

  

posted on 2011-11-18 19:57    阅读(255)  评论(0编辑  收藏  举报