本人在做一个485SCI的串行传输,遇到一点问题,想请教请教遇到过的朋友,现象如下:
主从两块板,主板收集8块IO板的信息,存储在IOS[8]一维数组里面(每一块IO板的信息存进相应的IOS位置中),通过485异步串行通讯把该数组发给从板,存在从板的IOS[8]数组里面,并通过从板相应的IO板显示出来。现在的情况是主板的IO板信息收集进去主板的IOS数组中,并开通了异步传输,能传送到从板的IOS数组并显示出来,但现在发现主板的IO板送过来的信息好像被重复覆盖了(无论是主板的IO板0/IO板1还是其它IO板,只要一改变,从板的所有IO板显示都改变),下面是我的部分程序,请各位给出点意见,谢谢!
void dealtime()
{
time0++;
if(time0==500)
{
time0=0;
IO_read();
RA6=1;
RA7=1;
SPBRG=25;//初始化异步串行通信
BRGH=1;
SYNC=0;
SPEN=1;
TXIE=1;
TX9=0;
TXEN=1;
TXREG=IOS[0];
}
}
void interrupt ISR (void)//中断函数
{
if(T0IF==1)
{
dealtime();
T0IF=0;
OPTION=0X01;
INTCON=INTCON|0X20;
TMR0=0X06;
}
if(RCIF==1)
{
//RCIF=0;
IOS[receive_count]=RCREG;
RCREG=RCREG;
receive_count++;
// RCEN=1;
if(receive_count>7)
{
RCEN=0;
receive_count=0;
}
return;
}
if(RBIF==1)
{
KEYSCAN_PORTB();
RBIF=0;
}
if(TXIF==1)
{
// TXIF=0;
TXREG=IOS[++sent_count];
TXREG=TXREG;
// sent_count++;
// TXEN=1;
if(sent_count>8)
{
sent_count=0;
TXEN=0;
}
return;
}
}
void Slave()
{
TRISA=0X00;
RCIE=0;
RA6=1;
RA7=0;
TRISB=0X00;
PORTB=0X00;
//开接收中断
SPBRG=25;
BRGH=1;
SYNC=0;
SPEN=1;
RCIE=1;
RX9=0;
CREN=1;
}
准备是用中断查询,发送IOS【8】以及接收IOS[8]都是用中断,定时器定时一段时间后开始一次新的发送。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>