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

📄 wdct.lst

📁 我写的atmega16驱动的nrf24l01程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    00FC BB8A      OUT	0x1A,R24
(0079) 	_NOP();_NOP();_NOP();
    00FD 0000      NOP
    00FE 0000      NOP
    00FF 0000      NOP
(0080) 	_NOP();_NOP();_NOP();
    0100 0000      NOP
    0101 0000      NOP
    0102 0000      NOP
(0081) 	_NOP();_NOP();_NOP();
    0103 0000      NOP
    0104 0000      NOP
    0105 0000      NOP
(0082) 	KeyCodeTemp=(KeyPIN&0x0f);
    0106 B309      IN	R16,0x19
    0107 700F      ANDI	R16,0xF
(0083) 
(0084) 	KeyCode+=KeyCodeTemp;						//键盘行列代码合并
    0108 0F20      ADD	R18,R16
(0085) 	
(0086) 
(0087) 	
(0088) //Led2FlashTimes=KeyCode;
(0089) 	for (i=0;i<16;)		//键值取得
    0109 2700      CLR	R16
    010A C010      RJMP	0x011B
(0090) 	{
(0091) 		if (KeyCode==KeycodeNum[i])
    010B E584      LDI	R24,0x54
    010C E090      LDI	R25,0
    010D 2FE0      MOV	R30,R16
    010E 27FF      CLR	R31
    010F 0FE8      ADD	R30,R24
    0110 1FF9      ADC	R31,R25
    0111 91E4      LPM	R30,0(Z)
    0112 172E      CP	R18,R30
    0113 F431      BNE	0x011A
(0092) 		{  	
(0093) 			KeyValue=i;
    0114 93000072  STS	_KeyValue,R16
(0094) 			bKeyGetted=0x55;
    0116 E585      LDI	R24,0x55
    0117 93800070  STS	_bKeyGetted,R24
(0095) 			break;
    0119 C003      RJMP	0x011D
(0096) 		}
(0097) 		i++;
    011A 9503      INC	R16
    011B 3100      CPI	R16,0x10
    011C F370      BCS	0x010B
(0098) 	}
(0099) }
    011D 9508      RET
_INT_Timer0:
    011E 938A      ST	R24,-Y
    011F B78F      IN	R24,0x3F
    0120 938A      ST	R24,-Y
FILE: D:\mywork\无绳电话\NRF2401\nRF24L01_atmega16\nrf24l01\int.c
(0001) //--------------------------------------------------------
(0002) //--------------------------------------------------------
(0003) void INT_Timer0(void)
(0004) {
(0005) 	TCNT0 = 0x06; //reload counter value
    0121 E086      LDI	R24,6
    0122 BF82      OUT	0x32,R24
(0006) }
    0123 9189      LD	R24,Y+
    0124 BF8F      OUT	0x3F,R24
    0125 9189      LD	R24,Y+
    0126 9518      RETI
_INT_Timer1:
    0127 940E0809  CALL	push_lset
(0007) void INT_Timer1(void)
(0008) {
(0009)  //TIMER1 has overflowed
(0010)  	TCNT1H = 0xf8;
    0129 EF88      LDI	R24,0xF8
    012A BD8D      OUT	0x2D,R24
(0011)  	TCNT1L = 0x2f;	
    012B E28F      LDI	R24,0x2F
    012C BD8C      OUT	0x2C,R24
(0012)  	bTime2ms=dTrue;
    012D E585      LDI	R24,0x55
    012E 93800068  STS	_bTime2ms,R24
(0013)  	
(0014) 	if(bBusy != dTrue)	INT_KeyTest();
    0130 9180006F  LDS	R24,_bBusy
    0132 3585      CPI	R24,0x55
    0133 F009      BEQ	0x0135
    0134 DF6B      RCALL	_INT_KeyTest
(0015) }
    0135 940E0820  CALL	pop_lset
    0137 9518      RETI
_INT_USART_RX:
    0138 922A      ST	R2,-Y
    0139 923A      ST	R3,-Y
    013A 938A      ST	R24,-Y
    013B 939A      ST	R25,-Y
    013C 93EA      ST	R30,-Y
    013D 93FA      ST	R31,-Y
    013E B62F      IN	R2,0x3F
    013F 922A      ST	R2,-Y
