|
PLC与51单片机之间串行通信的问题(急求救...)
[复制链接]
我用的PLC是OMRON的CPM2A。51单片机发,通过按键控制单片机串口发送的数据,使用的是外部中断INT1。当与p27口相连的按键按下时,单片机通过串口向PLC发送串“@00WD0000002859*
”,最后是一个回车符。因为有回车符,我不知道程序到底怎么编,我编的是发送他们的ASCII码,不知道行不行。
下面是我编的C程序,希望高手帮我改下,虽然编译通过了,可硬件连上之后没什么反映,肯定是程序还有问题!帮帮忙...
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define MAXLEN 64 //缓冲区最大长度
uchar buf[MAXLEN];
sbit p27 = P2^7; sbit p26 = P2^6; sbit p25 = P2^5;
unsigned char in1,in2,in3;
//************************扫描按键**********************//
void intsvr1(void) interrupt 2 using 1
{
in1=p27;
in2=p26;
in3=p25;
if(in1==0)
strcpy(buf,"40 30 30 57 44 30 30 30 30 30 30 32 38 35 39 2a 0d");
if(in2==0)
strcpy(buf,"40 30 30 57 44 30 30 30 30 30 30 33 38 35 38 2a 0d");
if(in3==0)
strcpy(buf,"40 30 30 57 44 30 30 30 30 30 30 34 38 35 3f 2a 0d");
}
void init()
{
TMOD=0x20; //定时器1工作于方式2
TH1 = 250; // 设置初值
TL1 = 250;
PCON = 0x80; // SMOD = 1
SCON = 0x50; //工作方式1(启动位1位,数据位8位,停止位1位),波特率9600bps,允许接收
IT1=0; //设置INT1为低电平触发
TR1 = 1; //定时器1开始工作
EA=1; //打开所有中断
EX1=1;
}
//************************串口通信程序****************************************//
/* 发送数据函数 */
void senddata(uchar *buf)
{
uint i;
uint len; // 保存数据长度
len = strlen(buf); // 计算要发送数据的长度
for (i=0;i
{
SBUF = *buf;
buf++;
}
}
//*************************主函数***********************//
void main()
{
init();
while(1)
{
senddata(buf);
}
}
|
|