📄 new.lst
字号:
0511 2D8E MOV R24,R14
0512 3083 CPI R24,3
0513 F419 BNE 0x0517
(0161) {y=0x88;
0514 E848 LDI R20,0x88
(0162) x=0x80;}
0515 E860 LDI R22,0x80
0516 C002 RJMP 0x0519
(0163) else
(0164) {y=0x88;
0517 E848 LDI R20,0x88
(0165) x=0x90;}
0518 E960 LDI R22,0x90
(0166)
(0167) lcd_write_comm(x); //设置x 坐标
0519 2F06 MOV R16,R22
051A DF59 RCALL _lcd_write_comm
(0168) lcd_write_comm(y); //设置y 坐标
051B 2F04 MOV R16,R20
051C DF57 RCALL _lcd_write_comm
(0169)
(0170)
(0171) for (j=0;j<16;j++)
051D 24AA CLR R10
051E C010 RJMP 0x052F
(0172) {for (i=0;i<16;i++)
051F 24CC CLR R12
0520 C003 RJMP 0x0524
(0173) lcd_write_data(0xff);
0521 EF0F LDI R16,0xFF
0522 DF3C RCALL _lcd_write_data
0523 94C3 INC R12
0524 2D8C MOV R24,R12
0525 3180 CPI R24,0x10
0526 F3D0 BCS 0x0521
(0174)
(0175) lcd_write_comm(++x);
0527 2F86 MOV R24,R22
0528 5F8F SUBI R24,0xFF
0529 2F68 MOV R22,R24
052A 2F08 MOV R16,R24
052B DF48 RCALL _lcd_write_comm
(0176) lcd_write_comm(y);
052C 2F04 MOV R16,R20
052D DF46 RCALL _lcd_write_comm
052E 94A3 INC R10
052F 2D8A MOV R24,R10
0530 3180 CPI R24,0x10
0531 F368 BCS 0x051F
0532 D287 RCALL pop_gset5
0533 9508 RET
_nrf905_Config:
0534 D28D RCALL push_gset2
FILE: F:\programme\RF905\nrf905config.c
(0001) #include "nrf905.h"
(0002) #include <iom8v.h>
(0003) extern void DelayMs(uchar ms);
(0004) extern void DelayUs(uint us);
(0005)
(0006) #define SIZE 32
(0007)
(0008) uchar TxBuf[SIZE]={101,102,103,104,105,106,107,108,109,110,
(0009) 111,112,113,114,115,116,117,118,119,120,
(0010) 121,122,123,124,125,126,127,128,129,130,
(0011) 131,132};
(0012) uchar RxBuf[SIZE];
(0013) void nrf905_Config(void)
(0014) {
(0015) CLR(PORTB,CSN); // Spi 片选开
0535 98C2 CBI 0x18,2
(0016) nrf905_SpiRW(WC); // Write config command
0536 2700 CLR R16
0537 2711 CLR R17
0538 D029 RCALL _nrf905_SpiRW
(0017) nrf905_SpiRW(CH_NO_BYTE); //中心频率低8位
0539 E40C LDI R16,0x4C
053A E010 LDI R17,0
053B D026 RCALL _nrf905_SpiRW
(0018) nrf905_SpiRW(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
053C E00C LDI R16,0xC
053D E010 LDI R17,0
053E D023 RCALL _nrf905_SpiRW
(0019) nrf905_SpiRW(TX_AFW_4BYTE | RX_AFW_4BYTE); //接收地址宽度4字节,发送地址宽度4字节
053F E404 LDI R16,0x44
0540 E010 LDI R17,0
0541 D020 RCALL _nrf905_SpiRW
(0020) nrf905_SpiRW(RX_PW_32BYTE); //接收数据宽度32字节
0542 E200 LDI R16,0x20
0543 E010 LDI R17,0
0544 D01D RCALL _nrf905_SpiRW
(0021) nrf905_SpiRW(TX_PW_32BYTE); //发送数据宽度32字节
0545 E200 LDI R16,0x20
0546 E010 LDI R17,0
0547 D01A RCALL _nrf905_SpiRW
(0022) nrf905_SpiRW(RX_ADDRESS_0); //接收有效地址第1字节
0548 E102 LDI R16,0x12
0549 E010 LDI R17,0
054A E020 LDI R18,0
054B E030 LDI R19,0
054C D015 RCALL _nrf905_SpiRW
(0023) nrf905_SpiRW(RX_ADDRESS_1); //接收有效地址第2字节
054D E304 LDI R16,0x34
054E E010 LDI R17,0
054F E020 LDI R18,0
0550 E030 LDI R19,0
0551 D010 RCALL _nrf905_SpiRW
(0024) nrf905_SpiRW(RX_ADDRESS_2); //接收有效地址第3字节
0552 E506 LDI R16,0x56
0553 E010 LDI R17,0
0554 E020 LDI R18,0
0555 E030 LDI R19,0
0556 D00B RCALL _nrf905_SpiRW
(0025) nrf905_SpiRW(RX_ADDRESS_3); //接收有效地址第4字节
0557 E708 LDI R16,0x78
0558 E010 LDI R17,0
0559 E020 LDI R18,0
055A E030 LDI R19,0
055B D006 RCALL _nrf905_SpiRW
(0026) nrf905_SpiRW(CRC16_EN | XOF_16MHz); //CRC16模式使能,晶体振荡器频率16MHz
055C ED08 LDI R16,0xD8
055D E010 LDI R17,0
055E D003 RCALL _nrf905_SpiRW
(0027) SET(PORTB,CSN); // Disable Spi
055F 9AC2 SBI 0x18,2
0560 D255 RCALL pop_gset2
0561 9508 RET
_nrf905_SpiRW:
temp --> R20
val --> R16
0562 D261 RCALL push_gset1
(0028) }
(0029)
(0030) uchar nrf905_SpiRW(uchar val)
(0031) { uchar temp;
(0032)
(0033) SPDR=val;
0563 B90F OUT 0x0F,R16
(0034) while ((SPSR&(1<<SPIF))==0)
0564 9B77 SBIS 0x0E,7
0565 CFFE RJMP 0x0564
(0035) ;
(0036) temp=SPDR;
0566 B14F IN R20,0x0F
(0037) return temp;
0567 2F04 MOV R16,R20
0568 D25E RCALL pop_gset1
0569 9508 RET
(0038) }
(0039)
(0040) //PwrDown->StandBy
(0041) void nrf905_StandBy()
(0042) {
(0043) SET(PORTB,PWRUP);
_nrf905_StandBy:
056A 9AC0 SBI 0x18,0
(0044) CLR(PORTB,TRXCE);
056B 98C1 CBI 0x18,1
(0045) CLR(PORTB,TX_EN);
056C 98C6 CBI 0x18,6
056D 9508 RET
(0046) }
(0047)
(0048) //->PwrDown
(0049) void nrf905_Off()
(0050) {
(0051) CLR(PORTB,PWRUP);
_nrf905_Off:
056E 98C0 CBI 0x18,0
056F 9508 RET
(0052) }
(0053)
(0054) //->ShockBurst Send
(0055) void nrf905_TxOn()
(0056) {
(0057) SET(PORTB,PWRUP);
_nrf905_TxOn:
0570 9AC0 SBI 0x18,0
(0058) SET(PORTB,TX_EN);
0571 9AC6 SBI 0x18,6
(0059) CLR(PORTB,TRXCE);
0572 98C1 CBI 0x18,1
0573 9508 RET
(0060) }
(0061)
(0062) //->ShockBurst Send
(0063) void nrf905_TxSend()
(0064) {
(0065) SET(PORTB,TRXCE);
_nrf905_TxSend:
0574 9AC1 SBI 0x18,1
(0066) DelayUs(20);//>10us
0575 E104 LDI R16,0x14
0576 E010 LDI R17,0
0577 D07D RCALL _DelayUs
(0067) CLR(PORTB,TRXCE);//只发送一次
0578 98C1 CBI 0x18,1
0579 9508 RET
(0068) }
(0069)
(0070) //->ShockBurst Recv
(0071) void nrf905_RxOn()
(0072) {
(0073) SET(PORTB,PWRUP);
_nrf905_RxOn:
057A 9AC0 SBI 0x18,0
(0074) CLR(PORTB,TX_EN); //maybe first
057B 98C6 CBI 0x18,6
(0075) SET(PORTB,TRXCE);
057C 9AC1 SBI 0x18,1
057D 9508 RET
(0076) }
(0077)
(0078) //初始化nrf905
(0079) void nrf905_Init()
(0080) {
(0081) nrf905_StandBy();
_nrf905_Init:
057E DFEB RCALL _nrf905_StandBy
(0082) DelayMs(10);//!!!must >3ms
057F E00A LDI R16,0xA
0580 D068 RCALL _DelayMs
(0083) nrf905_Config();
0581 DFB2 RCALL _nrf905_Config
(0084)
(0085) nrf905_SpiTest();//test...
0582 D002 RCALL _nrf905_SpiTest
(0086) nrf905_RxOn();
0583 DFF6 RCALL _nrf905_RxOn
0584 9508 RET
_nrf905_SpiTest:
i --> R20
0585 D23E RCALL push_gset1
(0087) }
(0088)
(0089) //测试:通过读配置,判断SPI操作是否正确
(0090) void nrf905_SpiTest()
(0091) {uchar i;
(0092) CLR(PORTB,CSN);
0586 98C2 CBI 0x18,2
(0093) nrf905_SpiRW(RC); //读配置
0587 E100 LDI R16,0x10
0588 DFD9 RCALL _nrf905_SpiRW
(0094) for (i=0;i<10;i++)
0589 2744 CLR R20
058A C00A RJMP 0x0595
(0095) {
(0096) RxBuf[i]= nrf905_SpiRW(0);//read from nrf905
058B 2700 CLR R16
058C DFD5 RCALL _nrf905_SpiRW
058D EC89 LDI R24,0xC9
058E E090 LDI R25,0
058F 2FE4 MOV R30,R20
0590 27FF CLR R31
0591 0FE8 ADD R30,R24
0592 1FF9 ADC R31,R25
0593 8300 STD Z+0,R16
0594 9543 INC R20
0595 304A CPI R20,0xA
0596 F3A0 BCS 0x058B
(0097) }
(0098) SET(PORTB,CSN);
0597 9AC2 SBI 0x18,2
0598 D22E RCALL pop_gset1
0599 9508 RET
(0099) }
(0100)
(0101) //写Tx地址
(0102) void nrf905_SetTxAddr()
(0103) {
(0104) CLR(PORTB,CSN);
_nrf905_SetTxAddr:
059A 98C2 CBI 0x18,2
(0105) nrf905_SpiRW(WTA); //写Tx地址
059B E202 LDI R16,0x22
059C DFC5 RCALL _nrf905_SpiRW
(0106) nrf905_SpiRW(TX_ADDRESS_0);
059D E102 LDI R16,0x12
059E DFC3 RCALL _nrf905_SpiRW
(0107) nrf905_SpiRW(TX_ADDRESS_1);
059F E304 LDI R16,0x34
05A0 DFC1 RCALL _nrf905_SpiRW
(0108) nrf905_SpiRW(TX_ADDRESS_2);
05A1 E506 LDI R16,0x56
05A2 DFBF RCALL _nrf905_SpiRW
(0109) nrf905_SpiRW(TX_ADDRESS_3);
05A3 E708 LDI R16,0x78
05A4 DFBD RCALL _nrf905_SpiRW
(0110) SET(PORTB,CSN);
05A5 9AC2 SBI 0x18,2
05A6 9508 RET
_nrf905_SetData:
i --> R20
05A7 D21C RCALL push_gset1
(0111) }
(0112)
(0113) //写Tx数据
(0114) void nrf905_SetData()
(0115) {uchar i;
(0116)
(0117) CLR(PORTB,CSN);
05A8 98C2 CBI 0x18,2
(0118) nrf905_SpiRW(WTP); //写TxPayload
05A9 E200 LDI R16,0x20
05AA DFB7 RCALL _nrf905_SpiRW
(0119) for (i=0;i<SIZE;i++)
05AB 2744 CLR R20
05AC C009 RJMP 0x05B6
(0120) {
(0121) nrf905_SpiRW(TxBuf[i]);
05AD EA82 LDI R24,0xA2
05AE E090 LDI R25,0
05AF 2FE4 MOV R30,R20
05B0 27FF CLR R31
05B1 0FE8 ADD R30,R24
05B2 1FF9 ADC R31,R25
05B3 8100 LDD R16,Z+0
05B4 DFAD RCALL _nrf905_SpiRW
05B5 9543 INC R20
05B6 3240 CPI R20,0x20
05B7 F3A8 BCS 0x05AD
(0122) }
(0123)
(0124) SET(PORTB,CSN);
05B8 9AC2 SBI 0x18,2
05B9 D20D RCALL pop_gset1
05BA 9508 RET
(0125) }
(0126)
(0127) //等待发送结束
(0128) void nrf905_WaitSended()
(0129) {
(0130) while ((PINC&(1<<DR))==0);
_nrf905_WaitSended:
05BB 9B9A SBIS 0x13,2
05BC CFFE RJMP _nrf905_WaitSended
05BD 9508 RET
(0131) }
(0132)
(0133) //发送TxBuf中的数据
(0134) void nrf905_SendData()
(0135) {
(0136) nrf905_TxOn(); //切换到发送模式
_nrf905_SendData:
05BE DFB1 RCALL _nrf905_TxOn
(0137) nrf905_SetTxAddr(); //写发送地址
05BF DFDA RCALL _nrf905_SetTxAddr
(0138) nrf905_SetData(); //写数据
05C0 DFE6 RCALL _nrf905_SetData
(0139) nrf905_TxSend(); //启动发送
05C1 DFB2 RCALL _nrf905_TxSend
(0140) // nrf905_WaitSended();//等待发送结束 有改动
(0141) DelayMs(10);
05C2 E00A LDI R16,0xA
05C3 D025 RCALL _DelayMs
05C4 9508 RET
(0142)
(0143) }
(0144)
(0145) //测试直接重新发送上次写入的数据
(0146) void nrf905_SendAgain()
(0147) {
(0148) nrf905_TxOn();
_nrf905_SendAgain:
05C5 DFAA RCALL _nrf905_TxOn
(0149) nrf905_TxSend();
05C6 DFAD RCALL _nrf905_TxSend
(0150) // nrf905_WaitSended();
(0151) DelayMs(20);
05C7 E104 LDI R16,0x14
05C8 D020 RCALL _DelayMs
05C9 9508 RET
_nrf905_ReadData:
i --> R20
05CA D1F9 RCALL push_gset1
(0152) }
(0153)
(0154) //读出接收到的数据
(0155) void nrf905_ReadData()
(0156) {
(0157) uchar i;
(0158)
(0159) CLR(PORTB,CSN);
05CB 98C2 CBI 0x18,2
(0160) nrf905_SpiRW(RRP); //读RxPayload
05CC E204 LDI R16,0x24
05CD DF94 RCALL _nrf905_SpiRW
(0161) for (i=0;i<SIZE;i++)
05CE 2744 CLR R20
05CF C00A RJMP 0x05DA
(0162) {
(0163) RxBuf[i]=nrf905_SpiRW(0);//read...
05D0 2700 CLR R16
05D1 DF90 RCALL _nrf905_SpiRW
05D2 EC89 LDI R24,0xC9
05D3 E090 LDI R25,0
05D4 2FE4 MOV R30,R20
05D5 27FF CLR R31
05D6 0FE8 ADD R30,R24
05D7 1FF9 ADC R31,R25
05D8 8300 STD Z+0,R16
05D9 9543 INC R20
05DA 3240 CPI R20,0x20
05DB F3A0 BCS 0x05D0
(0164) }
(0165)
(0166) SET(PORTB,CSN);
05DC 9AC2 SBI 0x18,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -