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

AVR多机通讯

点击数:7150 次   录入时间:03-04 12:03:42   整理:http://www.55dianzi.com   AVR单片机
unsigned char inbox[amount];                      //收件箱 
unsigned char n=0;                                //记忆中断次数 

interrupt[12] Rxd_isr(void)                       //接收中断 
{   
   unsigned char ERROR=0; 
   if( UCSRA&4 || UCSRA&16 ) ERROR=1;              //记录奇偶效验错误或者帧错误 
   inbox[n]=UDR;                                   //把接收到的数据保存到收件箱 
   n++;                                            //记忆接收的次数 
   if(ERROR)                                       //如果通讯有错.... 
     { 
       n=0;                                        //接收计数清0 
       inbox[0]=0;                                 //把地址改为无效地址0 
       UCSRA|=0x01;                                //重新打开接收器的地址帧筛选功能 
     } 
   
   //如果地址匹配本机或者是广播地址就关闭地址筛选(多机通讯)功能   
   if(inbox[0]==address ||inbox[0]==255) UCSRA&=254; 
   
   if(n==amount)                                   //接收到amount个数据以后... 
     {   
       n=0;                                        //接收计数清0 
       UCSRA|=0x01;                                //重新打开接收器的地址帧筛选功能 
       if(inbox[amount-1]==crc8(inbox,amount-1))   //如果crc8校验正确就... 
         {    
           if(inbox[0]==address)                   //如果地址匹配本机就回复数据 
             {   
               send[0]=1;                          //发件箱地址指向主机 
               send[amount-1]=crc8(send,amount-1);//产生发件箱的crc8校验码 
               usart_out(send,amount);             //发送发件箱的数据包send[] 
               //请在这里备份你的收件箱信息 
             } 
           if(inbox[0]==255)                       //如果是广播地址就... 
             { 
               //请在这里添加你的代码 
               //收到广播数据请不要回复 
             } 
         } 
     } 


void main(void) 

   usart_init(); 
   #asm("sei") 

   while (1) 
         { 
           //send[1]=? 
           //...... 
           //send[n]=? 
         }; 



--------------------------------------------------------------------------------- 
usart.h文件 
--------------------------------------------------------------------------------- 
//波特率9600/9个数据位/1个停止位/奇校验/收发开启/接收中断 
void usart_init(void) 
      {   
        UCSRA=0x01; 
        UCSRB=0x9C; 
        UCSRC=http://www.55dianzi.com/0xB6; 
        UBRRH=0x00; 
        UBRRL=47; 

        PORTD.4=0;                       //MAX485平时工作在接收状态 
        DDRD.4=1; 

上一页  [1] [2] [3]  下一页


本文关键字:暂无联系方式AVR单片机单片机-工控设备 - AVR单片机

《AVR多机通讯》相关文章>>>