|
10积分
最近用STC12C5202AD芯片,实现主机与从机通信功能,用的是RS485协议,上面是RS485电路图,现在的情况是只能收发一个数据,无论主机发送多少个数据,从机也只能收发一个数据,调试了整天也没有找到原因,下面是我编写的程序:
#include
unsigned char TEMP,a;
sbit RE = P1^2; //接收允许开关
sbit DE = P1^1; //发送允许开关
/**************************************
延时程序
**************************************/
void delay(unsigned char i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void init()
{
TMOD=0X20; //设置定时器的工作方式为方式2,自动重装8位数据
TH1=0XFD; //波特率9600的初始值
TL1=0XFD; //波特率9600的初始值
SCON=0X50; //设置串口的模式为方式1并置为REN使串口工作
TR1=1; //启动定时器工作
EA=1; //开启总中断
ES=1; //开启串口中断
DE = 0;
RE = 0; //允许接收,禁止发送数据
}
void main()
{
init(); //调用初始化子函数
//delay(50);
while(1) //死循环
{
if(TEMP==1) //判断是否接收完数据
{
DE = 1;
RE = 1; //允许发送,禁止接收数据
delay(50);
EA=0; //关闭串口中断
TEMP=0; //变量TEMP清0
SBUF = a; //把a的值送到发送SBUF中去,注意此SBUF不同中断函数里面的接收SBUF
while(!TI) ; //等待数据发送完毕
TI = 0; //发送完数据后清0
delay(50);
EA=1; //开启串口中断
DE = 0;
RE = 0; //允许接收,禁止发送数据
delay(50);
}
}
}
void ser() interrupt 4
{
RI=0; //接收完数据后软件清除中断标志位
a = SBUF; //把他放进变量A中为了读取返回
TEMP=1; //置位TEMP
}
该程序如果去掉延时,用在RS232芯片上,通信一切正常,请各位高手帮我分析一下,是程序出现了问题,还是电路问题,谢谢大家! |
|