这个单片机程序错哪儿了啊,注意看我的补充,谢谢了

来源:百度知道 编辑:UC知道 时间:2024/05/23 11:18:05
#include"reg52.h"
#include"intrins.h"
void delay(unsigned char j)
{ unsigned char i;
for(;j>0;j--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ unsigned char m;

P0=0xff;

while(1)
{
m=P0&0x1c;
switch(m)
{case 0x1c:{P3=0x0c; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x00:{P3=0x0c; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x18:{P3=0x0e; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x0c:{P3=0x0d; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x04:{P3=0x0d; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x10:{P3=0x0e; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x08:{P3=0x0c; delay(0xff);delay(0xff);delay(0xff);}break;
case 0x14:{P3=0x0d; delay(0xff);delay(0xff);delay(0xff);}break;}
}
}这个程序是用P3口带动2个电机,低电平启动,P0口是3个传感器,输入信号的,为什么P3口用的那两个口电平就是不变啊

如果单片机低电平口,直接也带不动电机,明显说明驱动电流不够(51的是10ma左右,20ma时电压明显下降),或者说明你可能没有对这些感性负载做隔离(感生电流可能导致复位),如果驱动电流小的话,用PNP三极管做射极输出器来驱动,电流大的话,直接用继电器吧!!但要注意继电器也是感性的,也需隔离驱动....

你程序看清楚拉,我服了你拉,你看看你写的什么呀。
你给P0=0xff;了,换句话说,你P0=1111 1111,你P0&0X1C出来的都是0xff,你m就不会变,你SWITCH就一直执行不到。