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

📄 main.s

📁 atmega128单片机上实现的nrf905无线收发程序
💻 S
字号:
	.module main.c
	.area data(ram, con, rel)
_R_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e R_flag _R_flag c
_send_addr::
	.blkb 2
	.area idata
	.byte 'V,49
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.blkb 2
	.area idata
	.byte 'V,49
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e send_addr _send_addr A[4:4]c
_receive_addr::
	.blkb 2
	.area idata
	.byte 19,'e
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.blkb 2
	.area idata
	.byte 19,'e
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e receive_addr _receive_addr A[4:4]c
_broad_addr::
	.blkb 2
	.area idata
	.byte 255,255
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.blkb 2
	.area idata
	.byte 255,255
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e broad_addr _broad_addr A[4:4]c
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e flag _flag c
_pack_num::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbsym e pack_num _pack_num i
	.area vector(rom, abs)
	.org 24
	jmp _Int_DR
	.area data(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.area text(rom, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
	.dbfunc e Int_DR _Int_DR fV
	.even
_Int_DR::
	xcall push_lset
	.dbline -1
	.dbline 39
; /***************************************
; *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,接收数无线据
; {
	.dbline 40
;     RxPacket(receive_data);
	ldi R16,<_receive_data
	ldi R17,>_receive_data
	xcall _RxPacket
	.dbline 42
; 	//////////////////////还应改变一下缓冲区的指针(接收多个包时)
; 	R_flag=1;             //接收到其他节点的数据包的标志
	ldi R24,1
	sts _R_flag,R24
	.dbline -2
L1:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 49
;  
; }
; 
; 
; 
; void main(void)
; {
	.dbline 52
;    int i;
;    
; 	init_spi();
	xcall _init_spi
	.dbline 53
; 	init_905();
	xcall _init_905
	.dbline 54
; 	init_INT();             //初始化外部中断
	xcall _init_INT
	.dbline 56
; 	
; 	set_confword(receive_addr);//以后在初始条件下,接收地址应该为广播地址
	ldi R16,<_receive_addr
	ldi R17,>_receive_addr
	xcall _set_confword
	.dbline 57
; 	send_conf();            //设置905的配置字
	xcall _send_conf
	.dbline 59
; 	 
; 	EIFR|=0XFF;           //清除外部中断的标志位
	in R24,0x38
	ori R24,255
	out 0x38,R24
	.dbline 60
; 	set_Rmode();           //nRF设置成接收模式 必须有下一句的开启外部中断5和上一句的清除外部中断的标志位
	xcall _set_Rmode
	.dbline 61
; 	EIMSK|=BIT(5);         //开启外部中断5,以监测是无线模块是否收到数据
	in R24,0x39
	ori R24,32
	out 0x39,R24
	.dbline 63
; 	
; 	LED_YELLOW;
	sbi 0x1b,0
	.dbline 63
	cbi 0x1b,1
	.dbline 63
	xjmp L4
L3:
	.dbline 65
; 	while(1)
; 	{
	.dbline 66
;    	  if(R_flag==1)
	lds R24,_R_flag
	cpi R24,1
	brne L6
	.dbline 67
; 	  {
	.dbline 68
; 	      R_flag=0; 
	clr R2
	sts _R_flag,R2
	.dbline 69
; 		  pack_num++;
	lds R24,_pack_num
	lds R25,_pack_num+1
	adiw R24,1
	sts _pack_num+1,R25
	sts _pack_num,R24
	.dbline 70
; 		  if(0xffff==pack_num)
	cpi R24,255
	ldi R30,255
	cpc R25,R30
	brne L8
	.dbline 71
; 		  {
	.dbline 72
; 		      pack_num=0;
	clr R3
	sts _pack_num+1,R3
	sts _pack_num,R2
	.dbline 73
; 		  }  
L8:
	.dbline 75
; 		/* */
; 		 if(flag==0)
	lds R2,_flag
	tst R2
	brne L10
	.dbline 76
; 		  {
	.dbline 77
; 		    LED_RED;
	cbi 0x1b,0
	.dbline 77
	sbi 0x1b,1
	.dbline 77
	.dbline 78
; 			flag=1;
	ldi R24,1
	sts _flag,R24
	.dbline 79
; 		  }
	xjmp L11
L10:
	.dbline 80
; 		  else if(flag==1)
	lds R24,_flag
	cpi R24,1
	brne L12
	.dbline 81
; 		  {
	.dbline 82
; 		    LED_YELLOW;
	sbi 0x1b,0
	.dbline 82
	cbi 0x1b,1
	.dbline 82
	.dbline 83
; 			flag=0;
	clr R2
	sts _flag,R2
	.dbline 84
; 		  }
L12:
L11:
	.dbline 87
; 		  /**/
; 		  
; 		  set_Tmode();
	xcall _set_Tmode
	.dbline 88
; 		  EIMSK&=~BIT(5);           //屏蔽外部中断5
	in R24,0x39
	andi R24,223
	out 0x39,R24
	.dbline 89
; 		  set_Taddr(send_addr);
	ldi R16,<_send_addr
	ldi R17,>_send_addr
	xcall _set_Taddr
	.dbline 91
; 		  //Delay650us();           //写地址和写数据之间要延时
; 		  TxPacket(receive_data);  //转发接收到的数据
	ldi R16,<_receive_data
	ldi R17,>_receive_data
	xcall _TxPacket
	.dbline 93
; 		
; 		  EIFR|=0XFF;           //清除外部中断的标志位
	in R24,0x38
	ori R24,255
	out 0x38,R24
	.dbline 94
; 		  set_Rmode();		 
	xcall _set_Rmode
	.dbline 95
; 		  EIMSK|=BIT(5);           //开启外部中断5	*/	  
	in R24,0x39
	ori R24,32
	out 0x39,R24
	.dbline 97
; 		
; 	  } 
L6:
	.dbline 98
L4:
	.dbline 64
	xjmp L3
X0:
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym l i 1 I
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\main.c
_transmit_data::
	.blkb 21
	.dbsym e transmit_data _transmit_data A[21:21]c
_receive_data::
	.blkb 21
	.dbsym e receive_data _receive_data A[21:21]c

⌨️ 快捷键说明

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