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