您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机ATMEGA48多机通讯程序 正文
ATMEGA48多机通讯程序

ATMEGA48多机通讯程序

点击数:7608 次   录入时间:03-04 11:38:25   整理:http://www.55dianzi.com   AVR单片机
  n++;                                     //记忆接收的次数
  if(ERROR)                                //如果通讯有错....
    {
      n=0;                                 //接收计数清0 
      inbox[0]=0;                          //把地址改为无效地址0
      UCSR0A|=0x01;                        //重新打开接收器的地址帧筛选功能
    } 
  
  //如果地址匹配本机或者是广播地址就关闭地址筛选(多机通讯)功能  
  if(inbox[0]==address ||inbox[0]==255) UCSR0A&=254; 
  
  if(n==amount)                            //接收到amount个数据以后...
    {  
      n=0;                                 //接收计数清0 
      UCSR0A|=0x01;                        //重新打开接收器的地址帧筛选功能
      if(inbox[amount-1]==w1_dow_crc8(inbox,amount-1))   //如果crc8校验正确就...
        {   
          if(inbox[0]==address)            //如果地址匹配本机就回复数据
            {  
              send[0]=1;                   //发件箱地址指向主机
              send[amount-1]=w1_dow_crc8(send,amount-1); //产生发件箱的crc8校验码
              TXD(send);                   //发送发件箱的数据包send[] 
              //请在这里备份你的收件箱信息
            }
          if(inbox[0]==255)                //如果是广播地址就...
            {
              //请在这里添加你的代码
              //收到广播数据请不要回复
            }
        }
    }


//---------------------------------------------------------------------
void main(void)

  USARTinit();                             //串口初始化
  UCSR0A=0x01;                             //从机打开地址帧筛选功能(多机通讯模式)
  #asm("sei")                              //打开全局中断 
  while(1)
  {  
    //请在这里添加你的代码        
  }
}   //end


//*********************************************************************************************

<usart.h> 头文件

//*********************************************************************************************

//波特率9600/9个数据位/1个停止位/奇校验/收发开启/接收中断
void USARTinit(void)
     {  
       UCSR0B=0x9C;
       UCSR0C=0x36;
       UBRR0L=0x2F;
       PORTD.4=0;                      //MAX485平时工作在接收状态
       DDRD.4=1;
     } 

//-----------------------------------------------------------
//从数组datas[]的首地址开始发送amount个数据,其中第0个数据是地址帧,其他是数据帧
void TXD(unsigned char *datas)
     {
       unsigned char i=0;  
       PORTD.4=1;                      //使MAX485处于发送状态
       while(i<amount)                 //一共发送amount个数据
            {  
              if(i==0) UCSR0B|=1; else UCSR0B&=254;   
              UDR0=*(datas+i);         //装载数据开始发送 
              while((UCSR0A&64)==0);   //等待发送结束
              UCSR0A|=64;              //清除发送结束标志
              i++;                     //发送次数统计
            } 
       PORTD.4=0;                      //使MAX485处于接收状态
     }   




上一页  [1] [2] 


本文关键字:程序  AVR单片机单片机-工控设备 - AVR单片机