如题 我用89C52控制驱动继电器,下面是源码
问题,无法控制K0 与K7这两个继电器,其它都可以 而且在发生K0继电器的命令时会导致单片机死机。
另我单独控制单个继电器就可以控制 现在不知到那出了问题很是费解 求大家帮忙看看 小弟初学不懂忘大家指点一下感谢
#include<reg51.h>
#define uint unsigned int
unsigned char receiveData,dat;
void UsartConfiguration();
void Delay(uint z); //延时10ms
sbit K0=P1^0;
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;
sbit K4=P1^4;
sbit K5=P1^5;
sbit K6=P1^6;
sbit K7=P1^7;
void main()
{
UsartConfiguration();
while(1)
{
if(dat==1)
{
ES=0;
switch(receiveData)
{
Delay(10);
case 'S':K0=1;break;
Delay(10);
case 'B':K0=0;break;
Delay(10);
case 'C':K1=1;break;
Delay(10);
case 'D':K1=0;break;
Delay(10);
case 'E':K2=1;break;
Delay(10);
case 'F':K2=0;break;
Delay(10);
case 'J':K3=1;break;
Delay(10);
case 'H':K3=0;break;
Delay(10);
case 'I':K4=1;break;
Delay(10);
case 'Z':K4=0;break;
Delay(10);
case 'K':K5=1;break;
Delay(10);
case 'M':K5=0;break;
Delay(10);
case 'N':K7=1;break;
Delay(10);
case 'V':K7=0;break;
Delay(10);
case 'P':K6=1;break;
Delay(10);
case 'O':K6=0;break;
Delay(10);
default:break;
}
SBUF=receiveData;
while(!TI);
TI=0;
dat=0;
ES=1;
}
}
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志?
/* if(receiveData=='S')
{
K1=0;
}
else
{
K1=1;
}*/
//SBUF=receiveData;//将接收到的数据放入到发送寄存器
dat=1;
//清除发送完成标志位
}
void Delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} |