这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » uart0 uart0如何实现多机通讯

共2条 1/1 1 跳转至

uart0 uart0如何实现多机通讯

院士
2006-09-17 18:14:16     打赏
uart0 uart0如何实现多机通讯



关键词: uart0     如何     实现     多机     通讯    

院士
2006-12-22 22:43:00     打赏
2楼
问 51实现多机通讯比较简单
不知道用LPC2210的uart0应该怎么实现

在线等待... 1: re:    定义合适的通讯协议(数据帧格式),所有从机都接收主机的数据帧,然后判断自己是否要响应即可。 2: 听说硬件方面不支持多机通信的,不用忙活了. 3: 谁说不支持,偏方一条:
第9位数据是奇偶校验位,用它!
发送数据(正确发送奇偶校验位,奇偶校验正常通过)
发送地址(强制改错奇偶校验位,让ARM从机检测到奇偶校验错误)

这不就区分开来了? 4: 用RS485了,接一个RS232转RS485的转接头 5: 只接485的转接头就可以吗 6: foyyof  这个方法妙!!支持!!1 7: RS485 Transceivers不要太多哦
我自己的板子就将UART0转成485去通讯,具体怎么做要看你的要求,通讯距离,还有节点数等等. 8: 多机通讯//485多机通讯
volatile uint32        AdressFrame;                //地址帧标志
volatile uint32        ErrorFrame;                //错误帧标志

uint8 s485[30];
void __irq    IRQ_UART0(void)                                                                //另一节车电表数据传输
{
    uint8 b1,b3,drc;
    uint32 i;
    b1=U0IIR;    
    b3=U0LSR;
    TimeOutPtr=0;                        //在定时器中控制超时
    switch(b1&0x0F)
    {
    case 0x06:                                                                            //地址帧        
        if((b3&0x0E)==0x04)
        {
            RecivePtr=0;            
            AdressFrame=1;
        }
        else ErrorFrame=1;
        break;
    case 0x04:                                                                            //数据帧        
        b1=U0RBR;
        if(ErrorFrame==1)                                                            //错误数据,丢弃
        {
            ErrorFrame=0;
            break;
        }
        if(RecivePtr==0)
        {
            if((AdressFrame==1)&&(b1==0x01))
            {
                s485[0]=0x01;
                RecivePtr++;
            }
        }
        else
        {
            s485[RecivePtr]=b1;
            RecivePtr++;
        }
        AdressFrame=0;
        break;
    default:
        b1=U0RBR;
        break;
    }    
    if(RecivePtr>=30)
    {
        DataOk=1;                    //进行数据处理
    }    
    VICVectAddr=0x00;
}     
        
void SendToAnother()                        //发送
{
    uint32 i;

    IO1SET=ENASEND;                        //切换到发送                                                    //切换到发送
    for(i=0;i<500;i++);
    U0LCR=0x2B;                        //切换到发送地址帧                                                        //输出地址
    for(i=0;i<500;i++);    
    U0THR=0x01;                        //地址                                    //发送地址
    while((U0LSR&0x40)==0);
    
    for(i=0;i<4000;i++);                    //切换到发送数据
    U0LCR=0x3B;                                                                //输出地址
    for(i=0;i<500;i++);                                                        //输出数据
    
    U0THR=0x02;                        //数据                                //发送电量
    while((U0LSR&0x40)==0);
    for(i=0;i<4000;i++);                                                    //输入数据    
    IO1CLR=ENASEND;
    for(i=0;i<500;i++);
    i=U0IIR;
    i=U0RBR;
    i=U0LSR;    
    RecivePtr=0;    
}

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]