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

📄 main.c

📁 atmega128单片机上实现的nrf905无线收发程序
💻 C
字号:
/***************************************
*2008,浙江工业大学信息与控制研究所
*All rights reserved
*
*文件名称:main.c
*摘    要:接收节点测试主程序,用来测试丢包,传输时间和载波侦听
*
*当前版本:1.1
*作    者:王微
*完成日期:2008.7.9
****************************************/


#include<iom128v.h>
#include<macros.h>


#include"nrf.h"
#include"spi.h"
#include"common.h"
#include"INT.h"

//LED显示驱动
#define LED_YELLOW PORTA|=(1<<PORTA0);PORTA&=~(1<<PORTA1);
#define LED_RED PORTA&=~(1<<PORTA0);PORTA|=(1<<PORTA1);

unsigned char R_flag=0;         //接收到其他节点的数据包的标志 

unsigned char  send_addr[4]={0x56,0x31,0x56,0x31};                    //4字节的发送地址
unsigned char  receive_addr[4]={0x13,0x65,0x13,0x65};                 //4字节的接收地址a513d36a
unsigned char  broad_addr[4]={0xff,0xff,0xff,0xff};                   //4字节的广播地址
unsigned char  receive_data[PACKAGE_LENGTH];                          //PACKAGE_LENGTH字节的接收数据缓存区
unsigned char  transmit_data[PACKAGE_LENGTH];                         //PACKAGE_LENGTH字节的发送数据缓存区

unsigned char flag=0;
unsigned int pack_num=0;       //接收到数据包的个数
#pragma interrupt_handler Int_DR: 7		
void Int_DR(void)                            //外部中断INT5,中断向量号为7,接收数无线据
{
    RxPacket(receive_data);
	//////////////////////还应改变一下缓冲区的指针(接收多个包时)
	R_flag=1;             //接收到其他节点的数据包的标志
 
}



void main(void)
{
   int i;
   
	init_spi();
	init_905();
	init_INT();             //初始化外部中断
	
	set_confword(receive_addr);//以后在初始条件下,接收地址应该为广播地址
	send_conf();            //设置905的配置字
	 
	EIFR|=0XFF;           //清除外部中断的标志位
	set_Rmode();           //nRF设置成接收模式 必须有下一句的开启外部中断5和上一句的清除外部中断的标志位
	EIMSK|=BIT(5);         //开启外部中断5,以监测是无线模块是否收到数据
	
	LED_YELLOW;
	while(1)
	{
   	  if(R_flag==1)
	  {
	      R_flag=0; 
		  pack_num++;
		  if(0xffff==pack_num)
		  {
		      pack_num=0;
		  }  
		/* */
		 if(flag==0)
		  {
		    LED_RED;
			flag=1;
		  }
		  else if(flag==1)
		  {
		    LED_YELLOW;
			flag=0;
		  }
		  /**/
		  
		  set_Tmode();
		  EIMSK&=~BIT(5);           //屏蔽外部中断5
		  set_Taddr(send_addr);
		  //Delay650us();           //写地址和写数据之间要延时
		  TxPacket(receive_data);  //转发接收到的数据
		
		  EIFR|=0XFF;           //清除外部中断的标志位
		  set_Rmode();		 
		  EIMSK|=BIT(5);           //开启外部中断5	*/	  
		
	  } 
	}
}

⌨️ 快捷键说明

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