📄 tx.lst
字号:
0133 9563 INC R22
0134 156C CP R22,R12
0135 F3B0 BCS 0x012C
(0187) }
(0188)
(0189) disable_spi(); //禁止SPI口
0136 940E02A7 CALL _disable_spi
(0190) 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
(0191) }
(0192)
(0193) /*******************************************
(0194) *函数功能:写一字节RAM
(0195) *输入参数:p_Data:要写入的数据
(0196) AddrH:在选定的RAM存储块中确定RAM地址
(0197) AddrL:选择RAM存储块
(0198) *输出参数:无
(0199) *返 回 值:状态寄存器的值
(0200) ********************************************/
(0201) unsigned char Write_RAM_Byte(unsigned char AddrH,unsigned char AddrL,unsigned char p_Data)
(0202) {
(0203) unsigned char statuevalue;
(0204) AddrH|=0X80; //访问RAM位置1
0140 6840 ORI R20,0x80
(0205) 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
(0206) AddrL&=0XDF; //读写操作位置0,表示写操作
0147 7D6F ANDI R22,0xDF
(0207)
(0208) enable_spi(); //使能SPI口
0148 940E02A5 CALL _enable_spi
(0209) statuevalue=SpiWrite(AddrH);
014A 2F04 MOV R16,R20
014B 940E029A CALL _SpiWrite
014D 2F40 MOV R20,R16
(0210) SpiWrite(AddrL);
014E 2F06 MOV R16,R22
014F 940E029A CALL _SpiWrite
(0211)
(0212) SpiWrite(p_Data);
0151 810C LDD R16,Y+4
0152 940E029A CALL _SpiWrite
(0213)
(0214) disable_spi(); //禁止SPI口
0154 940E02A7 CALL _disable_spi
(0215) 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
(0216) }
(0217)
(0218) /*******************************************
(0219) *函数功能:读RAM
(0220) *输入参数:p_Data:存储数据的缓存首地址;
(0221) Data_Num:要读取的字节数
(0222) AddrH:在选定的RAM存储块中确定RAM地址
(0223) AddrL:选择RAM存储块
(0224) *输出参数:无
(0225) *返 回 值:状态寄存器的值
(0226) ********************************************/
(0227) unsigned char Read_RAM(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data)
(0228) {
(0229) unsigned char statuevalue,i;
(0230) AddrH|=0X80; //访问RAM位置1
0161 6840 ORI R20,0x80
(0231) 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
(0232) AddrL|=0X20; //读写操作位置1,表示读操作
0168 6260 ORI R22,0x20
(0233)
(0234) enable_spi(); //使能SPI口
0169 940E02A5 CALL _enable_spi
(0235) statuevalue=SpiWrite(AddrH);
016B 2F04 MOV R16,R20
016C 940E029A CALL _SpiWrite
016E 2F40 MOV R20,R16
(0236) SpiWrite(AddrL);
016F 2F06 MOV R16,R22
0170 940E029A CALL _SpiWrite
(0237)
(0238) for (i=0;i<Data_Num;i++)
0172 2766 CLR R22
0173 C009 RJMP 0x017D
(0239) {
(0240) *(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
(0241) }
(0242)
(0243) disable_spi(); //禁止SPI口
017F 940E02A7 CALL _disable_spi
(0244) 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
(0245) }
(0246)
(0247) /*******************************************
(0248) *函数功能:读一字节RAM
(0249) *输入参数:AddrH:在选定的RAM存储块中确定RAM地址
(0250) AddrL:选择RAM存储块
(0251) *输出参数:无
(0252) *返 回 值:读取的数据值
(0253) ********************************************/
(0254) unsigned char Read_RAM_Byte(unsigned char AddrH,unsigned char AddrL)
(0255) {
(0256) unsigned char readvalue;
(0257) AddrH|=0X80; //访问RAM位置1
0189 6860 ORI R22,0x80
(0258) 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
(0259) AddrL|=0X20; //读写操作位置1,表示读操作
0190 6240 ORI R20,0x20
(0260)
(0261) enable_spi(); //使能SPI口
0191 940E02A5 CALL _enable_spi
(0262) SpiWrite(AddrH);
0193 2F06 MOV R16,R22
0194 940E029A CALL _SpiWrite
(0263) SpiWrite(AddrL);
0196 2F04 MOV R16,R20
0197 940E029A CALL _SpiWrite
(0264)
(0265) readvalue=SpiWrite(0xff);
0199 EF0F LDI R16,0xFF
019A 940E029A CALL _SpiWrite
019C 2F40 MOV R20,R16
(0266)
(0267) disable_spi(); //禁止SPI口
019D 940E02A7 CALL _disable_spi
(0268) return readvalue;
019F 2F04 MOV R16,R20
01A0 940E02A9 CALL pop_gset2
01A2 9508 RET
(0269) }
(0270)
(0271) /*******************************************
(0272) *函数功能:关闭电压校准器模式
(0273) *输入参数:无
(0274) *输出参数:无
(0275) *返 回 值:无
(0276) ********************************************/
(0277) void PowerOff(void)
(0278) {
(0279) PORTE &=~(1<<VREGEN); //禁止电压校准器
_PowerOff:
01A3 981B CBI 0x03,3
01A4 9508 RET
_PwOff_PwDown:
01A5 9721 SBIW R28,1
(0280) }
(0281)
(0282) /*******************************************
(0283) *函数功能:从电压校准器关闭模式转换到掉电模式
(0284) *输入参数:无
(0285) *输出参数:无
(0286) *返 回 值:无
(0287) ********************************************/
(0288) void PwOff_PwDown(void)
(0289) {
(0290) PORTE |=1<<VREGEN; //启动电压校准器
01A6 9A1B SBI 0x03,3
(0291) Delay600us();
01A7 940E0206 CALL _Delay600us
(0292)
(0293) enable_spi(); //使能SPI口
01A9 940E02A5 CALL _enable_spi
(0294) 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
(0295) 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
(0296) disable_spi(); //禁止SPI口
01B5 940E02A7 CALL _disable_spi
01B7 9621 ADIW R28,1
01B8 9508 RET
(0297)
(0298) }
(0299)
(0300) /*******************************************
(0301) *函数功能:其他任何模式转换到掉电模式
(0302) *输入参数:无
(0303) *输出参数:无
(0304) *返 回 值:无
(0305) ********************************************/
(0306) void AllStates_PwDown(void)
(0307) {
(0308) 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
(0309) }
(0310)
(0311) /*******************************************
(0312) *函数功能:从掉电模式转换到空闲模式
(0313) *输入参数:无
(0314) *输出参数:无
(0315) *返 回 值:无
(0316) ********************************************/
(0317) void PwDown_Idle(void)
(0318) {
(0319) unsigned char statue;
(0320) Write_Command(SXOSCON);
01BE E001 LDI R16,1
01BF DEA8 RCALL _Write_Command
01C0 C005 RJMP 0x01C6
(0321)
(0322) while(1) //等待晶体振荡器稳定运行
(0323) {
(0324) statue=Read_Status();
01C1 DEB5 RCALL _Read_Status
01C2 2F40 MOV R20,R16
(0325) if((statue&(1<<XOSC16M_STABLE))!=0)
01C3 FF06 SBRS R16,6
01C4 C001 RJMP 0x01C6
(0326) {
(0327) break;
01C5 C001 RJMP 0x01C7
01C6 CFFA RJMP 0x01C1
01C7 940E02BA CALL pop_gset1
01C9 9508 RET
(0328) }
(0329) }
(0330) }
(0331)
(0332) /*******************************************
(0333) *函数功能:从其他任何模式转换到空闲模式
(0334) *输入参数:无
(0335) *输出参数:无
(0336) *返 回 值:无
(0337) ********************************************/
(0338) void AllStates_Idle(void)
(0339) {
(0340) Write_Command(SRFOFF);
_AllStates_Idle:
01CA E006 LDI R16,6
01CB DE9C RCALL _Write_Command
01CC 9508 RET
(0341) }
(0342)
(0343) /*******************************************
(0344) *函数功能:从空闲模式启动发送
(0345) *输入参数:无
(0346) *输出参数:无
(0347) *返 回 值:无
(0348) ********************************************/
(0349) void Idle_Tx(void)
(0350) {
(0351) Write_Command(STXON);
_Idle_Tx:
01CD E004 LDI R16,4
01CE DE99 RCALL _Write_Command
01CF 9508 RET
(0352) }
(0353)
(0354) /*******************************************
(0355) *函数功能:从接收状态转换到发送模式
(0356) *输入参数:无
(0357) *输出参数:无
(0358) *返 回 值:无
(0359) ********************************************/
(0360) void Rx_Tx(void)
(0361) {
_Rx_Tx:
01D0 C005 RJMP 0x01D6
(0362) while(1)
(0363) {
(0364) if(PINA&(1<<CCA)!=0) //信道空闲
01D1 9BC8 SBIS 0x19,0
01D2 C003 RJMP 0x01D6
(0365) {
(0366) Write_Command(STXONCCA);
01D3 E005 LDI R16,5
01D4 DE93 RCALL _Write_Command
(0367) break;
01D5 C001 RJMP 0x01D7
01D6 CFFA RJMP 0x01D1
01D7 9508 RET
(0368) }
(0369) }
(0370) }
(0371)
(0372) /*******************************************
(0373) *函数功能:从空闲模式启动接收模式
(0374) *输入参数:无
(0375) *输出参数:无
(0376) *返 回 值:无
(0377) ********************************************/
(0378) void Idle_Rx(void)
(0379) {
(0380) 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
(0381) }
(0382)
(0383) /*******************************************
(0384) *函数功能:设置配置字(用于初始化)
(0385) *输入参数:无
(0386) *输出参数:无
(0387) *返 回 值:无
(0388) ********************************************/
(0389) void Set_Configure(void)
(0390) {
(0391) unsigned char RegisterValueH,RegisterValueL;
(0392) PowerOff(); //???????????????????????????????
01DE DFC4 RCALL _PowerOff
(0393) PwOff_PwDown(); //在power down模式下设置配置寄存器
01DF DFC5 RCALL _PwOff_PwDown
(0394)
(0395) enable_spi(); //使能SPI口
01E0 940E02A5 CALL _enable_spi
(0396)
(0397) RegisterValueH=0X0A;
01E2 E04A LDI R20,0xA
(0398) RegisterValueL=0XE2; //地址认证使能,自动应答不使能
01E3 EE62 LDI R22,0xE2
(0399) 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
(0400)
(0401) RegisterValueH=0X05;
01E8 E045 LDI R20,5
(0402) RegisterValueL=0X00;
01E9 2766 CLR R22
(0403) 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
(0404)
(0405) // RegisterValueH=-50;
(0406) // RegisterValueL=0X00;
(0407) // Write_ConfigureWord(RSSI,RegisterValueH,RegisterValueL); //???????????????????????调试时修改
(0408)
(0409) RegisterValueH=0x41;
01EE E441 LDI R20,0x41
(0410) RegisterValueL=0X92; //2.45GHz
01EF E962 LDI R22,0x92
(0411) Write_ConfigureWord(FSCTRL,RegisterValueH,RegisterValueL);
01F0 8368 STD Y+0,R22
01F1 2F24 MOV R18,R20
01F2 E108 LDI R16,0x18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -