?? nrf.lis
字號:
.module nrf.c
.area text(rom, con, rel)
0000 .dbfile E:\心電監護系統\測試程序\第一階段\無線測試\接收端\nrf.c
0000 .dbfunc e init_905 _init_905 fV
.even
0000 _init_905::
0000 .dbline -1
0000 .dbline 35
0000 ; /***************************************
0000 ; *2008,浙江工業大學信息與控制研究所
0000 ; *All rights reserved
0000 ; *
0000 ; *文件名稱:nrf.c
0000 ; *摘 要:NRF905相關的子程序實現
0000 ; *
0000 ; *當前版本:1.1
0000 ; *作 者:王微
0000 ; *完成日期:2008.4.28
0000 ; ****************************************/
0000 ; #include<macros.h>
0000 ; #include<iom128v.h>
0000 ;
0000 ; #include"spi.h"
0000 ; #include"common.h"
0000 ; #include"nrf.h"
0000 ;
0000 ;
0000 ; unsigned char data_conf[10];
0000 ; //unsigned char send_addr[4]={0x13,0x65,0x13,0x65}; //4字節的發送地址
0000 ; //unsigned char broad_addr[4]={0xff,0xff,0xff,0xff}; //4字節的廣播地址
0000 ; //unsigned char receive_addr[4]={0x65,0x13,0x65,0x13}; //4字節的接收地址a513d36a
0000 ; //unsigned char receive_data[PACKAGE_LENGTH]; //PACKAGE_LENGTH字節的接收數據緩存區
0000 ; //unsigned char transmit_data[PACKAGE_LENGTH]; //PACKAGE_LENGTH字節的發送數據緩存區
0000 ;
0000 ;
0000 ;
0000 ; /**************************************************
0000 ; 函數功能:初始化nRF905,
0000 ; 輸入參數:無
0000 ; 輸出參數:無
0000 ; **************************************************/
0000 ; void init_905()
0000 ; {
0000 .dbline 36
0000 ; DDRE|=(1<<CSN)|(1<<PWR_UP)|(1<<TX_EN);//設置端口E的1,2,3引腳為輸出引腳
0000 82B1 in R24,0x2
0002 8E60 ori R24,14
0004 82B9 out 0x2,R24
0006 .dbline 37
0006 ; DDRB|=(1<<MOSI)|(1<<SCK)|(1<<TRX_CE);//設置MOSI、SCK和SS 為輸出,其他為輸入
0006 87B3 in R24,0x17
0008 8760 ori R24,7
000A 87BB out 0x17,R24
000C .dbline 39
000C ;
000C ; PORTE |=(1<<PWR_UP); //905上電
000C 1A9A sbi 0x3,2
000E .dbline 40
000E ; PORTE |=(1<<CSN); //CSN引腳置位,停止SPI操作,
000E 199A sbi 0x3,1
0010 .dbline 42
0010 ;
0010 ; PORTB |=1<<SCK; // Spi clock line init high
0010 C19A sbi 0x18,1
0012 .dbline 44
0012 ;
0012 ; PORTE &=~(1<<TX_EN);
0012 1B98 cbi 0x3,3
0014 .dbline 45
0014 ; PORTB &=~(1<<TRX_CE); // Set nRF905 in standby mode
0014 C098 cbi 0x18,0
0016 .dbline 47
0016 ;
0016 ; Delay3ms();
0016 0E940000 xcall _Delay3ms
001A .dbline -2
001A L1:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbend
001C .dbfunc e set_confword _set_confword fV
001C ; r_addr -> R16,R17
.even
001C _set_confword::
001C .dbline -1
001C .dbline 56
001C ; }
001C ;
001C ; /**************************************************
001C ; 函數功能:設置配置字
001C ; 輸入參數:905的接收地址
001C ; 輸出參數:無
001C ; **************************************************/
001C ; void set_confword(unsigned char*r_addr)
001C ; {
001C .dbline 58
001C ;
001C ; data_conf[0]=0x01; //
001C 81E0 ldi R24,1
001E 80930000 sts _data_conf,R24
0022 .dbline 59
0022 ; data_conf[1]=0x0c; //不重發數據,接收模式為正常模式,輸出功率為10dB("11"),工作在433MHz
0022 8CE0 ldi R24,12
0024 80930100 sts _data_conf+1,R24
0028 .dbline 60
0028 ; data_conf[2]=0x44; //4字節的接收地址和發送地址
0028 84E4 ldi R24,68
002A 80930200 sts _data_conf+2,R24
002E .dbline 62
002E ;
002E ; data_conf[3]=PACKAGE_LENGTH; //RX有效數據長度
002E 85E1 ldi R24,21
0030 80930300 sts _data_conf+3,R24
0034 .dbline 63
0034 ; data_conf[4]=PACKAGE_LENGTH; //TX有效數據長度
0034 80930400 sts _data_conf+4,R24
0038 .dbline 65
0038 ;
0038 ; data_conf[5]=r_addr[0]; //5~8為RX地址
0038 F801 movw R30,R16
003A 2080 ldd R2,z+0
003C 20920500 sts _data_conf+5,R2
0040 .dbline 66
0040 ; data_conf[6]=r_addr[1];
0040 2180 ldd R2,z+1
0042 20920600 sts _data_conf+6,R2
0046 .dbline 67
0046 ; data_conf[7]=r_addr[2];
0046 F801 movw R30,R16
0048 2280 ldd R2,z+2
004A 20920700 sts _data_conf+7,R2
004E .dbline 68
004E ; data_conf[8]=r_addr[3];
004E F801 movw R30,R16
0050 2380 ldd R2,z+3
0052 20920800 sts _data_conf+8,R2
0056 .dbline 70
0056 ;
0056 ; data_conf[9]=0xd8;
0056 88ED ldi R24,216
0058 80930900 sts _data_conf+9,R24
005C .dbline -2
005C L2:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r r_addr 16 pc
005E .dbend
005E .dbfunc e send_conf _send_conf fV
005E ; i -> R20
.even
005E _send_conf::
005E 0E940000 xcall push_gset1
0062 .dbline -1
0062 .dbline 80
0062 ;
0062 ; }
0062 ;
0062 ; /************************************************************
0062 ; 函數功能:發送配置字 ,通過SPI口把設定的配置寄存器的值寫入到905
0062 ; 輸入參數:無
0062 ; 輸出參數:無
0062 ; *************************************************************/
0062 ; void send_conf()
0062 ; {
0062 .dbline 82
0062 ; unsigned char i;
0062 ; PORTE &=~(1<<CSN); // Spi enable for write a spi command
0062 1998 cbi 0x3,1
0064 .dbline 83
0064 ; SpiWrite(WC); // Write config command寫放配置命令
0064 0027 clr R16
0066 0E940000 xcall _SpiWrite
006A .dbline 84
006A ; for (i=0;i<10;i++) // Write configration words 寫放配置字
006A 4427 clr R20
006C 0AC0 xjmp L16
006E L13:
006E .dbline 85
006E .dbline 86
006E 80E0 ldi R24,<_data_conf
0070 90E0 ldi R25,>_data_conf
0072 E42F mov R30,R20
0074 FF27 clr R31
0076 E80F add R30,R24
0078 F91F adc R31,R25
007A 0081 ldd R16,z+0
007C 0E940000 xcall _SpiWrite
0080 .dbline 87
0080 L14:
0080 .dbline 84
0080 4395 inc R20
0082 L16:
0082 .dbline 84
0082 4A30 cpi R20,10
0084 A0F3 brlo L13
0086 .dbline 88
0086 ; {
0086 ; SpiWrite(data_conf[i]);
0086 ; }
0086 ; PORTE |=(1<<CSN); // Disable Spi
0086 199A sbi 0x3,1
0088 .dbline -2
0088 L12:
0088 0E940000 xcall pop_gset1
008C .dbline 0 ; func end
008C 0895 ret
008E .dbsym r i 20 c
008E .dbend
008E .dbfunc e set_Tmode _set_Tmode fV
.even
008E _set_Tmode::
008E .dbline -1
008E .dbline 97
008E ; }
008E ;
008E ; /***************************************************************
008E ; 函數功能:把905配置成發送模式
008E ; 輸入參數:無
008E ; 輸出參數:無
008E ; ***************************************************************/
008E ; void set_Tmode()
008E ; {
008E .dbline 98
008E ; PORTE |=(1<<PWR_UP); //905上電
008E 1A9A sbi 0x3,2
0090 .dbline 99
0090 ; PORTE |=(1<<TX_EN);
0090 1B9A sbi 0x3,3
0092 .dbline 100
0092 ; PORTB &=~(1<<TRX_CE);
0092 C098 cbi 0x18,0
0094 .dbline 101
0094 ; Delay650us(); // delay for mode change(>=650us)
0094 0E940000 xcall _Delay650us
0098 .dbline -2
0098 L17:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbend
009A .dbfunc e set_Rmode _set_Rmode fV
.even
009A _set_Rmode::
009A .dbline -1
009A .dbline 110
009A ; }
009A ;
009A ; /***************************************************************
009A ; 函數功能:把905配置成接收模式
009A ; 輸入參數:無
009A ; 輸出參數:無
009A ; ***************************************************************/
009A ; void set_Rmode()
009A ; {
009A .dbline 111
009A ; PORTE |=(1<<PWR_UP); //905上電
009A 1A9A sbi 0x3,2
009C .dbline 112
009C ; PORTE &=~(1<<TX_EN);
009C 1B98 cbi 0x3,3
009E .dbline 113
009E ; PORTB |=(1<<TRX_CE);
009E C09A sbi 0x18,0
00A0 .dbline 114
00A0 ; Delay650us(); // delay for mode change(>=650us)
00A0 0E940000 xcall _Delay650us
00A4 .dbline -2
00A4 L18:
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbend
00A6 .dbfunc e set_Powerdownmode _set_Powerdownmode fV
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -