小弟在做modbusrtu通信,使用149单片机定时发送数据帧,但是接收到到数据帧怎么都一样呢?
resvbuf[0]——resvbuf[8]接收到的是一样的16进制数据,不知道什么原因,还望高手给予指点!!!谢谢
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
DE;
uint i;
i=0;
while(i<8)
{
TXBUF1=sendbuf
;
while(!(IFG2 & UTXIFG1));
IFG2 &= ~UTXIFG1;
i++;
}
RE;
}
void Set_UART1(void)
{
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x03; //波特率9600
UBR11 = 0x00;
UMCTL1 = 0x6B; //调整
UCTL1 &= ~SWRST; //初始化UART状态机
IE2 |= URXIE1;
}
/*********异步接受中断***/
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX (void)
{
uint j=0;
if (URXIFG1)
{
while(j<9)
{
resvbuf[j]=RXBUF1;
IFG2 &=~ URXIFG1 ;
j++;
}
}
}
[
本帖最后由 Domosday 于 2013-12-8 09:27 编辑 ]
此帖出自
小平头技术问答
while(j<9)
{resvbuf[j]=RXBUF1;//给数组赋值
IFG2&=~URXIFG1;//这句基本上没用,
j++;}//j自加,没退出这一次接收到数据而进入的中断程序,却让j自加,肯定会让数组里数都一样。
建议,去掉while语句,j 设成全局变量或指针变量,进一次中断j加1,当j大于8时,让它等于0.
sendbuf[]={0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b};
但是接受的数据很乱,返回的数据帧格式跟modbus通讯完全不一致,不知道对于这个问题版主有何高见,小弟洗耳恭听!!!非常感谢~~~
sendbuf[]={0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b};
但是接受的数据很乱,返回的数据帧格式跟modbus通讯完全不一致,不知道对于这个问题版主有何高见,小弟洗耳恭听!!!非常感谢~~~
[ 本帖最后由 Domosday 于 2013-12-7 09:21 编辑 ]
一周热门 更多>