对比易错点(步进电机)


程序一与程序二的区别在于程序一的两个延时函数是先声明后定义,而
程序二的两个延时函数是直接在主函数之前定义的并未声明。这两个平
时看似可以互换的两种函数定义的方法,在此显出了其中的差异,单往
单片机中烧录程序一的时候步进电机会一直转动,不停止,(其原因是
此种情况下,主函数在反复执行,所以会不停的重复正转)而按程序来
分析步进电机在转过几圈之后会自动停止,这显然与结果冲突。而当往
单片机中烧录程序二的时后步进电机却再转了几圈后停止。以后要注意
直接将函数定义在主函数之前。
二
程序一:
#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);
	}
}
				  
				

  

优质内容筛选与推荐>>
1、PHP做好防盗链的基本思想 防盗链的设置方法
2、IONIC打包安卓遇到COM.ANDROID.SUPPORT:SUPPORT-V4错误的解决办法
3、使用 Parallel LINQ 进行数据分页
4、GoogleProgressBar
5、Android采用Volley具体的例子展示完整的异步加载数据(一)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号