我用usb转232发送和接收都成功,但是用usb转485不管发什么接收都是00,MAX485的使能已经设置了
// 测试主文件
#include <intrins.h>
#include <math.h>
#include <STC12C5616AD.H>
sbit v2=P1^2;
sbit v1=P1^3;
sbit P32 = P3^2;
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
#ifndef ulong
#define ulong unsigned long
#endif
typedef struct
{ uchar ProType; // 协议类型
uchar PCReFlag; // 串口接收到数据有标志
uint PCReLen; // PC接收长度
uint PCSeLen; // PC发送的数据长度
uchar *PSend; // 发送指针
}PCSerialCfgStruct;
PCSerialCfgStruct PCSerialCfg1; // PC串口1通信用的变量
uchar FullData[100]; //完整命令缓存
uchar SendBuf[100]; //发送缓存
void Inint_Port()
{
SCON=0x50;;
PCON=0x80;
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD=0x20;
TH1=0xD9;
TL1=0xD9;
TR1=1;
EA=1;
ES=1;
}
/****************串行口1发送****************/
void UART_1Send()
{
uint i;
P32=1;
PCSerialCfg1.PCSeLen = PCSerialCfg1.PCReLen; //发送总长度
PCSerialCfg1.PSend = &SendBuf[0]; // 发送指针
for(i=0;i<PCSerialCfg1.PCSeLen;i++)
{
SendBuf[i] = FullData[i];
}
if(SendBuf[3]==0xA0)
{
if(v1==0)
{
SendBuf[4] = 0x01;
}
}
else if(SendBuf[3]==0xA1)
{
if(v2==0)
{
SendBuf[4] = 0x01;
}
}
P32=1;
SBUF = *PCSerialCfg1.PSend++;
PCSerialCfg1.PCSeLen--;
}
void InitPCSer()
{
PCSerialCfg1.PCReFlag = 0;
PCSerialCfg1.PCSeLen = 0;
PCSerialCfg1.PCReLen = 0;
}
uchar temp1 ,flag1;
void main()
{
Inint_Port(); // 硬件初始化函数
InitPCSer();
P32=1;
flag1 = 0;
while(1)
{
if(PCSerialCfg1.PCReFlag==1)
{
PCSerialCfg1.PCReFlag = 0;
UART_1Send();
PCSerialCfg1.PCReLen = 0;
}
if(flag1==1)
{
P32=1;
flag1=0;
SBUF=temp1;
}
}
}
void RevicePCCommand()
{
uchar Ta;
Ta = SBUF;
if(Ta==0x03)
{
FullData[PCSerialCfg1.PCReLen++] = Ta;
PCSerialCfg1.PCReFlag = 2;
}
else if(PCSerialCfg1.PCReFlag==2)
{
FullData[PCSerialCfg1.PCReLen++] = Ta;
if(PCSerialCfg1.PCReLen>5) //PC发送的命令 大于一定长度
{
if(Ta==0x01)
{
PCSerialCfg1.PCReFlag = 1;
}
}
}
}
void SendPCCommand()
{
if(PCSerialCfg1.PCSeLen>0)
{
P32=1;
SBUF = *PCSerialCfg1.PSend++;
PCSerialCfg1.PCSeLen--;
}
else
{
P32=0;
}
}
void serial_0(void)interrupt 4 /* S0 */
{
if(_testbit_(RI))
{ P32=0;
// flag1=1;
// temp1=SBUF;
RevicePCCommand();
}
if(_testbit_(TI)) // 对PC发送
{
P32=0;
SendPCCommand();
}
} |