📄 wx_mn.lst
字号:
__start:
__text_start:
0079 EFCF LDI R28,0xFF
007A E1D0 LDI R29,0x10
007B BFCD OUT P3D,R28
007C BFDE OUT P3E,R29
007D 51C0 SUBI R28,0x10
007E 40D0 SBCI R29,0
007F EA0A LDI R16,0xAA
0080 8308 STD R16,0+Y
0081 2400 CLR R0
0082 E5E6 LDI R30,0x56
0083 E0F1 LDI R31,1
0084 E011 LDI R17,1
0085 35E7 CPI R30,0x57
0086 07F1 CPC R31,R17
0087 F011 BEQ 0x008A
0088 9201 ST R0,Z+
0089 CFFB RJMP 0x0085
008A 8300 STD R16,0+Z
008B E9EC LDI R30,0x9C
008C E0F0 LDI R31,0
008D E0A0 LDI R26,0
008E E0B1 LDI R27,1
008F E010 LDI R17,0
0090 3FE2 CPI R30,0xF2
0091 07F1 CPC R31,R17
0092 F021 BEQ 0x0097
0093 95C8 LPM
0094 9631 ADIW R30,1
0095 920D ST R0,X+
0096 CFF9 RJMP 0x0090
0097 940E0462 CALL _main
_exit:
0099 CFFF RJMP _exit
_delayus:
i --> R20
us --> R22
009A 940E053B CALL push_gset2
009C 01B8 MOVW R22,R16
FILE: E:\PQ-1A\我的AVR\新建文件夹\无线模拟\spi.c
(0001) #include <iom128v.h>
(0002) #include <iom128.h>
(0003) #include <macros.h>
(0004) #include <BIT.h>
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007)
(0008) #define CSN _PB0
(0009) #define SCK _PB1
(0010) #define MOSI _PB2
(0011) #define MISO READ_PB3
(0012)
(0013) #define BYTE_BIT0 0x01
(0014) #define BYTE_BIT1 0x02
(0015) #define BYTE_BIT2 0x04
(0016) #define BYTE_BIT3 0x08
(0017) #define BYTE_BIT4 0x10
(0018) #define BYTE_BIT5 0x20
(0019) #define BYTE_BIT6 0x40
(0020) #define BYTE_BIT7 0x80
(0021)
(0022) uchar DATA_BUF;
(0023) #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
(0024) #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
(0025)
(0026) /*从最高位到最低位依次是:hafc debg*/
(0027) uchar table[]=//这个译码数组0、123467已经改好了! by张强
(0028) //589也已改好 lly
(0029) {0x7e, 0x12, 0x4f,0x5b
(0030) ,0x33, 0x79, 0x7d, 0x52,
(0031) 0x7f,0x7b};//段选编码
(0032)
(0033) /*******************************************
(0034) 函数名称: delayus
(0035) 功 能: 延时指定微秒(8.31M晶振)
(0036) 参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
(0037) 返回值 : 无
(0038) /********************************************/
(0039) void delayus(uint us)
(0040) {
(0041) uint i;
(0042) us=us*13/10; //13/10是在8.31MHz晶振下,通过软件仿真反复实验得到的数值
009D E00D LDI R16,0xD
009E E010 LDI R17,0
009F 019B MOVW R18,R22
00A0 940E0514 CALL empy16s
00A2 E02A LDI R18,0xA
00A3 E030 LDI R19,0
00A4 940E04FA CALL div16u
00A6 01B8 MOVW R22,R16
(0043) for( i=0;i<us;i++);
00A7 2744 CLR R20
00A8 2755 CLR R21
00A9 C002 RJMP 0x00AC
00AA 5F4F SUBI R20,0xFF
00AB 4F5F SBCI R21,0xFF
00AC 1746 CP R20,R22
00AD 0757 CPC R21,R23
00AE F3D8 BCS 0x00AA
(0044) }
00AF 940E054B CALL pop_gset2
00B1 9508 RET
_delayms:
x --> R20
y --> R22
z --> R16
00B2 940E053B CALL push_gset2
(0045)
(0046) /*******************************************
(0047) 函数名称: delay()
(0048) 功 能: 8.31MHz晶振下延时 z ms
(0049) 参 数: z
(0050) 返回值 : 无
(0051) /********************************************/
(0052) void delayms(uint z)
(0053) {
(0054) uint x,y;
(0055) for(x=z;x>0;x--)
00B4 01A8 MOVW R20,R16
00B5 C00A RJMP 0x00C0
(0056) for(y=1185;y>0;y--);
00B6 EA61 LDI R22,0xA1
00B7 E074 LDI R23,4
00B8 C002 RJMP 0x00BB
00B9 5061 SUBI R22,1
00BA 4070 SBCI R23,0
00BB 3060 CPI R22,0
00BC 0767 CPC R22,R23
00BD F7D9 BNE 0x00B9
00BE 5041 SUBI R20,1
00BF 4050 SBCI R21,0
00C0 3040 CPI R20,0
00C1 0745 CPC R20,R21
00C2 F799 BNE 0x00B6
(0057) }
00C3 940E054B CALL pop_gset2
00C5 9508 RET
(0058)
(0059) void SpiInit(void)
(0060) {
(0061) DDRB|=BIT(0)|BIT(1)|BIT(2);
_SpiInit:
00C6 B387 IN R24,P17
00C7 6087 ORI R24,7
00C8 BB87 OUT P17,R24
(0062) DDRB&=~BIT(3);
00C9 98BB CBI P17,3
(0063) PORTB|=BIT(3);
00CA 9AC3 SBI P18,3
(0064) CSN=1; // Spi disable
00CB B388 IN R24,P18
00CC 6081 ORI R24,1
00CD BB88 OUT P18,R24
(0065) SCK=0; // Spi clock line init low
00CE B388 IN R24,P18
00CF 7F8D ANDI R24,0xFD
00D0 BB88 OUT P18,R24
(0066) }
00D1 9508 RET
(0067)
(0068) unsigned char SpiRead(void)
(0069) {
(0070) unsigned char i;
(0071) for (i=0;i<8;i++)
_SpiRead:
i --> R16
00D2 2700 CLR R16
00D3 C01C RJMP 0x00F0
(0072) {
(0073) DATA_BUF=DATA_BUF<<1;
00D4 90200156 LDS R2,_DATA_BUF
00D6 0C22 LSL R2
00D7 92200156 STS R2,_DATA_BUF
(0074) SCK=1;
00D9 B388 IN R24,P18
00DA 6082 ORI R24,2
00DB BB88 OUT P18,R24
(0075) //OED&=0XFD; // DATA=1; //设置为输入状态
(0076) if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
00DC B386 IN R24,P16
00DD 9586 LSR R24
00DE 9586 LSR R24
00DF 9586 LSR R24
00E0 7081 ANDI R24,1
00E1 F029 BEQ 0x00E7
(0077) {
(0078) DATA_BUF|=BYTE_BIT0;
00E2 2D82 MOV R24,R2
00E3 6081 ORI R24,1
00E4 93800156 STS R24,_DATA_BUF
(0079) }
00E6 C005 RJMP 0x00EC
(0080) else
(0081) {
(0082) DATA_BUF&=~BYTE_BIT0;
00E7 91800156 LDS R24,_DATA_BUF
00E9 7F8E ANDI R24,0xFE
00EA 93800156 STS R24,_DATA_BUF
(0083) }
(0084) //OED|=0X02;
(0085) SCK=0;
00EC B388 IN R24,P18
00ED 7F8D ANDI R24,0xFD
00EE BB88 OUT P18,R24
00EF 9503 INC R16
00F0 3008 CPI R16,0x8
00F1 F310 BCS 0x00D4
(0086) }
(0087) return DATA_BUF;
00F2 91000156 LDS R16,_DATA_BUF
00F4 9508 RET
_SpiWrite:
i --> R20
send --> R16
00F5 940E0524 CALL push_gset1
(0088) }
(0089)
(0090) void SpiWrite(unsigned char send)
(0091) {
(0092) unsigned char i;
(0093) DATA_BUF=send;
00F7 93000156 STS R16,_DATA_BUF
(0094) for (i=0;i<8;i++)
00F9 2744 CLR R20
00FA C017 RJMP 0x0112
(0095) {
(0096) if (DATA7) //总是发送最高位
00FB 90200156 LDS R2,_DATA_BUF
00FD FE27 SBRS R2,7
00FE C004 RJMP 0x0103
(0097) {
(0098) MOSI=1;
00FF B388 IN R24,P18
0100 6084 ORI R24,4
0101 BB88 OUT P18,R24
(0099) }
0102 C003 RJMP 0x0106
(0100) else
(0101) {
(0102) MOSI=0;
0103 B388 IN R24,P18
0104 7F8B ANDI R24,0xFB
0105 BB88 OUT P18,R24
(0103) }
(0104) SCK=1;
0106 B388 IN R24,P18
0107 6082 ORI R24,2
0108 BB88 OUT P18,R24
(0105) DATA_BUF=DATA_BUF<<1;
0109 90200156 LDS R2,_DATA_BUF
010B 0C22 LSL R2
010C 92200156 STS R2,_DATA_BUF
(0106) SCK=0;
010E B388 IN R24,P18
010F 7F8D ANDI R24,0xFD
0110 BB88 OUT P18,R24
0111 9543 INC R20
0112 3048 CPI R20,0x8
0113 F338 BCS 0x00FB
(0107) }
(0108) }
0114 940E0527 CALL pop_gset1
0116 9508 RET
_Delay:
i --> R20
n --> R16
0117 940E0524 CALL push_gset1
FILE: E:\PQ-1A\我的AVR\新建文件夹\无线模拟\NRF905.C
(0001) #include <iom128v.h>
(0002) #include <iom128.h>
(0003) #include <macros.h>
(0004) //#include <BIT.h>
(0005) #include "NRF905.h"
(0006) #include "spi.c"
(0007)
(0008) #define TX_EN _PD6
(0009) #define TRX_CE _PD4
(0010) #define PWR_UP _PD2
(0011) #define CD READ_PD5
(0012) #define AM READ_PD7
(0013) #define DR READ_PD3
(0014)
(0015) #define uchar unsigned char
(0016) #define uint unsigned int
(0017)
(0018) unsigned char TxAddress[4]={TX_ADDR_Byte0,TX_ADDR_Byte1,TX_ADDR_Byte2,TX_ADDR_Byte3};
(0019)
(0020) RFConfig RxTxConf =
(0021) {
(0022) 10,
(0023) RFConfig_Byte0, RFConfig_Byte1, RFConfig_Byte2, RFConfig_Byte3, RFConfig_Byte4,
(0024) RFConfig_Byte5, RFConfig_Byte6, RFConfig_Byte7, RFConfig_Byte8, RFConfig_Byte9
(0025) };
(0026)
(0027)
(0028) static void Delay(uchar n)
(0029) {
0119 C009 RJMP 0x0123
(0030) uint i;
(0031) while(n--)
(0032) for(i=0;i<1000;i++);
011A 2744 CLR R20
011B 2755 CLR R21
011C C002 RJMP 0x011F
011D 5F4F SUBI R20,0xFF
011E 4F5F SBCI R21,0xFF
011F 3E48 CPI R20,0xE8
0120 E0E3 LDI R30,3
0121 075E CPC R21,R30
0122 F3D0 BCS 0x011D
0123 2E20 MOV R2,R16
0124 2433 CLR R3
0125 5001 SUBI R16,1
0126 2022 TST R2
0127 F791 BNE 0x011A
(0033) }
0128 940E0527 CALL pop_gset1
012A 9508 RET
(0034)
(0035) /*******************************************************************************************/
(0036) //function InitIO(); 初始化IO
(0037) /*******************************************************************************************/
(0038) void nRF905Init(void)
(0039) {
(0040) /*SPI init*/
(0041) DDRD|=BIT(2)|BIT(4)|BIT(6);
_nRF905Init:
012B B381 IN R24,P11
012C 6584 ORI R24,0x54
012D BB81 OUT P11,R24
(0042) DDRD&=~(BIT(5)|BIT(7)|BIT(3));
012E B381 IN R24,P11
012F 7587 ANDI R24,0x57
0130 BB81 OUT P11,R24
(0043) SpiInit();
0131 DF94 RCALL _SpiInit
(0044) //CSN=1; // Spi disable
(0045) //SCK=0; // Spi clock line init high
(0046) DR=1; // Init DR for input
0132 B380 IN R24,P10
0133 6088 ORI R24,0x8
0134 BB80 OUT P10,R24
(0047) AM=1; // Init AM for input
0135 B380 IN R24,P10
0136 6880 ORI R24,0x80
0137 BB80 OUT P10,R24
(0048) PWR_UP=1; // nRF905 power on
0138 B382 IN R24,P12
0139 6084 ORI R24,4
013A BB82 OUT P12,R24
(0049) Delay(4);
013B E004 LDI R16,4
013C DFDA RCALL _Delay
(0050) TRX_CE=0; // Set nRF905 in standby mode
013D B382 IN R24,P12
013E 7E8F ANDI R24,0xEF
013F BB82 OUT P12,R24
(0051) TX_EN=0; // set radio in Rx mode
0140 B382 IN R24,P12
0141 7B8F ANDI R24,0xBF
0142 BB82 OUT P12,R24
(0052)
(0053) //====================
(0054) /*
(0055) TX_EN_DDR = 1;
(0056) TRX_CE_DDR = 1;
(0057) PWR_UP_DDR = 1;
(0058) DR_DDR = 0;
(0059) CD_DDR = 0;
(0060) */
(0061) //====================
(0062) }
0143 9508 RET
_WriteTxAddress:
len --> R20
i --> R22
0144 940E053B CALL push_gset2
(0063)
(0064) /*******************************************************************************************/
(0065) //function WriteTxAddress(); 写入目标地址
(0066) /*******************************************************************************************/
(0067) void WriteTxAddress(void)
(0068) {
(0069) unsigned char i;
(0070) unsigned char len= (RxTxConf.buf[2]>>4);
0146 91400111 LDS R20,0x111
0148 9542 SWAP R20
0149 704F ANDI R20,0xF
(0071) CSN=0; // Spi enable for write a spi command
014A B388 IN R24,P18
014B 7F8E ANDI R24,0xFE
014C BB88 OUT P18,R24
(0072) SpiWrite(WTA); // Write address command
014D E202 LDI R16,0x22
014E DFA6 RCALL _SpiWrite
(0073) //for (i=0;i<TX_AWF;i++)
(0074) for (i=0;i<len;i++)
014F 2766 CLR R22
0150 C009 RJMP 0x015A
(0075) {
(0076) SpiWrite(TxAddress[i]);
0151 E08A LDI R24,0xA
0152 E091 LDI R25,1
0153 2FE6 MOV R30,R22
0154 27FF CLR R31
0155 0FE8 ADD R30,R24
0156 1FF9 ADC R31,R25
0157 8100 LDD R16,0+Z
0158 DF9C RCALL _SpiWrite
0159 9563 INC R22
015A 1764 CP R22,R20
015B F3A8 BCS 0x0151
(0077) //delayus(10);
(0078) }
(0079) CSN=1; // Spi disable
015C B388 IN R24,P18
015D 6081 ORI R24,1
015E BB88 OUT P18,R24
(0080) }
015F 940E054B CALL pop_gset2
0161 9508 RET
_Config905:
i --> R20
0162 940E0524 CALL push_gset1
(0081)
(0082) /*******************************************************************************************/
(0083) //function Config905(); //配置905寄存器
(0084) /*******************************************************************************************/
(0085) void Config905(void)
(0086) {
(0087) uchar i;
(0088) CSN=0; // Spi enable for write a spi command
0164 B388 IN R24,P18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -