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

📄 rx.lst

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