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

📄 new.lst

📁 包含无线收发模块 NREF905的所有功能库函数 本库函数与外部函数接口简单易用
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -