📄 rx.lst
字号:
0123 940E0289 CALL _enable_spi
(0193) statuevalue=SpiWrite(AddrH);
0125 2F04 MOV R16,R20
0126 940E0280 CALL _SpiWrite
0128 2F40 MOV R20,R16
(0194) SpiWrite(AddrL);
0129 2F06 MOV R16,R22
012A 940E0280 CALL _SpiWrite
(0195)
(0196) for (i=0;i<Data_Num;i++)
012C 2766 CLR R22
012D C008 RJMP 0x0136
(0197) {
(0198) SpiWrite(*(p_Data+i));
012E 2FE6 MOV R30,R22
012F 27FF CLR R31
0130 0DEA ADD R30,R10
0131 1DFB ADC R31,R11
0132 8100 LDD R16,Z+0
0133 940E0280 CALL _SpiWrite
0135 9563 INC R22
0136 156C CP R22,R12
0137 F3B0 BCS 0x012E
(0199) }
(0200)
(0201) disable_spi(); //禁止SPI口
0138 940E028B CALL _disable_spi
(0202) return statuevalue;
013A 2F04 MOV R16,R20
013B 940E0290 CALL pop_gset4
013D 9508 RET
_Write_RAM_Byte:
statuevalue --> R20
p_Data --> Y+4
AddrL --> R22
AddrH --> R20
013E 940E0299 CALL push_gset2
0140 2F62 MOV R22,R18
0141 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
0142 6840 ORI R20,0x80
(0217) AddrL<<=6;
0143 0F66 LSL R22
0144 0F66 LSL R22
0145 0F66 LSL R22
0146 0F66 LSL R22
0147 0F66 LSL R22
0148 0F66 LSL R22
(0218) AddrL&=0XDF; //读写操作位置0,表示写操作
0149 7D6F ANDI R22,0xDF
(0219)
(0220) enable_spi(); //使能SPI口
014A 940E0289 CALL _enable_spi
(0221) statuevalue=SpiWrite(AddrH);
014C 2F04 MOV R16,R20
014D 940E0280 CALL _SpiWrite
014F 2F40 MOV R20,R16
(0222) SpiWrite(AddrL);
0150 2F06 MOV R16,R22
0151 940E0280 CALL _SpiWrite
(0223)
(0224) SpiWrite(p_Data);
0153 810C LDD R16,Y+4
0154 940E0280 CALL _SpiWrite
(0225)
(0226) disable_spi(); //禁止SPI口
0156 940E028B CALL _disable_spi
(0227) return statuevalue;
0158 2F04 MOV R16,R20
0159 940E028D CALL pop_gset2
015B 9508 RET
_Read_RAM:
statuevalue --> R20
i --> R22
p_Data --> R10
Data_Num --> R12
AddrL --> R22
AddrH --> R20
015C 940E0295 CALL push_gset4
015E 2F62 MOV R22,R18
015F 2F40 MOV R20,R16
0160 84C8 LDD R12,Y+8
0161 84AA LDD R10,Y+10
0162 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
0163 6840 ORI R20,0x80
(0243) AddrL<<=6;
0164 0F66 LSL R22
0165 0F66 LSL R22
0166 0F66 LSL R22
0167 0F66 LSL R22
0168 0F66 LSL R22
0169 0F66 LSL R22
(0244) AddrL|=0X20; //读写操作位置1,表示读操作
016A 6260 ORI R22,0x20
(0245)
(0246) enable_spi(); //使能SPI口
016B 940E0289 CALL _enable_spi
(0247) statuevalue=SpiWrite(AddrH);
016D 2F04 MOV R16,R20
016E 940E0280 CALL _SpiWrite
0170 2F40 MOV R20,R16
(0248) SpiWrite(AddrL);
0171 2F06 MOV R16,R22
0172 940E0280 CALL _SpiWrite
(0249)
(0250) for (i=0;i<Data_Num;i++)
0174 2766 CLR R22
0175 C009 RJMP 0x017F
(0251) {
(0252) *(p_Data+i)=SpiWrite(0xff);
0176 EF0F LDI R16,0xFF
0177 940E0280 CALL _SpiWrite
0179 2FE6 MOV R30,R22
017A 27FF CLR R31
017B 0DEA ADD R30,R10
017C 1DFB ADC R31,R11
017D 8300 STD Z+0,R16
017E 9563 INC R22
017F 156C CP R22,R12
0180 F3A8 BCS 0x0176
(0253) }
(0254)
(0255) disable_spi(); //禁止SPI口
0181 940E028B CALL _disable_spi
(0256) return statuevalue;
0183 2F04 MOV R16,R20
0184 940E0290 CALL pop_gset4
0186 9508 RET
_Read_RAM_Byte:
readvalue --> R20
AddrL --> R20
AddrH --> R22
0187 940E0299 CALL push_gset2
0189 2F42 MOV R20,R18
018A 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
018B 6860 ORI R22,0x80
(0270) AddrL<<=6;
018C 0F44 LSL R20
018D 0F44 LSL R20
018E 0F44 LSL R20
018F 0F44 LSL R20
0190 0F44 LSL R20
0191 0F44 LSL R20
(0271) AddrL|=0X20; //读写操作位置1,表示读操作
0192 6240 ORI R20,0x20
(0272)
(0273) enable_spi(); //使能SPI口
0193 940E0289 CALL _enable_spi
(0274) SpiWrite(AddrH);
0195 2F06 MOV R16,R22
0196 940E0280 CALL _SpiWrite
(0275) SpiWrite(AddrL);
0198 2F04 MOV R16,R20
0199 940E0280 CALL _SpiWrite
(0276)
(0277) readvalue=SpiWrite(0xff);
019B EF0F LDI R16,0xFF
019C 940E0280 CALL _SpiWrite
019E 2F40 MOV R20,R16
(0278)
(0279) disable_spi(); //禁止SPI口
019F 940E028B CALL _disable_spi
(0280) return readvalue;
01A1 2F04 MOV R16,R20
01A2 940E028D CALL pop_gset2
01A4 9508 RET
(0281) }
(0282)
(0283) /*******************************************
(0284) *函数功能:关闭电压校准器模式
(0285) *输入参数:无
(0286) *输出参数:无
(0287) *返 回 值:无
(0288) ********************************************/
(0289) void PowerOff(void)
(0290) {
(0291) PORTE &=~(1<<VREGEN); //禁止电压校准器
_PowerOff:
01A5 981B CBI 0x03,3
01A6 9508 RET
_PwOff_PwDown:
01A7 9721 SBIW R28,1
(0292) }
(0293)
(0294) /*******************************************
(0295) *函数功能:从电压校准器关闭模式转换到掉电模式
(0296) *输入参数:无
(0297) *输出参数:无
(0298) *返 回 值:无
(0299) ********************************************/
(0300) void PwOff_PwDown(void)
(0301) {
(0302) PORTE |=1<<VREGEN; //启动电压校准器
01A8 9A1B SBI 0x03,3
(0303) Delay600us();
01A9 940E0208 CALL _Delay600us
(0304)
(0305) enable_spi(); //使能SPI口
01AB 940E0289 CALL _enable_spi
(0306) Write_ConfigureWord(MAIN,0x78,0x00); //先将reset位设置为低
01AD 2422 CLR R2
01AE 8228 STD Y+0,R2
01AF E728 LDI R18,0x78
01B0 E100 LDI R16,0x10
01B1 DECF RCALL _Write_ConfigureWord
(0307) Write_ConfigureWord(MAIN,0xf8,0x00); //先将reset位设置为高,完成复位过程
01B2 2422 CLR R2
01B3 8228 STD Y+0,R2
01B4 EF28 LDI R18,0xF8
01B5 E100 LDI R16,0x10
01B6 DECA RCALL _Write_ConfigureWord
(0308) disable_spi(); //禁止SPI口
01B7 940E028B CALL _disable_spi
01B9 9621 ADIW R28,1
01BA 9508 RET
(0309)
(0310) }
(0311)
(0312) /*******************************************
(0313) *函数功能:其他任何模式转换到掉电模式
(0314) *输入参数:无
(0315) *输出参数:无
(0316) *返 回 值:无
(0317) ********************************************/
(0318) void AllStates_PwDown(void)
(0319) {
(0320) Write_Command(SXOSCOFF);
_AllStates_PwDown:
01BB E007 LDI R16,7
01BC DEAD RCALL _Write_Command
01BD 9508 RET
_PwDown_Idle:
statue --> R20
01BE 940E029B 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);
01C0 E001 LDI R16,1
01C1 DEA8 RCALL _Write_Command
01C2 C005 RJMP 0x01C8
(0333)
(0334) while(1) //等待晶体振荡器稳定运行
(0335) {
(0336) statue=Read_Status();
01C3 DEB5 RCALL _Read_Status
01C4 2F40 MOV R20,R16
(0337) if((statue&(1<<XOSC16M_STABLE))!=0)
01C5 FF06 SBRS R16,6
01C6 C001 RJMP 0x01C8
(0338) {
(0339) break;
01C7 C001 RJMP 0x01C9
01C8 CFFA RJMP 0x01C3
01C9 940E029E CALL pop_gset1
01CB 9508 RET
(0340) }
(0341) }
(0342) }
(0343)
(0344) /*******************************************
(0345) *函数功能:从其他任何模式转换到空闲模式
(0346) *输入参数:无
(0347) *输出参数:无
(0348) *返 回 值:无
(0349) ********************************************/
(0350) void AllStates_Idle(void)
(0351) {
(0352) Write_Command(SRFOFF);
_AllStates_Idle:
01CC E006 LDI R16,6
01CD DE9C RCALL _Write_Command
01CE 9508 RET
(0353) }
(0354)
(0355) /*******************************************
(0356) *函数功能:从空闲模式启动发送
(0357) *输入参数:无
(0358) *输出参数:无
(0359) *返 回 值:无
(0360) ********************************************/
(0361) void Idle_Tx(void)
(0362) {
(0363) Write_Command(STXON);
_Idle_Tx:
01CF E004 LDI R16,4
01D0 DE99 RCALL _Write_Command
01D1 9508 RET
(0364) }
(0365)
(0366) /*******************************************
(0367) *函数功能:从接收状态转换到发送模式
(0368) *输入参数:无
(0369) *输出参数:无
(0370) *返 回 值:无
(0371) ********************************************/
(0372) void Rx_Tx(void)
(0373) {
_Rx_Tx:
01D2 C005 RJMP 0x01D8
(0374) while(1)
(0375) {
(0376) if((PINA&(1<<CCA))!=0) //信道空闲
01D3 9BC9 SBIS 0x19,1
01D4 C003 RJMP 0x01D8
(0377) {
(0378) Write_Command(STXONCCA);
01D5 E005 LDI R16,5
01D6 DE93 RCALL _Write_Command
(0379) break;
01D7 C001 RJMP 0x01D9
01D8 CFFA RJMP 0x01D3
01D9 9508 RET
(0380) }
(0381) }
(0382) }
(0383)
(0384) /*******************************************
(0385) *函数功能:从空闲模式启动接收模式
(0386) *输入参数:无
(0387) *输出参数:无
(0388) *返 回 值:无
(0389) ********************************************/
(0390) void Idle_Rx(void)
(0391) {
(0392) Write_Command(SRXON);
_Idle_Rx:
01DA E003 LDI R16,3
01DB DE8E RCALL _Write_Command
01DC 9508 RET
_Set_Configure:
RegisterValueL --> R22
RegisterValueH --> R20
01DD 940E0299 CALL push_gset2
01DF 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(); //???????????????????????????????
01E0 DFC4 RCALL _PowerOff
(0405) PwOff_PwDown(); //在power down模式下设置配置寄存器
01E1 DFC5 RCALL _PwOff_PwDown
(0406)
(0407) enable_spi(); //使能SPI口
01E2 940E0289 CALL _enable_spi
(0408)
(0409) RegisterValueH=0X0A;
01E4 E04A LDI R20,0xA
(0410) RegisterValueL=0XE2; //地址认证使能,自动应答不使能
01E5 EE62 LDI R22,0xE2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -