📄 tx.lst
字号:
(0199) }
(0200)
(0201) disable_spi(); //禁止SPI口
0136 940E02A7 CALL _disable_spi
(0202) return statuevalue;
0138 2F04 MOV R16,R20
0139 940E02AC CALL pop_gset4
013B 9508 RET
_Write_RAM_Byte:
statuevalue --> R20
p_Data --> Y+4
AddrL --> R22
AddrH --> R20
013C 940E02B5 CALL push_gset2
013E 2F62 MOV R22,R18
013F 2F40 MOV R20,R16
(0203) }
(0204)
(0205) /*******************************************
(0206) *函数功能:写一字节RAM
(0207) *输入参数:p_Data:要写入的数据
(0208) AddrH:在选定的RAM存储块中确定RAM地址
(0209) AddrL:选择RAM存储块
(0210) *输出参数:无
(0211) *返 回 值:状态寄存器的值
(0212) ********************************************/
(0213) unsigned char Write_RAM_Byte(unsigned char AddrH,unsigned char AddrL,unsigned char p_Data)
(0214) {
(0215) unsigned char statuevalue;
(0216) AddrH|=0X80; //访问RAM位置1
0140 6840 ORI R20,0x80
(0217) AddrL<<=6;
0141 0F66 LSL R22
0142 0F66 LSL R22
0143 0F66 LSL R22
0144 0F66 LSL R22
0145 0F66 LSL R22
0146 0F66 LSL R22
(0218) AddrL&=0XDF; //读写操作位置0,表示写操作
0147 7D6F ANDI R22,0xDF
(0219)
(0220) enable_spi(); //使能SPI口
0148 940E02A5 CALL _enable_spi
(0221) statuevalue=SpiWrite(AddrH);
014A 2F04 MOV R16,R20
014B 940E029A CALL _SpiWrite
014D 2F40 MOV R20,R16
(0222) SpiWrite(AddrL);
014E 2F06 MOV R16,R22
014F 940E029A CALL _SpiWrite
(0223)
(0224) SpiWrite(p_Data);
0151 810C LDD R16,Y+4
0152 940E029A CALL _SpiWrite
(0225)
(0226) disable_spi(); //禁止SPI口
0154 940E02A7 CALL _disable_spi
(0227) return statuevalue;
0156 2F04 MOV R16,R20
0157 940E02A9 CALL pop_gset2
0159 9508 RET
_Read_RAM:
statuevalue --> R20
i --> R22
p_Data --> R10
Data_Num --> R12
AddrL --> R22
AddrH --> R20
015A 940E02B1 CALL push_gset4
015C 2F62 MOV R22,R18
015D 2F40 MOV R20,R16
015E 84C8 LDD R12,Y+8
015F 84AA LDD R10,Y+10
0160 84BB LDD R11,Y+11
(0228) }
(0229)
(0230) /*******************************************
(0231) *函数功能:读RAM
(0232) *输入参数:p_Data:存储数据的缓存首地址;
(0233) Data_Num:要读取的字节数
(0234) AddrH:在选定的RAM存储块中确定RAM地址
(0235) AddrL:选择RAM存储块
(0236) *输出参数:无
(0237) *返 回 值:状态寄存器的值
(0238) ********************************************/
(0239) unsigned char Read_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
(0240) {
(0241) unsigned char statuevalue,i;
(0242) AddrH|=0X80; //访问RAM位置1
0161 6840 ORI R20,0x80
(0243) AddrL<<=6;
0162 0F66 LSL R22
0163 0F66 LSL R22
0164 0F66 LSL R22
0165 0F66 LSL R22
0166 0F66 LSL R22
0167 0F66 LSL R22
(0244) AddrL|=0X20; //读写操作位置1,表示读操作
0168 6260 ORI R22,0x20
(0245)
(0246) enable_spi(); //使能SPI口
0169 940E02A5 CALL _enable_spi
(0247) statuevalue=SpiWrite(AddrH);
016B 2F04 MOV R16,R20
016C 940E029A CALL _SpiWrite
016E 2F40 MOV R20,R16
(0248) SpiWrite(AddrL);
016F 2F06 MOV R16,R22
0170 940E029A CALL _SpiWrite
(0249)
(0250) for (i=0;i<Data_Num;i++)
0172 2766 CLR R22
0173 C009 RJMP 0x017D
(0251) {
(0252) *(p_Data+i)=SpiWrite(0xff);
0174 EF0F LDI R16,0xFF
0175 940E029A CALL _SpiWrite
0177 2FE6 MOV R30,R22
0178 27FF CLR R31
0179 0DEA ADD R30,R10
017A 1DFB ADC R31,R11
017B 8300 STD Z+0,R16
017C 9563 INC R22
017D 156C CP R22,R12
017E F3A8 BCS 0x0174
(0253) }
(0254)
(0255) disable_spi(); //禁止SPI口
017F 940E02A7 CALL _disable_spi
(0256) return statuevalue;
0181 2F04 MOV R16,R20
0182 940E02AC CALL pop_gset4
0184 9508 RET
_Read_RAM_Byte:
readvalue --> R20
AddrL --> R20
AddrH --> R22
0185 940E02B5 CALL push_gset2
0187 2F42 MOV R20,R18
0188 2F60 MOV R22,R16
(0257) }
(0258)
(0259) /*******************************************
(0260) *函数功能:读一字节RAM
(0261) *输入参数:AddrH:在选定的RAM存储块中确定RAM地址
(0262) AddrL:选择RAM存储块
(0263) *输出参数:无
(0264) *返 回 值:读取的数据值
(0265) ********************************************/
(0266) unsigned char Read_RAM_Byte(unsigned char AddrH,unsigned char AddrL)
(0267) {
(0268) unsigned char readvalue;
(0269) AddrH|=0X80; //访问RAM位置1
0189 6860 ORI R22,0x80
(0270) AddrL<<=6;
018A 0F44 LSL R20
018B 0F44 LSL R20
018C 0F44 LSL R20
018D 0F44 LSL R20
018E 0F44 LSL R20
018F 0F44 LSL R20
(0271) AddrL|=0X20; //读写操作位置1,表示读操作
0190 6240 ORI R20,0x20
(0272)
(0273) enable_spi(); //使能SPI口
0191 940E02A5 CALL _enable_spi
(0274) SpiWrite(AddrH);
0193 2F06 MOV R16,R22
0194 940E029A CALL _SpiWrite
(0275) SpiWrite(AddrL);
0196 2F04 MOV R16,R20
0197 940E029A CALL _SpiWrite
(0276)
(0277) readvalue=SpiWrite(0xff);
0199 EF0F LDI R16,0xFF
019A 940E029A CALL _SpiWrite
019C 2F40 MOV R20,R16
(0278)
(0279) disable_spi(); //禁止SPI口
019D 940E02A7 CALL _disable_spi
(0280) return readvalue;
019F 2F04 MOV R16,R20
01A0 940E02A9 CALL pop_gset2
01A2 9508 RET
(0281) }
(0282)
(0283) /*******************************************
(0284) *函数功能:关闭电压校准器模式
(0285) *输入参数:无
(0286) *输出参数:无
(0287) *返 回 值:无
(0288) ********************************************/
(0289) void PowerOff(void)
(0290) {
(0291) PORTE &=~(1<<VREGEN); //禁止电压校准器
_PowerOff:
01A3 981B CBI 0x03,3
01A4 9508 RET
_PwOff_PwDown:
01A5 9721 SBIW R28,1
(0292) }
(0293)
(0294) /*******************************************
(0295) *函数功能:从电压校准器关闭模式转换到掉电模式
(0296) *输入参数:无
(0297) *输出参数:无
(0298) *返 回 值:无
(0299) ********************************************/
(0300) void PwOff_PwDown(void)
(0301) {
(0302) PORTE |=1<<VREGEN; //启动电压校准器
01A6 9A1B SBI 0x03,3
(0303) Delay600us();
01A7 940E0206 CALL _Delay600us
(0304)
(0305) enable_spi(); //使能SPI口
01A9 940E02A5 CALL _enable_spi
(0306) Write_ConfigureWord(MAIN,0x78,0x00); //先将reset位设置为低
01AB 2422 CLR R2
01AC 8228 STD Y+0,R2
01AD E728 LDI R18,0x78
01AE E100 LDI R16,0x10
01AF DECF RCALL _Write_ConfigureWord
(0307) Write_ConfigureWord(MAIN,0xf8,0x00); //先将reset位设置为高,完成复位过程
01B0 2422 CLR R2
01B1 8228 STD Y+0,R2
01B2 EF28 LDI R18,0xF8
01B3 E100 LDI R16,0x10
01B4 DECA RCALL _Write_ConfigureWord
(0308) disable_spi(); //禁止SPI口
01B5 940E02A7 CALL _disable_spi
01B7 9621 ADIW R28,1
01B8 9508 RET
(0309)
(0310) }
(0311)
(0312) /*******************************************
(0313) *函数功能:其他任何模式转换到掉电模式
(0314) *输入参数:无
(0315) *输出参数:无
(0316) *返 回 值:无
(0317) ********************************************/
(0318) void AllStates_PwDown(void)
(0319) {
(0320) Write_Command(SXOSCOFF);
_AllStates_PwDown:
01B9 E007 LDI R16,7
01BA DEAD RCALL _Write_Command
01BB 9508 RET
_PwDown_Idle:
statue --> R20
01BC 940E02B7 CALL push_gset1
(0321) }
(0322)
(0323) /*******************************************
(0324) *函数功能:从掉电模式转换到空闲模式
(0325) *输入参数:无
(0326) *输出参数:无
(0327) *返 回 值:无
(0328) ********************************************/
(0329) void PwDown_Idle(void)
(0330) {
(0331) unsigned char statue;
(0332) Write_Command(SXOSCON);
01BE E001 LDI R16,1
01BF DEA8 RCALL _Write_Command
01C0 C005 RJMP 0x01C6
(0333)
(0334) while(1) //等待晶体振荡器稳定运行
(0335) {
(0336) statue=Read_Status();
01C1 DEB5 RCALL _Read_Status
01C2 2F40 MOV R20,R16
(0337) if((statue&(1<<XOSC16M_STABLE))!=0)
01C3 FF06 SBRS R16,6
01C4 C001 RJMP 0x01C6
(0338) {
(0339) break;
01C5 C001 RJMP 0x01C7
01C6 CFFA RJMP 0x01C1
01C7 940E02BA CALL pop_gset1
01C9 9508 RET
(0340) }
(0341) }
(0342) }
(0343)
(0344) /*******************************************
(0345) *函数功能:从其他任何模式转换到空闲模式
(0346) *输入参数:无
(0347) *输出参数:无
(0348) *返 回 值:无
(0349) ********************************************/
(0350) void AllStates_Idle(void)
(0351) {
(0352) Write_Command(SRFOFF);
_AllStates_Idle:
01CA E006 LDI R16,6
01CB DE9C RCALL _Write_Command
01CC 9508 RET
(0353) }
(0354)
(0355) /*******************************************
(0356) *函数功能:从空闲模式启动发送
(0357) *输入参数:无
(0358) *输出参数:无
(0359) *返 回 值:无
(0360) ********************************************/
(0361) void Idle_Tx(void)
(0362) {
(0363) Write_Command(STXON);
_Idle_Tx:
01CD E004 LDI R16,4
01CE DE99 RCALL _Write_Command
01CF 9508 RET
(0364) }
(0365)
(0366) /*******************************************
(0367) *函数功能:从接收状态转换到发送模式
(0368) *输入参数:无
(0369) *输出参数:无
(0370) *返 回 值:无
(0371) ********************************************/
(0372) void Rx_Tx(void)
(0373) {
_Rx_Tx:
01D0 C005 RJMP 0x01D6
(0374) while(1)
(0375) {
(0376) if(PINA&(1<<CCA)!=0) //信道空闲
01D1 9BC8 SBIS 0x19,0
01D2 C003 RJMP 0x01D6
(0377) {
(0378) Write_Command(STXONCCA);
01D3 E005 LDI R16,5
01D4 DE93 RCALL _Write_Command
(0379) break;
01D5 C001 RJMP 0x01D7
01D6 CFFA RJMP 0x01D1
01D7 9508 RET
(0380) }
(0381) }
(0382) }
(0383)
(0384) /*******************************************
(0385) *函数功能:从空闲模式启动接收模式
(0386) *输入参数:无
(0387) *输出参数:无
(0388) *返 回 值:无
(0389) ********************************************/
(0390) void Idle_Rx(void)
(0391) {
(0392) Write_Command(SRXON);
_Idle_Rx:
01D8 E003 LDI R16,3
01D9 DE8E RCALL _Write_Command
01DA 9508 RET
_Set_Configure:
RegisterValueL --> R22
RegisterValueH --> R20
01DB 940E02B5 CALL push_gset2
01DD 9721 SBIW R28,1
(0393) }
(0394)
(0395) /*******************************************
(0396) *函数功能:设置配置字(用于初始化)
(0397) *输入参数:无
(0398) *输出参数:无
(0399) *返 回 值:无
(0400) ********************************************/
(0401) void Set_Configure(void)
(0402) {
(0403) unsigned char RegisterValueH,RegisterValueL;
(0404) PowerOff(); //???????????????????????????????
01DE DFC4 RCALL _PowerOff
(0405) PwOff_PwDown(); //在power down模式下设置配置寄存器
01DF DFC5 RCALL _PwOff_PwDown
(0406)
(0407) enable_spi(); //使能SPI口
01E0 940E02A5 CALL _enable_spi
(0408)
(0409) RegisterValueH=0X0A;
01E2 E04A LDI R20,0xA
(0410) RegisterValueL=0XE2; //地址认证使能,自动应答不使能
01E3 EE62 LDI R22,0xE2
(0411) Write_ConfigureWord(MDMCTRL0,RegisterValueH,RegisterValueL);
01E4 8368 STD Y+0,R22
01E5 2F24 MOV R18,R20
01E6 E101 LDI R16,0x11
01E7 DE97 RCALL _Write_ConfigureWord
(0412)
(0413) RegisterValueH=0X05;
01E8 E045 LDI R20,5
(0414) RegisterValueL=0X00;
01E9 2766 CLR R22
(0415) Write_ConfigureWord(MDMCTRL1,RegisterValueH,RegisterValueL);
01EA 8368 STD Y+0,R22
01EB 2F24 MOV R18,R20
01EC E102 LDI R16,0x12
01ED DE91 RCALL _Write_ConfigureWord
(0416)
(0417) // RegisterValueH=-50;
(0418) // RegisterValueL=0X00;
(0419) // Write_ConfigureWord(RSSI,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0420)
(0421) RegisterValueH=0x41;
01EE E441 LDI R20,0x41
(0422) RegisterValueL=0X92; //2.45GHz
01EF E962 LDI R22,0x92
(0423) Write_ConfigureWord(FSCTRL,RegisterValueH,RegisterValueL);
01F0 8368 STD Y+0,R22
01F1 2F24 MOV R18,R20
01F2 E108 LDI R16,0x18
01F3 DE8B RCALL _Write_ConfigureWord
(0424)
(0425) RegisterValueH=0x01;
01F4 E041 LDI R20,1
(0426) RegisterValueL=0Xe4; //安全模式不使能
01F5 EE64 LDI R22,0xE4
(0427) Write_ConfigureWord(SECCTRL0,RegisterValueH,RegisterValueL);
01F6 8368 STD Y+0,R22
01F7 2F24 MOV R18,R20
01F8 E109 LDI R16,0x19
01F9 DE85 RCALL _Write_ConfigureWord
(0428)
(0429) //RegisterValueH=128;
(0430) //RegisterValueL=128;
(0431) //Write_ConfigureWord(SECCTRL1,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0432)
(0433) RegisterValueH=0;
01FA 2744 CLR R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -