📄 2.4g+̤
字号:
(0401) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
01A5 E027 LDI R18,7
01A6 E206 LDI R16,0x26
01A7 DF99 RCALL _SPI_RW_Reg
(0402) SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..
01A8 E02F LDI R18,0xF
01A9 E200 LDI R16,0x20
01AA DF96 RCALL _SPI_RW_Reg
(0403) nRF24L01_CEH;
01AB 9A5D SBI 0x0B,5
(0404) delay();
01AC DF64 RCALL _delay
01AD 9621 ADIW R28,1
01AE 9508 RET
_TX_Mode:
01AF 9721 SBIW R28,1
(0405) // This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
(0406) // '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.
(0407)
(0408) }
(0409) /**************************************************/
(0410)
(0411) /**************************************************
(0412) Function: TX_Mode();
(0413)
(0414) Description:
(0415) This function initializes one nRF24L01 device to
(0416) TX mode, set TX address, set RX address for auto.ack,
(0417) fill TX payload, select RF channel, datarate & TX pwr.
(0418) PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.
(0419)
(0420) ToDo: One high pulse(>10us) on CE will now send this
(0421) packet and expext an acknowledgment from the RX device. */
(0422) /**************************************************/
(0423) void TX_Mode(void)
(0424) {
(0425) nRF24L01_CEL;
01B0 985D CBI 0x0B,5
(0426) delay();
01B1 DF5F RCALL _delay
(0427) SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01
01B2 E085 LDI R24,5
01B3 8388 STD Y+0,R24
01B4 E420 LDI R18,0x40
01B5 E031 LDI R19,1
01B6 E300 LDI R16,0x30
01B7 DFC0 RCALL _SPI_Write_Buf
(0428) SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
01B8 E085 LDI R24,5
01B9 8388 STD Y+0,R24
01BA E420 LDI R18,0x40
01BB E031 LDI R19,1
01BC E20A LDI R16,0x2A
01BD DFBA RCALL _SPI_Write_Buf
(0429) SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload
01BE E184 LDI R24,0x14
01BF 8388 STD Y+0,R24
01C0 E020 LDI R18,0
01C1 E031 LDI R19,1
01C2 EA00 LDI R16,0xA0
01C3 DFB4 RCALL _SPI_Write_Buf
(0430)
(0431) SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
01C4 E021 LDI R18,1
01C5 E201 LDI R16,0x21
01C6 DF7A RCALL _SPI_RW_Reg
(0432) SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
01C7 E021 LDI R18,1
01C8 E202 LDI R16,0x22
01C9 DF77 RCALL _SPI_RW_Reg
(0433) SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
01CA E12A LDI R18,0x1A
01CB E204 LDI R16,0x24
01CC DF74 RCALL _SPI_RW_Reg
(0434) SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40
01CD E228 LDI R18,0x28
01CE E205 LDI R16,0x25
01CF DF71 RCALL _SPI_RW_Reg
(0435) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
01D0 E027 LDI R18,7
01D1 E206 LDI R16,0x26
01D2 DF6E RCALL _SPI_RW_Reg
(0436) SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
01D3 E02E LDI R18,0xE
01D4 E200 LDI R16,0x20
01D5 DF6B RCALL _SPI_RW_Reg
(0437) nRF24L01_CEH;
01D6 9A5D SBI 0x0B,5
(0438) delay();
01D7 DF39 RCALL _delay
01D8 9621 ADIW R28,1
01D9 9508 RET
(0439)
(0440) }
(0441) //------------------------------------------------------
(0442) void timer0_init(void)
(0443) {
(0444) TCCR0B = 0x00; //stop
_timer0_init:
01DA 2422 CLR R2
01DB BC25 OUT 0x25,R2
(0445) TCNT0 = 0x06; //set count
01DC E086 LDI R24,6
01DD BD86 OUT 0x26,R24
(0446) TCCR0A = 0x00;
01DE BC24 OUT 0x24,R2
(0447) TCCR0B = 0x02; //start timer
01DF E082 LDI R24,2
01E0 BD85 OUT 0x25,R24
01E1 9508 RET
_timer0_ovf_isr:
01E2 922A ST R2,-Y
01E3 923A ST R3,-Y
01E4 938A ST R24,-Y
01E5 939A ST R25,-Y
01E6 B62F IN R2,0x3F
01E7 922A ST R2,-Y
(0448) }
(0449) #pragma interrupt_handler timer0_ovf_isr:17
(0450) void timer0_ovf_isr(void) // 5ms
(0451) {
(0452)
(0453) TCNT0 = 0x06; //reload counter value
01E8 E086 LDI R24,6
01E9 BD86 OUT 0x26,R24
(0454)
(0455) if((--t20ms)==0)
01EA 91800163 LDS R24,t20ms
01EC 5081 SUBI R24,1
01ED 2E28 MOV R2,R24
01EE 92200163 STS t20ms,R2
01F0 2388 TST R24
01F1 F009 BEQ 0x01F3
01F2 C203 RJMP 0x03F6
(0456) {
(0457) set(flag,bit20ms);
01F3 91800162 LDS R24,flag
01F5 6081 ORI R24,1
01F6 93800162 STS flag,R24
(0458) t20ms=t20msC;
01F8 E184 LDI R24,0x14
01F9 93800163 STS t20ms,R24
(0459) if(PIND& key1)
01FB 9B4C SBIS 0x09,4
01FC C009 RJMP 0x0206
(0460) {
(0461) key1_pulse<<=1;
01FD 90200161 LDS R2,key1_pulse
01FF 0C22 LSL R2
0200 92200161 STS key1_pulse,R2
(0462) key1_pulse&=0xfe;
0202 2D82 MOV R24,R2
0203 7F8E ANDI R24,0xFE
0204 93800161 STS key1_pulse,R24
(0463) }
(0464) if(!(PIND& key1))
0206 994C SBIC 0x09,4
0207 C009 RJMP 0x0211
(0465) {
(0466) key1_pulse<<=1;
0208 90200161 LDS R2,key1_pulse
020A 0C22 LSL R2
020B 92200161 STS key1_pulse,R2
(0467) key1_pulse|=0x01;
020D 2D82 MOV R24,R2
020E 6081 ORI R24,1
020F 93800161 STS key1_pulse,R24
(0468) }
(0469) if(key1_pulse==0x0f)
0211 91800161 LDS R24,key1_pulse
0213 308F CPI R24,0xF
0214 F459 BNE 0x0220
(0470) {
(0471) key1_flag=1;
0215 E081 LDI R24,1
0216 93800159 STS key1_flag,R24
(0472) send_flag=1;
0218 93800146 STS send_flag,R24
(0473) accept_time=0;
021A 2422 CLR R2
021B 2433 CLR R3
021C 92300148 STS accept_time+1,R3
021E 92200147 STS accept_time,R2
(0474) }
(0475) if(key1_pulse==0xff)
0220 91800161 LDS R24,key1_pulse
0222 3F8F CPI R24,0xFF
0223 F4B9 BNE 0x023B
(0476) {
(0477) key1_time++;
0224 91800150 LDS R24,key1_time
0226 5F8F SUBI R24,0xFF
0227 93800150 STS key1_time,R24
(0478) if(key1_time>10)
0229 E08A LDI R24,0xA
022A 90200150 LDS R2,key1_time
022C 1582 CP R24,R2
022D F468 BCC 0x023B
(0479) {
(0480) key1_time=0;
022E 2422 CLR R2
022F 92200150 STS key1_time,R2
(0481) key1_flag=1;
0231 E081 LDI R24,1
0232 93800159 STS key1_flag,R24
(0482) send_flag=1;
0234 93800146 STS send_flag,R24
(0483) accept_time=0;
0236 2433 CLR R3
0237 92300148 STS accept_time+1,R3
0239 92200147 STS accept_time,R2
(0484) }
(0485) }
(0486) if(PIND& key2)
023B 9B4B SBIS 0x09,3
023C C009 RJMP 0x0246
(0487) {
(0488) key2_pulse<<=1;
023D 90200160 LDS R2,key2_pulse
023F 0C22 LSL R2
0240 92200160 STS key2_pulse,R2
(0489) key2_pulse&=0xfe;
0242 2D82 MOV R24,R2
0243 7F8E ANDI R24,0xFE
0244 93800160 STS key2_pulse,R24
(0490) }
(0491) if(!(PIND& key2))
0246 994B SBIC 0x09,3
0247 C009 RJMP 0x0251
(0492) {
(0493) key2_pulse<<=1;
0248 90200160 LDS R2,key2_pulse
024A 0C22 LSL R2
024B 92200160 STS key2_pulse,R2
(0494) key2_pulse|=0x01;
024D 2D82 MOV R24,R2
024E 6081 ORI R24,1
024F 93800160 STS key2_pulse,R24
(0495) }
(0496) if(key2_pulse==0x0f)
0251 91800160 LDS R24,key2_pulse
0253 308F CPI R24,0xF
0254 F459 BNE 0x0260
(0497) {
(0498) key2_flag=1;
0255 E081 LDI R24,1
0256 93800158 STS key2_flag,R24
(0499) send_flag=1;
0258 93800146 STS send_flag,R24
(0500) accept_time=0;
025A 2422 CLR R2
025B 2433 CLR R3
025C 92300148 STS accept_time+1,R3
025E 92200147 STS accept_time,R2
(0501) }
(0502) if(key2_pulse==0xff)
0260 91800160 LDS R24,key2_pulse
0262 3F8F CPI R24,0xFF
0263 F4B9 BNE 0x027B
(0503) {
(0504) key2_time++;
0264 9180014F LDS R24,key2_time
0266 5F8F SUBI R24,0xFF
0267 9380014F STS key2_time,R24
(0505) if(key2_time>10)
0269 E08A LDI R24,0xA
026A 9020014F LDS R2,key2_time
026C 1582 CP R24,R2
026D F468 BCC 0x027B
(0506) {
(0507) key2_time=0;
026E 2422 CLR R2
026F 9220014F STS key2_time,R2
(0508) key2_flag=1;
0271 E081 LDI R24,1
0272 93800158 STS key2_flag,R24
(0509) send_flag=1;
0274 93800146 STS send_flag,R24
(0510) accept_time=0;
0276 2433 CLR R3
0277 92300148 STS accept_time+1,R3
0279 92200147 STS accept_time,R2
(0511) }
(0512) }
(0513) if(PIND& key3)
027B 9B4A SBIS 0x09,2
027C C009 RJMP 0x0286
(0514) {
(0515) key3_pulse<<=1;
027D 9020015F LDS R2,key3_pulse
027F 0C22 LSL R2
0280 9220015F STS key3_pulse,R2
(0516) key3_pulse&=0xfe;
0282 2D82 MOV R24,R2
0283 7F8E ANDI R24,0xFE
0284 9380015F STS key3_pulse,R24
(0517) }
(0518) if(!(PIND& key3))
0286 994A SBIC 0x09,2
0287 C009 RJMP 0x0291
(0519) {
(0520) key3_pulse<<=1;
0288 9020015F LDS R2,key3_pulse
028A 0C22 LSL R2
028B 9220015F STS key3_pulse,R2
(0521) key3_pulse|=0x01;
028D 2D82 MOV R24,R2
028E 6081 ORI R24,1
028F 9380015F STS key3_pulse,R24
(0522) }
(0523) if(key3_pulse==0x0f)
0291 9180015F LDS R24,key3_pulse
0293 308F CPI R24,0xF
0294 F459 BNE 0x02A0
(0524) {
(0525) key3_flag=1;
0295 E081 LDI R24,1
0296 93800157 STS key3_flag,R24
(0526) send_flag=1;
0298 93800146 STS send_flag,R24
(0527) accept_time=0;
029A 2422 CLR R2
029B 2433 CLR R3
029C 92300148 STS accept_time+1,R3
029E 92200147 STS accept_time,R2
(0528) }
(0529) if(key3_pulse==0xff)
02A0 9180015F LDS R24,key3_pulse
02A2 3F8F CPI R24,0xFF
02A3 F4B9 BNE 0x02BB
(0530) {
(0531) key3_time++;
02A4 9180014E LDS R24,key3_time
02A6 5F8F SUBI R24,0xFF
02A7 9380014E STS key3_time,R24
(0532) if(key3_time>10)
02A9 E08A LDI R24,0xA
02AA 9020014E LDS R2,key3_time
02AC 1582 CP R24,R2
02AD F468 BCC 0x02BB
(0533) {
(0534) key3_time=0;
02AE 2422 CLR R2
02AF 9220014E STS key3_time,R2
(0535) key3_flag=1;
02B1 E081 LDI R24,1
02B2 93800157 STS key3_flag,R24
(0536) send_flag=1;
02B4 93800146 STS send_flag,R24
(0537) accept_time=0;
02B6 2433 CLR R3
02B7 92300148 STS accept_time+1,R3
02B9 92200147 STS accept_time,R2
(0538) }
(0539) }
(0540) if(PINC& key4)
02BB 9B35 SBIS 0x06,5
02BC C009 RJMP 0x02C6
(0541) {
(0542) key4_pulse<<=1;
02BD 9020015E LDS R2,key4_pulse
02BF 0C22 LSL R2
02C0 9220015E STS key4_pulse,R2
(0543) key4_pulse&=0xfe;
02C2 2D82 MOV R24,R2
02C3 7F8E ANDI R24,0xFE
02C4 9380015E STS key4_pulse,R24
(0544) }
(0545) if(!(PINC& key4))
02C6 9935 SBIC 0x06,5
02C7 C009 RJMP 0x02D1
(0546) {
(0547) key4_pulse<<=1;
02C8 9020015E LDS R2,key4_pulse
02CA 0C22 LSL R2
02CB 9220015E STS key4_pulse,R2
(0548) key4_pulse|=0x01;
02CD 2D82 MOV R24,R2
02CE 6081 ORI R24,1
02CF 9380015E STS key4_pulse,R24
(0549) }
(0550) if(key4_pulse==0x0f)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -