📄 wdct.lst
字号:
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 + -