⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m48_2.c

📁 此份源码举出了M48的串口通信例子,以及多机通信的实现.
💻 C
字号:

#include <mega48.h>
#include <delay.h>
#define   amount 10    //设定通讯数据量(包括1个地址帧,n个数据帧,1个校验帧)  
#include <usart.h>
#include <1wire.h>
#define   address 2    //请在这里设定本机地址

unsigned char  send[amount];               //发件箱
unsigned char inbox[amount];               //收件箱
unsigned char n=0;                         //记忆中断次数

//--------------------------------------------------------------------
interrupt[19] Rxd_isr(void)                //接收中断
{  
  unsigned char ERROR=0; 
  if( UCSR0A&4 || UCSR0A&16 ) ERROR=1;     //记录奇偶效验错误或者帧错误 
  inbox[n]=UDR0;                           //把接收到的数据保存到收件箱
  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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -