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

📄 nrf2401.lst

📁 著名的RF射频芯片nRF2401应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0342 2766      CLR	R22
    0343 C02F      RJMP	0x0373
(0050) 	case 116:kk=6;displayint(0x98,kk);KeyValue=0;break;
    0344 E086      LDI	R24,6
    0345 2EA8      MOV	R10,R24
    0346 2F28      MOV	R18,R24
    0347 2733      CLR	R19
    0348 E908      LDI	R16,0x98
    0349 E010      LDI	R17,0
    034A DDC7      RCALL	_displayint
    034B 2766      CLR	R22
    034C C026      RJMP	0x0373
(0051) 	case 108:kk=7;displayint(0x98,kk);KeyValue=0;break;
    034D E087      LDI	R24,7
    034E 2EA8      MOV	R10,R24
    034F 2F28      MOV	R18,R24
    0350 2733      CLR	R19
    0351 E908      LDI	R16,0x98
    0352 E010      LDI	R17,0
    0353 DDBE      RCALL	_displayint
    0354 2766      CLR	R22
    0355 C01D      RJMP	0x0373
(0052) 	case 117:kk=8;displayint(0x98,kk);KeyValue=0;break;
    0356 E088      LDI	R24,0x8
    0357 2EA8      MOV	R10,R24
    0358 2F28      MOV	R18,R24
    0359 2733      CLR	R19
    035A E908      LDI	R16,0x98
    035B E010      LDI	R17,0
    035C DDB5      RCALL	_displayint
    035D 2766      CLR	R22
    035E C014      RJMP	0x0373
(0053) 	case 125:kk=9;displayint(0x98,kk);KeyValue=0;break;
    035F E089      LDI	R24,0x9
    0360 2EA8      MOV	R10,R24
    0361 2F28      MOV	R18,R24
    0362 2733      CLR	R19
    0363 E908      LDI	R16,0x98
    0364 E010      LDI	R17,0
    0365 DDAC      RCALL	_displayint
    0366 2766      CLR	R22
    0367 C00B      RJMP	0x0373
(0054) 	case 90: kk='k'; KeyValue=0;           
    0368 E68B      LDI	R24,0x6B
    0369 2EA8      MOV	R10,R24
    036A 2766      CLR	R22
(0055) 	                 lcd_write_comm(0x98);
    036B E908      LDI	R16,0x98
    036C E010      LDI	R17,0
    036D DE4C      RCALL	_lcd_write_comm
(0056) 	                 lcd_write_data('k');
    036E E60B      LDI	R16,0x6B
    036F E010      LDI	R17,0
    0370 DE34      RCALL	_lcd_write_data
(0057) 	               break;
    0371 C001      RJMP	0x0373
(0058) 	default :KeyValue=0;break;
    0372 2766      CLR	R22
    0373 CF26      RJMP	0x029A
    0374 9622      ADIW	R28,2
    0375 9508      RET
_int0_isr:
    0376 922A      ST	R2,-Y
    0377 923A      ST	R3,-Y
    0378 924A      ST	R4,-Y
    0379 938A      ST	R24,-Y
    037A 939A      ST	R25,-Y
    037B 93EA      ST	R30,-Y
    037C 93FA      ST	R31,-Y
    037D B62F      IN	R2,0x3F
    037E 922A      ST	R2,-Y
(0059)    }  
(0060)   
(0061)   
(0062)   }
(0063) }
(0064)   
(0065)   
(0066) #pragma interrupt_handler int0_isr:2
(0067) void int0_isr(void)
(0068) {
(0069)  static unsigned char IntNum=0,index=0;
(0070)  
(0071)    if((IntNum>0)&&(IntNum<9))
    037F 2422      CLR	R2
    0380 903000A3  LDS	R3,IntNum
    0382 1423      CP	R2,R3
    0383 F4C8      BCC	0x039D
    0384 2D83      MOV	R24,R3
    0385 3089      CPI	R24,0x9
    0386 F4B0      BCC	0x039D
(0072)       {
(0073)        KeyI[index]>>=1;
    0387 EB89      LDI	R24,0xB9
    0388 E090      LDI	R25,0
    0389 902000A4  LDS	R2,index
    038B 2433      CLR	R3
    038C 0E28      ADD	R2,R24
    038D 1E39      ADC	R3,R25
    038E 01F1      MOVW	R30,R2
    038F 8040      LDD	R4,Z+0
    0390 9446      LSR	R4
    0391 8240      STD	Z+0,R4
(0074)        if(PINB&0x80)
    0392 9BB7      SBIS	0x16,7
    0393 C009      RJMP	0x039D
(0075)        KeyI[index]|=0x80;     
    0394 902000A4  LDS	R2,index
    0396 2433      CLR	R3
    0397 0E28      ADD	R2,R24
    0398 1E39      ADC	R3,R25
    0399 01F1      MOVW	R30,R2
    039A 8180      LDD	R24,Z+0
    039B 6880      ORI	R24,0x80
    039C 8380      STD	Z+0,R24
(0076)        }
(0077) 	   
(0078)   IntNum++;
    039D 918000A3  LDS	R24,IntNum
    039F 5F8F      SUBI	R24,0xFF
    03A0 938000A3  STS	IntNum,R24
(0079)   // while (!Key_CLK); //等待PS/2CLK拉高            use??????
(0080)   if(IntNum>10)
    03A2 E08A      LDI	R24,0xA
    03A3 902000A3  LDS	R2,IntNum
    03A5 1582      CP	R24,R2
    03A6 F488      BCC	0x03B8
(0081)   {   
(0082)        IntNum=0;  
    03A7 2422      CLR	R2
    03A8 922000A3  STS	IntNum,R2
(0083)        index++;
    03AA 918000A4  LDS	R24,index
    03AC 5F8F      SUBI	R24,0xFF
    03AD 938000A4  STS	index,R24
(0084)     if(index==3)
    03AF 3083      CPI	R24,3
    03B0 F439      BNE	0x03B8
(0085)       {
(0086) 	   IntNum=0;
    03B1 922000A3  STS	IntNum,R2
(0087) 	   index=0; 
    03B3 922000A4  STS	index,R2
(0088) 	   KeyFlag=1;
    03B5 E081      LDI	R24,1
    03B6 938000A1  STS	KeyFlag,R24
(0089) 	  }
(0090)   }
    03B8 9029      LD	R2,Y+
    03B9 BE2F      OUT	0x3F,R2
    03BA 91F9      LD	R31,Y+
    03BB 91E9      LD	R30,Y+
    03BC 9199      LD	R25,Y+
    03BD 9189      LD	R24,Y+
    03BE 9049      LD	R4,Y+
    03BF 9039      LD	R3,Y+
    03C0 9029      LD	R2,Y+
    03C1 9518      RETI
_nrf2401A_WR:
  i                    --> R20
  temp                 --> R22
  val                  --> R16
    03C2 D0F0      RCALL	push_gset2
FILE: F:\programme\nrf2401\nrf2401.c
(0001) #include "config.h"
(0002) 
(0003) //extern void DelayMs(uchar ms);
(0004) //extern void DelayUs(uint us);
(0005) 
(0006) //注意:
(0007) //1、nef2401A配置字是先写第15字节的!!
(0008) //2、发送后要延时等发送结束后才能转回接收模式,否则数据发送不出
(0009) 
(0010) 
(0011) #define SIZE 20     //最大数据包长度 32-ADDR4-CRC2=26Byte   25
(0012) #define ADDRSIZE 4  //地址长度Byte
(0013) 
(0014) #define CH_NO 2     //频段编号
(0015) 
(0016) #define BPS_1M      //编译控制:1M or 250Kbps
(0017) 
(0018) uchar TxBuf[SIZE]={101,102,103,104,105,106,107,108,109,110,
(0019)                    111,112,113,114,115,116,117,118,119,120};
(0020) uchar RxBuf[SIZE];
(0021) 
(0022) /*-------------------------------------------------------------------------------------------
(0023) nrf2401A配置寄存器宏定义 
(0024) nrf2401A配置寄存器(15Byte)
(0025) 工作频率f=2.4G+CH_NO*1MHz
(0026) -------------------------------------------------------------------------------------------*/
(0027) #define RX_ADDRESS           0xCCCCCCCC               //接收有效地址(本方)
(0028) #define TX_ADDRESS           0xCCCCCCCC               //发送有效地址(对方)
(0029) 
(0030) #define CH_NO_FREQ           CH_NO<<1                 //工作频段       Byte1.7-2
(0031) #define RX_EN				 1						  //接收发送切换   Byte1.0 1接收 0发送
(0032) 
(0033) #define RX2EN_YES            128                       //第2接收通道使能1    Byte2.7
(0034) #define RX2EN_NO             0                         //第2接收通道使能0    Byte2.7
(0035) #define CM_SHOCK             64                        //收发模式ShockBurst  Byte2.6
(0036) #define CM_DIRECT            0                         //收发模式DirectMode  Byte2.6
(0037) #define RFDR_1M              32                        //空中Baud=1M         Byte2.5
(0038) #define RFDR_250K            0                         //空中Baud=250K       Byte2.5
(0039) #define XOF_20MHz            4*4                       //晶体振荡器频率20MHz Byte2.4~2
(0040) #define XOF_16MHz            3*4                       //晶体振荡器频率16MHz 
(0041) #define XOF_12MHz            2*4                       //晶体振荡器频率12MHz 
(0042) #define XOF_8MHz             1*4                       //晶体振荡器频率8MHz  
(0043) #define XOF_4MHz             0*4                       //晶体振荡器频率4MHz  
(0044) #define PA_PWR_0        	 0                         //输出功率-20dBm      Byte2.1~0 
(0045) #define PA_PWR_1         	 1                         //输出功率-10dBm      
(0046) #define PA_PWR_2          	 2                         //输出功率-5dBm       
(0047) #define PA_PWR_3         	 3                         //输出功率 0dBm          
(0048) 
(0049) #define ADDR_W				 (ADDRSIZE<<5)			   //地址位数 			 Byte3.7~2
(0050) #define CRC_MODE_16BIT       2                         //CRC16模式           Byte3.1     1
(0051) #define CRC_MODE_8BIT        0                         //CRC8模式            Byte3.1     
(0052) #define CRC_EN               1                         //CRC使能             Byte3.0     1
(0053) #define CRC16_EN             3                         //CRC16模式使能       
(0054) #define CRC8_EN              1                         //CRC8模式使能        
(0055) 
(0056) #define RX_ADDRESS_0         RX_ADDRESS & 0xff         //通道1接收有效地址第1字节 Byte4
(0057) #define RX_ADDRESS_1         (RX_ADDRESS >> 8) & 0xff  //通道1接收有效地址第2字节 Byte5
(0058) #define RX_ADDRESS_2         (RX_ADDRESS >> 16) & 0xff //通道1接收有效地址第3字节 Byte6
(0059) #define RX_ADDRESS_3         RX_ADDRESS >> 24          //通道1接收有效地址第4字节 Byte7 
(0060) #define RX_ADDRESS_4         0			               //通道1接收有效地址第5字节 Byte8 
(0061)   
(0062) #define RX_ADDRESS2          0						   //Byte9,10,11,12,13字节为通道2接收地址
(0063) 
(0064) #define DATA1_W				 SIZE*8					   //接收通道1数据包长度,Bit计算 Byte14
(0065) #define DATA2_W				 SIZE*8					   //接收通道2数据包长度,Bit计算 Byte15 
(0066) 
(0067) #define TX_ADDRESS_4		 0 						   //发送有效地址第5字节
(0068) #define TX_ADDRESS_3         TX_ADDRESS >> 24          //发送有效地址第4字节
(0069) #define TX_ADDRESS_2         (TX_ADDRESS >> 16) & 0xff //发送有效地址第3字节
(0070) #define TX_ADDRESS_1         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第2字节
(0071) #define TX_ADDRESS_0         TX_ADDRESS & 0xff         //发送有效地址第1字节
(0072) 
(0073) 
(0074) //写1Byte
(0075) void nrf2401A_WR(uchar val) 
(0076) {uchar temp,i;
(0077)   //MSB first 高位开始,先输出DATA,然后CLK_Up,再CLK_Dn
(0078)   SET(DDRC,DATA);//置DATA输出
    03C3 9AA3      SBI	0x14,3
(0079)   temp=val;
    03C4 2F60      MOV	R22,R16
(0080)   
(0081)   for (i=0;i<8;i++)
    03C5 2744      CLR	R20
    03C6 C011      RJMP	0x03D8
(0082)   {
(0083)     if ((temp&0x80)>0) 
    03C7 2422      CLR	R2
    03C8 2F86      MOV	R24,R22
    03C9 7880      ANDI	R24,0x80
    03CA 1628      CP	R2,R24
    03CB F410      BCC	0x03CE
(0084)         SET(PORTC,DATA);
    03CC 9AAB      SBI	0x15,3
    03CD C001      RJMP	0x03CF
(0085)   	else
(0086)      	CLR(PORTC,DATA);
    03CE 98AB      CBI	0x15,3
(0087) 	
(0088) 	NOP(); 
    03CF 0000      NOP
(0089)   	SET(PORTC,CLK1);
    03D0 9AA9      SBI	0x15,1
(0090)   	NOP();
    03D1 0000      NOP
(0091) 	NOP();
    03D2 0000      NOP
(0092) 	NOP();
    03D3 0000      NOP
(0093) 	NOP();
    03D4 0000      NOP
(0094) 	CLR(PORTC,CLK1);
    03D5 98A9      CBI	0x15,1
(0095)   
(0096)   	temp=temp<<1;
    03D6 0F66      LSL	R22
    03D7 9543      INC	R20
    03D8 3048      CPI	R20,0x8
    03D9 F368      BCS	0x03C7
    03DA D0CC      RCALL	pop_gset2
    03DB 9508      RET
(0097)   }
(0098) }
(0099) 
(0100) //读1Byte
(0101) uchar nrf2401A_RD() 
(0102) {uchar temp=0,i;
_nrf2401A_RD:
  i                    --> R16
  temp                 --> R18
    03DC 2722      CLR	R18
(0103)   //MSB first 高位开始,先读入DATA,然后CLK_Up,再CLK_Dn
(0104)   CLR(DDRC,DATA);//置DATA输入
    03DD 98A3      CBI	0x14,3
(0105)   temp=0;
(0106)   
(0107)   for (i=0;i<8;i++)
    03DE 2700      CLR	R16
    03DF C00C      RJMP	0x03EC
(0108)   {
(0109)     temp=temp<<1;
    03E0 0F22      LSL	R18
(0110)     if ((PINC&(1<<DATA)))
    03E1 9B9B      SBIS	0x13,3
    03E2 C002      RJMP	0x03E5
(0111)        temp=temp|0x01; 
    03E3 6021      ORI	R18,1
    03E4 C001      RJMP	0x03E6
(0112) 	else temp=temp&0xfe;
    03E5 7F2E      ANDI	R18,0xFE
(0113) 	
(0114)   	SET(PORTC,CLK1);
    03E6 9AA9      SBI	0x15,1
(0115)   	NOP();
    03E7 0000      NOP
(0116) 	NOP();
    03E8 0000      NOP
(0117) 	NOP();
    03E9 0000      NOP
(0118)     CLR(PORTC,CLK1);
    03EA 98A9      CBI	0x15,1
    03EB 9503      INC	R16
    03EC 3008      CPI	R16,0x8
    03ED F390      BCS	0x03E0
(0119)   }
(0120)   
(0121) 	return temp;
    03EE 2F02      MOV	R16,R18
    03EF 9508      RET
(0122) }
(0123) 
(0124) //PwrDown->StandBy
(0125) void nrf2401A_StandBy()
(0126) {
(0127)    SET(PORTB,PWR);
_nrf2401A_StandBy:
    03F0 9AC6      SBI	0x18,6
(0128)    CLR(PORTD,CE);
    03F1 9894      CBI	0x12,4
(0129)    CLR(PORTB,CS);
    03F2 98C1      CBI	0x18,1
    03F3 9508      RET
(0130) }
(0131) 
(0132) //->PwrDown
(0133) void nrf2401A_Off()
(0134) {
(0135)   CLR(PORTB,PWR);
_nrf2401A_Off:
    03F4 98C6      CBI	0x18,6
(0136)   CLR(PORTD,CE);
    03F5 9894      CBI	0x12,4
(0137)   CLR(PORTB,CS);
    03F6 98C1      CBI	0x18,1
    03F7 9508      RET
(0138) }
(0139) 
(0140) //配置模式
(0141) void nrf2401A_RwOn()
(0142) {
(0143)   SET(PORTB,PWR);
_nrf2401A_RwOn:
    03F8 9AC6      SBI	0x18,6
(0144)   CLR(PORTD,CE);
    03F9 9894      CBI	0x12,4
(0145)   SET(PORTB,CS);
    03FA 9AC1      SBI	0x18,1
    03FB 9508      RET
(0146) }
(0147) 
(0148) //工作模式
(0149) void nrf2401A_Run()
(0150) {
(0151)   SET(PORTC,PWR);
_nrf2401A_Run:
    03FC 9AAE      SBI	0x15,6
(0152)   CLR(PORTB,CS);        //first
    03FD 98C1      CBI	0x18,1
(0153)   SET(PORTD,CE);
    03FE 9A94      SBI	0x12,4
    03FF 9508      RET

⌨️ 快捷键说明

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