|
首先是SSCOM串口调试的结果,能发送也能接收,我是想从PC发指令给单片机,由单片机接收到的指令来控制继电器,是根据教程的示例改变的,代码能这样写吗?
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xFd; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
//TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;
while(1)
{
if (SendFlag==1) // max485(半双工通信) RE/DE定义 RE=0为接受状态 DE=1为发送状态(参考MAX485芯片管脚)
{ RS485E=1; // RS5485E=0为接收状态 RS5485E=1为发送状态
SBUF=SenData; //发送数据
delay(50);
}
else
{
RS485E=0; //接收状态
}
}
}
void ser_int (void) interrupt 4 using 1
{
if(TI == 1)
{
TI = 0;
SendFlag = 0;
}
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
SendFlag = 1;
}
}
void Relay()
{
int k,i,ms;
i = 250;
//K1 = 1;
//K2 = 1;
ReData = SBUF;
while(1)
{
RELAY1 = 1;
RELAY2 = 1;
if(ReData == 00)
{
for(ms=i;ms>0;ms--)
{
RELAY1 = 0;
//Delay_ms(250);
//cont1 = a;
//cont2 = b;
for(k=0;k<16;k++)
{
HC595SendData(~tab2[2*k+1],~tab2[2*k],tab0[2*k],tab0[2*k+1]);
}
}
//清屏
HC595SendData(0Xff,0Xff,0,0);
}
if(ReData == 01)
{
//显示“起”
for(ms=i;ms>0;ms--)
{
RELAY2 = 0;
//Delay_ms(250);
//cont1 = b;
//cont2 = a;
for(k=0;k<16;k++)
{
HC595SendData(~tab1[2*k+1],~tab1[2*k],tab0[2*k],tab0[2*k+1]);
}
}
//清屏
HC595SendData(0Xff,0Xff,0,0);
}
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|