⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tx.lst

📁 该程序通过调试
💻 LST
📖 第 1 页 / 共 3 页
字号:
(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 + -