(0016) //--------------------------------------------------------
(0017) //--------------------------------------------------------
(0018) 
(0019) 
(0020) //--------------------------------------------------------
(0021) //--------------------------------------------------------
(0022) void INT_USART_RX(void)
(0023) {
(0024) 	if(bCom2Spi == dTrue)	return;
    0140 9180006E  LDS	R24,_bCom2Spi
    0142 3585      CPI	R24,0x55
    0143 F409      BNE	0x0145
    0144 C017      RJMP	0x015C
(0025) 	ComRxBuf[ComRxCount]=UDR;
    0145 E78B      LDI	R24,0x7B
    0146 E090      LDI	R25,0
    0147 91E00079  LDS	R30,_ComRxCount
    0149 27FF      CLR	R31
    014A 0FE8      ADD	R30,R24
    014B 1FF9      ADC	R31,R25
    014C B02C      IN	R2,0x0C
    014D 8220      STD	Z+0,R2
(0026) 	ComRxCount++;
    014E 91800079  LDS	R24,_ComRxCount
    0150 5F8F      SUBI	R24,0xFF
    0151 93800079  STS	_ComRxCount,R24
(0027) 	ComRxingTimeLimited=0;
    0153 2422      CLR	R2
    0154 2433      CLR	R3
    0155 92300078  STS	_ComRxingTimeLimited+1,R3
    0157 92200077  STS	_ComRxingTimeLimited,R2
(0028) 	bComRxing=dTrue;
    0159 E585      LDI	R24,0x55
    015A 9380006C  STS	_bComRxing,R24
(0029) }
    015C 9029      LD	R2,Y+
    015D BE2F      OUT	0x3F,R2
    015E 91F9      LD	R31,Y+
    015F 91E9      LD	R30,Y+
    0160 9199      LD	R25,Y+
    0161 9189      LD	R24,Y+
    0162 9039      LD	R3,Y+
    0163 9029      LD	R2,Y+
    0164 9518      RETI
_INT_USART_TX:
    0165 922A      ST	R2,-Y
    0166 923A      ST	R3,-Y
    0167 938A      ST	R24,-Y
    0168 93EA      ST	R30,-Y
    0169 93FA      ST	R31,-Y
    016A B62F      IN	R2,0x3F
    016B 922A      ST	R2,-Y
(0030) 
(0031) //--------------------------------------------------------
(0032) //--------------------------------------------------------
(0033) 
(0034) 
(0035) //--------------------------------------------------------
(0036) //--------------------------------------------------------
(0037) void INT_USART_TX(void)
(0038) {
(0039) 	if (ComTxCount>0)
    016C 2422      CLR	R2
    016D 9030007A  LDS	R3,_ComTxCount
    016F 1423      CP	R2,R3
    0170 F470      BCC	0x017F
(0040) 	{
(0041) 		ComTxCount--;
    0171 2D83      MOV	R24,R3
    0172 5081      SUBI	R24,1
    0173 9380007A  STS	_ComTxCount,R24
(0042) 		UDR=*PtComTx++;
    0175 91E00075  LDS	R30,_PtComTx
    0177 91F00076  LDS	R31,_PtComTx+1
    0179 9021      LD	R2,Z+
    017A 93F00076  STS	_PtComTx+1,R31
    017C 93E00075  STS	_PtComTx,R30
    017E B82C      OUT	0x0C,R2
(0043) 	}
(0044) }
    017F 9029      LD	R2,Y+
    0180 BE2F      OUT	0x3F,R2
    0181 91F9      LD	R31,Y+
    0182 91E9      LD	R30,Y+
    0183 9189      LD	R24,Y+
    0184 9039      LD	R3,Y+
    0185 9029      LD	R2,Y+
    0186 9518      RETI
(0045) //--------------------------------------------------------
(0046) //--------------------------------------------------------
(0047) void spi_stc_isr(void)
(0048) {
(0049)  //byte in SPDR has been sent/received
(0050) }
_spi_stc_isr:
    0187 9518      RETI
_INT_EX0:
    0188 938A      ST	R24,-Y
    0189 B78F      IN	R24,0x3F
    018A 938A      ST	R24,-Y
(0051) //--------------------------------------------------------
(0052) //--------------------------------------------------------
(0053) void INT_EX0(void)
(0054) {
(0055) 	bEx0Interrupt = dTrue;
    018B E585      LDI	R24,0x55
    018C 9380006A  STS	_bEx0Interrupt,R24
(0056) 	//_TurnOnLed2;
(0057) }
    018E 9189      LD	R24,Y+
    018F BF8F      OUT	0x3F,R24
    0190 9189      LD	R24,Y+
    0191 9518      RETI
_SPI_SendData:
  i                    --> R20
  No                   --> R22
  nrfRxBuf             --> R18
  nrfTxBuf             --> R16
    0192 940E07FD  CALL	push_gset2
    0194 816C      LDD	R22,Y+4
FILE: D:\mywork\无绳电话\NRF2401\nRF24L01_atmega16\nrf24l01\nrf24l01.c
(0001) //--------------------------------------------------------
(0002) //把nrfTxBuf中No个数据通过SPI总线发送出去
(0003) //--------------------------------------------------------
(0004) void  SPI_SendData(uchar *nrfTxBuf, uchar *nrfRxBuf, uchar No)
(0005) {
(0006) uchar i;
(0007) 
(0008)    	_ClrNRF_SS;
    0195 98C4      CBI	0x18,4
(0009) 
(0010)     bSpiTxing=dTrue;
    0196 E585      LDI	R24,0x55
    0197 9380006D  STS	_bSpiTxing,R24
(0011)     for ( i = 0; i < No; i++ )
    0199 2744      CLR	R20
    019A C011      RJMP	0x01AC
(0012)     {
(0013) 	    SPDR = nrfTxBuf[i];
    019B 2FE4      MOV	R30,R20
    019C 27FF      CLR	R31
    019D 0FE0      ADD	R30,R16
    019E 1FF1      ADC	R31,R17
    019F 8020      LDD	R2,Z+0
    01A0 B82F      OUT	0x0F,R2
    01A1 C001      RJMP	0x01A3
(0014) 	    while ((SPSR & 0x80) == 0) 	WDR();
    01A2 95A8      WDR
    01A3 9B77      SBIS	0x0E,7
    01A4 CFFD      RJMP	0x01A2
(0015) 	    nrfRxBuf[i] = SPDR;		                /* Flush the RxFIFO */
    01A5 2FE4      MOV	R30,R20
    01A6 27FF      CLR	R31
    01A7 0FE2      ADD	R30,R18
    01A8 1FF3      ADC	R31,R19
    01A9 B02F      IN	R2,0x0F
    01AA 8220      STD	Z+0,R2
    01AB 9543      INC	R20
    01AC 1746      CP	R20,R22
    01AD F368      BCS	0x019B
(0016)     }
(0017) 
(0018)     _SetNRF_SS;
    01AE 9AC4      SBI	0x18,4
(0019)     bSpiTxing=dFalse;
    01AF 2422      CLR	R2
    01B0 9220006D  STS	_bSpiTxing,R2
(0020) }
    01B2 940E07E0  CALL	pop_gset2
    01B4 9508      RET
_nRF_SendData:
  Length               --> R20
    01B5 940E07E6  CALL	push_gset1
    01B7 2F40      MOV	R20,R16
    01B8 9721      SBIW	R28,1
(0021) //--------------------------------------------------------
(0022) //--------------------------------------------------------
(0023) 
(0024) //--------------------------------------------------------
(0025) //把nrfTxDataBuf[1]到nrfTxDataBuf[length]数据发送出去
(0026) //--------------------------------------------------------
(0027) void    nRF_SendData(unsigned char Length)
(0028) {
(0029)     nrfTxBuf[0] = dRegister_Config+dCom_Write;
    01B9 E280      LDI	R24,0x20
    01BA 938002D3  STS	_nrfTxBuf,R24
(0030)     nrfTxBuf[1] = 0x0e;
    01BC E08E      LDI	R24,0xE
    01BD 938002D4  STS	_nrfTxBuf+1,R24
(0031)     SPI_SendData(nrfTxBuf, nrfRxBuf, 2);  
    01BF E082      LDI	R24,2
    01C0 8388      STD	Y+0,R24
    01C1 E02B      LDI	R18,0xB
    01C2 E032      LDI	R19,2
    01C3 ED03      LDI	R16,0xD3
    01C4 E012      LDI	R17,2
    01C5 DFCC      RCALL	_SPI_SendData
(0032) 
(0033) 	nrfTxDataBuf[0]=dCom_WriteData;
    01C6 EA80      LDI	R24,0xA0
    01C7 9380026F  STS	_nrfTxDataBuf,R24
(0034)     SPI_SendData(nrfTxDataBuf, nrfRxBuf, Length);       
    01C9 8348      STD	Y+0,R20
    01CA E02B      LDI	R18,0xB
    01CB E032      LDI	R19,2
    01CC E60F      LDI	R16,0x6F
    01CD E012      LDI	R17,2
    01CE DFC3      RCALL	_SPI_SendData
(0035)     
(0036)     nrfTxBuf[0] = dRegister_Status+dCom_Write;	// STATUS:状态寄存器
    01CF E287      LDI	R24,0x27
    01D0 938002D3  STS	_nrfTxBuf,R24
(0037)     nrfTxBuf[1] = 0x70;                       	// 清空各中断
    01D2 E780      LDI	R24,0x70
    01D3 938002D4  STS	_nrfTxBuf+1,R24
(0038)     SPI_SendData(nrfTxBuf, nrfRxBuf, 2);    
    01D5 E082      LDI	R24,2
    01D6 8388      STD	Y+0,R24
    01D7 E02B      LDI	R18,0xB
    01D8 E032      LDI	R19,2
    01D9 ED03      LDI	R16,0xD3
    01DA E012      LDI	R17,2
    01DB DFB6      RCALL	_SPI_SendData
(0039) 
(0040) 	_TurnOffLed1;
    01DC 9AAA      SBI	0x15,2
(0041)   
(0042)  	_SetNRF_CE;
    01DD 9AC3      SBI	0x18,3
(0043)  	_NOP();_NOP();_NOP();_NOP();
    01DE 0000      NOP
    01DF 0000      NOP
    01E0 0000      NOP
    01E1 0000      NOP
(0044)  	_NOP();_NOP();_NOP();_NOP();
    01E2 0000      NOP
    01E3 0000      NOP
    01E4 0000      NOP
    01E5 0000      NOP
(0045)  	_NOP();_NOP();_NOP();_NOP();
    01E6 0000      NOP
    01E7 0000      NOP
    01E8 0000      NOP
    01E9 0000      NOP
(0046)  	_NOP();_NOP();_NOP();_NOP();
    01EA 0000      NOP
    01EB 0000      NOP
    01EC 0000      NOP
    01ED 0000      NOP
(0047)  	_ClrNRF_CE;
    01EE 98C3      CBI	0x18,3
(0048) }
    01EF 9621      ADIW	R28,1
    01F0 940E07E9  CALL	pop_gset1
    01F2 9508      RET
_nrf24l01_init:
    01F3 9721      SBIW	R28,1
(0049) //--------------------------------------------------------
(0050) //--------------------------------------------------------
(0051) 
(0052) //--------------------------------------------------------
(0053) //初始化模块
(0054) //--------------------------------------------------------
(0055) void    nrf24l01_init()
(0056) {
(0057) //    UINT i;
(0058) 	bBusy = dTrue;
    01F4 E585      LDI	R24,0x55
    01F5 9380006F  STS	_bBusy,R24
(0059) //    _SetNRF_CE;                            // 空闲模式,不进行数据传输
(0060) /*
(0061)     nrfTxBuf[0] = 0x20;                       // CONFIG:PRx, CRC 2byte,power up
(0062)     nrfTxBuf[1] = 0x0f;
(0063)     SPI_SendData(nrfTxBuf, nrfRxBuf, 2);
(0064) 如果在这里写00寄存器,读出来发现不是0x0f,而是上电默认值0x08.    
(0065) 		RoomNum=EEPROMread(RoomAddress_User);
(0066) 		EEPROMwrite(FloorAddress_UserBAK2,FloorNum);
(0067) */
(0068)     nrfTxBuf[0] = 0x21;                         // EN_AA
    01F7 E281      LDI	R24,0x21
    01F8 938002D3  STS	_nrfTxBuf,R24
(0069)     nrfTxBuf[1] = EEPROMread(UserConfigAddress+1);//0x0f;//0x01;                       // 通道0自动应答

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -