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

📄 2.4g+̤

📁 2.4G无线模块资料
💻 4G+̤
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    003F EFCF      LDI	R28,0xFF
    0040 E0D2      LDI	R29,2
    0041 BFCD      OUT	0x3D,R28
    0042 BFDE      OUT	0x3E,R29
    0043 51C0      SUBI	R28,0x10
    0044 40D0      SBCI	R29,0
    0045 EA0A      LDI	R16,0xAA
    0046 8308      STD	Y+0,R16
    0047 2400      CLR	R0
    0048 E4E9      LDI	R30,0x49
    0049 E0F1      LDI	R31,1
    004A E011      LDI	R17,1
    004B 36E5      CPI	R30,0x65
    004C 07F1      CPC	R31,R17
    004D F011      BEQ	0x0050
    004E 9201      ST	R0,Z+
    004F CFFB      RJMP	0x004B
    0050 8300      STD	Z+0,R16
    0051 E3E4      LDI	R30,0x34
    0052 E0F0      LDI	R31,0
    0053 E0A0      LDI	R26,0
    0054 E0B1      LDI	R27,1
    0055 E010      LDI	R17,0
    0056 37ED      CPI	R30,0x7D
    0057 07F1      CPC	R31,R17
    0058 F021      BEQ	0x005D
    0059 95C8      LPM
    005A 9631      ADIW	R30,1
    005B 920D      ST	R0,X+
    005C CFF9      RJMP	0x0056
    005D D001      RCALL	_main
_exit:
    005E CFFF      RJMP	_exit
_main:
  Get_SO               --> R20
    005F 9721      SBIW	R28,1
FILE: E:\项目\PS2无~1\progamme\sendavrnrf24l01\sendavrnrf24l01\main.c
(0001) //ICC-AVR application builder : 2006-02-12 14:00:00
(0002) // Target : ATmega48
(0003) // Crystal: 8.000Mhz
(0004) // Author:  jackyan
(0005) // Oled Type : white
(0006) //#define fosc 8000000
(0007) //#define baud 9600
(0008) #include "iom48v.h"
(0009) #include "macros.h"
(0010) #include "defs.h"
(0011) /*-----------------------------------------------------------------------------
(0012)    Global Defines
(0013) ------------------------------------------------------------------------------*/
(0014) unsigned char   key_debug;
(0015) unsigned char 	Buffer[]={
(0016) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0017) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0018) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0019) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0020) };
(0021) #define TX_ADR_WIDTH    5   // 5 bytes TX(RX) address width
(0022) #define TX_PLOAD_WIDTH  20  // 16 bytes TX payload
(0023) unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
(0024) void init_CPU (void);
(0025) void delayms(unsigned short	dly);//当dly=1时,延时的时间是1ms  4MHz晶震
(0026) void INIT_io(void);
(0027) void RX_Mode(void);
(0028) void TX_Mode(void);
(0029) void delay(void);
(0030) unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
(0031) unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
(0032) unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value);
(0033) unsigned char SPI_Read(unsigned char reg);
(0034) void clear_buf(unsigned char	*ptr,unsigned char number);
(0035) unsigned char accept_flag=0;
(0036) unsigned char send_flag=0;
(0037) unsigned int accept_time=0;
(0038) void nrf24l01init(void);
(0039) void timer0_init(void);
(0040) //****************************************************************//
(0041) // SPI(nRF24L01) commands
(0042) #define READ_REG        0x00  // Define read command to register
(0043) #define WRITE_REG       0x20  // Define write command to register
(0044) #define RD_RX_PLOAD     0x61  // Define RX payload register address
(0045) #define WR_TX_PLOAD     0xA0  // Define TX payload register address
(0046) #define FLUSH_TX        0xE1  // Define flush TX register command
(0047) #define FLUSH_RX        0xE2  // Define flush RX register command
(0048) #define REUSE_TX_PL     0xE3  // Define reuse TX payload register command
(0049) //#define NOP             0xFF  // Define No Operation, might be used to read status register
(0050) //***************************************************//
(0051) // SPI(nRF24L01) registers(addresses)
(0052) #define CONFIG          0x00  // 'Config' register address
(0053) #define EN_AA           0x01  // 'Enable Auto Acknowledgment' register address
(0054) #define EN_RXADDR       0x02  // 'Enabled RX addresses' register address
(0055) #define SETUP_AW        0x03  // 'Setup address width' register address
(0056) #define SETUP_RETR      0x04  // 'Setup Auto. Retrans' register address
(0057) #define RF_CH           0x05  // 'RF channel' register address
(0058) #define RF_SETUP        0x06  // 'RF setup' register address
(0059) #define STATUS          0x07  // 'Status' register address
(0060) #define OBSERVE_TX      0x08  // 'Observe TX' register address
(0061) #define CD              0x09  // 'Carrier Detect' register address
(0062) #define RX_ADDR_P0      0x0A  // 'RX address pipe0' register address
(0063) #define RX_ADDR_P1      0x0B  // 'RX address pipe1' register address
(0064) #define RX_ADDR_P2      0x0C  // 'RX address pipe2' register address
(0065) #define RX_ADDR_P3      0x0D  // 'RX address pipe3' register address
(0066) #define RX_ADDR_P4      0x0E  // 'RX address pipe4' register address
(0067) #define RX_ADDR_P5      0x0F  // 'RX address pipe5' register address
(0068) #define TX_ADDR         0x10  // 'TX address' register address
(0069) #define RX_PW_P0        0x11  // 'RX payload width, pipe0' register address
(0070) #define RX_PW_P1        0x12  // 'RX payload width, pipe1' register address
(0071) #define RX_PW_P2        0x13  // 'RX payload width, pipe2' register address
(0072) #define RX_PW_P3        0x14  // 'RX payload width, pipe3' register address
(0073) #define RX_PW_P4        0x15  // 'RX payload width, pipe4' register address
(0074) #define RX_PW_P5        0x16  // 'RX payload width, pipe5' register address
(0075) #define FIFO_STATUS     0x17  // 'FIFO Status Register' register address
(0076) #define MAX_RT  	0x10  // Max #of TX retrans interrupt
(0077) #define TX_DS   	0x20  // TX data sent interrupt
(0078) #define RX_DR   	0x40  // RX data received
(0079) //-----------------------------------------------------------------------------
(0080) //------------------------------------------------------
(0081) unsigned char t20ms;
(0082) #define BIT(x)	           (1 << (x))
(0083) #define SETBIT(x, y)   	   (x |= y)
(0084) #define CLEARBIT(x, y) 	   (x &= ~y)
(0085) #define CHECKBIT(x, y) 	   (x & y)
(0086) #define BIT7 0x80
(0087) #define BIT6 0x40
(0088) #define BIT5 0x20
(0089) #define BIT4 0x10
(0090) #define BIT3 0x08
(0091) #define BIT2 0x04
(0092) #define BIT1 0x02
(0093) #define BIT0 0x01
(0094) #define nRF24L01_CSN        BIT6
(0095) #define nRF24L01_SCK        BIT7
(0096) #define nRF24L01_MOSI       BIT0
(0097) #define nRF24L01_CE         BIT5   
(0098) #define nRF24L01_MISO 	    BIT1
(0099) #define nRF24L01_IRQ  	    BIT2
(0100) #define nRF24L01_CSNH       SETBIT(PORTD, nRF24L01_CSN)     
(0101) #define nRF24L01_CSNL       CLEARBIT(PORTD, nRF24L01_CSN)   
(0102) 
(0103) #define nRF24L01_CSN_DIR    SETBIT(DDRD, nRF24L01_CSN)  //OUTPUT
(0104) 
(0105) #define nRF24L01_SCKH       SETBIT(PORTD,nRF24L01_SCK)      
(0106) #define nRF24L01_SCKL       CLEARBIT(PORTD,nRF24L01_SCK)    
(0107) #define nRF24L01_SCK_DIR   SETBIT(DDRD,nRF24L01_SCK)  //OUTPUT
(0108)  
(0109) #define nRF24L01_MOSIH      SETBIT(PORTB,nRF24L01_MOSI)     
(0110) #define nRF24L01_MOSIL	    CLEARBIT(PORTB,nRF24L01_MOSI)   
(0111) #define nRF24L01_MOSI_DIR   SETBIT(DDRB,nRF24L01_MOSI)
(0112) 
(0113) #define nRF24L01_CEH        SETBIT(PORTD,nRF24L01_CE)  //OUTPUT   
(0114) #define nRF24L01_CEL        CLEARBIT(PORTD,nRF24L01_CE)
(0115) #define nRF24L01_CE_DIR     SETBIT(DDRD,nRF24L01_CE)
(0116) 
(0117) #define nRF24L01_IRQ_DIR     CLEARBIT(DDRB,nRF24L01_IRQ) //INPUT
(0118) 
(0119) #define nRF24L01_MISO_DIR    CLEARBIT(DDRB,nRF24L01_MISO) //INPUT
(0120) #define key1 	BIT4
(0121) #define key2 	BIT3
(0122) #define key3 	BIT2
(0123) #define key4 	BIT5
(0124) #define key5 	BIT4
(0125) #define key6 	BIT3
(0126) #define key7 	BIT2
(0127) #define key8 	BIT1
(0128) #define 	bit20ms 					BIT0
(0129) unsigned char flag;
(0130) unsigned char key1_pulse;
(0131) unsigned char key2_pulse;
(0132) unsigned char key3_pulse;
(0133) unsigned char key4_pulse;
(0134) unsigned char key5_pulse;
(0135) unsigned char key6_pulse;
(0136) unsigned char key7_pulse;
(0137) unsigned char key8_pulse;
(0138) unsigned char key1_flag;
(0139) unsigned char key2_flag;
(0140) unsigned char key3_flag;
(0141) unsigned char key4_flag;
(0142) unsigned char key5_flag;
(0143) unsigned char key6_flag;
(0144) unsigned char key7_flag;
(0145) unsigned char key8_flag;
(0146) unsigned char key8_long_flag;
(0147) unsigned char send_flag;
(0148) unsigned char key1_time;
(0149) unsigned char key2_time;
(0150) unsigned char key3_time;
(0151) unsigned char key4_time;
(0152) unsigned char key5_time;
(0153) unsigned char key6_time;
(0154) unsigned char key7_time;
(0155) unsigned char key8_time;
(0156) //-----------------------------------------------------------------------------
(0157) void main(void)
(0158) {
(0159)  	unsigned char Get_SO=0;
    0060 2744      CLR	R20
(0160)     CLI();                   /* global interrupt disable */
    0061 94F8      BCLR	7
(0161)     init_CPU ();
    0062 D08D      RCALL	_init_CPU
(0162)     delayms(100);	//延时10ms*10=100ms
    0063 E604      LDI	R16,0x64
    0064 E010      LDI	R17,0
    0065 D0B2      RCALL	_delayms
(0163)     delayms(100);	//延时10ms*10=100ms
    0066 E604      LDI	R16,0x64
    0067 E010      LDI	R17,0
    0068 D0AF      RCALL	_delayms
(0164) 	timer0_init();
    0069 D170      RCALL	_timer0_init
(0165) 	RX_Mode();
    006A D125      RCALL	_RX_Mode
(0166) 	SEI();
    006B 9478      BSET	7
    006C C079      RJMP	0x00E6
(0167) 	while(1)
(0168) 	{		
(0169) 		//	if(!(PINB& 0x01))
(0170) 		WDR();
    006D 95A8      WDR
(0171) 		if(!(PINB& nRF24L01_IRQ))
    006E 991A      SBIC	0x03,2
    006F C022      RJMP	0x0092
(0172) 		{//nRF24L01 接收数据
(0173) 			key_debug=SPI_Read(STATUS);			// read register STATUS's value
    0070 E007      LDI	R16,7
    0071 D0DE      RCALL	_SPI_Read
    0072 93000164  STS	key_debug,R16
(0174) 			if(key_debug&RX_DR)					// if renRF24L01_CEive data ready (RX_DR) interrupt
    0074 FF06      SBRS	R16,6
    0075 C006      RJMP	0x007C
(0175) 				SPI_Read_Buf(RD_RX_PLOAD,Buffer,TX_PLOAD_WIDTH);// read renRF24L01_CEive payload from RX_FIFO buffer
    0076 E184      LDI	R24,0x14
    0077 8388      STD	Y+0,R24
    0078 E020      LDI	R18,0
    0079 E031      LDI	R19,1
    007A E601      LDI	R16,0x61
    007B D0E2      RCALL	_SPI_Read_Buf
(0176) 			if(key_debug&MAX_RT) SPI_RW_Reg(FLUSH_TX,0);
    007C 90200164  LDS	R2,key_debug
    007E FE24      SBRS	R2,4
    007F C003      RJMP	0x0083
    0080 2722      CLR	R18
    0081 EE01      LDI	R16,0xE1
    0082 D0BE      RCALL	_SPI_RW_Reg
(0177) 			SPI_RW_Reg(WRITE_REG+STATUS,0xff);// clear RX_DR or TX_DS or MAX_RT interrupt flag
    0083 EF2F      LDI	R18,0xFF
    0084 E207      LDI	R16,0x27
    0085 D0BB      RCALL	_SPI_RW_Reg
(0178) 			RX_Mode();
    0086 D109      RCALL	_RX_Mode
(0179) 			if((Buffer[0]==80)&&(Buffer[1]==01))//data accept
    0087 91800100  LDS	R24,Buffer
    0089 3580      CPI	R24,0x50
    008A F439      BNE	0x0092
    008B 91800101  LDS	R24,Buffer+1
    008D 3081      CPI	R24,1
    008E F419      BNE	0x0092
(0180) 			{
(0181) 			 	accept_flag=1;
    008F E081      LDI	R24,1
    0090 93800145  STS	accept_flag,R24
(0182) 			}
(0183) 		}
(0184) 		if(send_flag==1)//data send
    0092 91800146  LDS	R24,send_flag
    0094 3081      CPI	R24,1
    0095 F481      BNE	0x00A6
(0185) 		{
(0186) 		 		Buffer[0]=80;
    0096 E580      LDI	R24,0x50
    0097 93800100  STS	Buffer,R24
(0187) 				Buffer[1]=02;
    0099 E082      LDI	R24,2
    009A 93800101  STS	Buffer+1,R24
(0188) 				TX_Mode();			// set TX Mode and transmitting
    009C D112      RCALL	_TX_Mode
(0189) 				delayms(100);
    009D E604      LDI	R16,0x64
    009E E010      LDI	R17,0
    009F D078      RCALL	_delayms
(0190) 				RX_Mode();
    00A0 D0EF      RCALL	_RX_Mode
(0191) 				Buffer[0]=00;
    00A1 2422      CLR	R2
    00A2 92200100  STS	Buffer,R2
(0192) 				Buffer[1]=00;
    00A4 92200101  STS	Buffer+1,R2
(0193) 		}
(0194) //========================================数据一直发送
(0195) 		if(key8_long_flag==1)//data send
    00A6 91800151  LDS	R24,key8_long_flag
    00A8 3081      CPI	R24,1
    00A9 F481      BNE	0x00BA
(0196) 		{
(0197) 		 		Buffer[0]=80;
    00AA E580      LDI	R24,0x50
    00AB 93800100  STS	Buffer,R24
(0198) 				Buffer[1]=02;
    00AD E082      LDI	R24,2
    00AE 93800101  STS	Buffer+1,R24
(0199) 				TX_Mode();			// set TX Mode and transmitting
    00B0 D0FE      RCALL	_TX_Mode
(0200) 				delayms(100);
    00B1 E604      LDI	R16,0x64
    00B2 E010      LDI	R17,0
    00B3 D064      RCALL	_delayms
(0201) 				RX_Mode();
    00B4 D0DB      RCALL	_RX_Mode
(0202) 				Buffer[0]=00;
    00B5 2422      CLR	R2
    00B6 92200100  STS	Buffer,R2
(0203) 				Buffer[1]=00;
    00B8 92200101  STS	Buffer+1,R2
(0204) 		}
(0205) //========================================数据一直发送
(0206) 		if(send_flag==1)
    00BA 91800146  LDS	R24,send_flag
    00BC 3081      CPI	R24,1
    00BD F4D1      BNE	0x00D8
(0207) 		{
(0208) 		   accept_time++;
    00BE 91800147  LDS	R24,accept_time
    00C0 91900148  LDS	R25,accept_time+1
    00C2 9601      ADIW	R24,1
    00C3 93900148  STS	accept_time+1,R25
    00C5 93800147  STS	accept_time,R24
(0209) 		   if(accept_time>30)
    00C7 E18E      LDI	R24,0x1E
    00C8 E090      LDI	R25,0
    00C9 90200147  LDS	R2,accept_time
    00CB 90300148  LDS	R3,accept_time+1
    00CD 1582      CP	R24,R2
    00CE 0593      CPC	R25,R3
    00CF F440      BCC	0x00D8
(0210) 		   {
(0211) 		   	 send_flag=0;
    00D0 2422      CLR	R2
    00D1 92200146  STS	send_flag,R2
(0212) 			 accept_time=0;
    00D3 2433      CLR	R3
    00D4 92300148  STS	accept_time+1,R3
    00D6 92200147  STS	accept_time,R2
(0213) 		   }
(0214) 		}
(0215) 		if(accept_flag==1)
    00D8 91800145  LDS	R24,accept_flag
    00DA 3081      CPI	R24,1
    00DB F451      BNE	0x00E6
(0216) 		{
(0217) 		    accept_flag=0;
    00DC 2422      CLR	R2
    00DD 92200145  STS	accept_flag,R2
(0218)     	 	PORTB = 0x80;
    00DF E880      LDI	R24,0x80
    00E0 B985      OUT	0x05,R24
(0219) 		    delayms(5000);	//延时10ms*10=100ms
    00E1 E808      LDI	R16,0x88
    00E2 E113      LDI	R17,0x13
    00E3 D034      RCALL	_delayms
(0220) 		    PORTB = 0x00;
    00E4 2422      CLR	R2
    00E5 B825      OUT	0x05,R2
    00E6 CF86      RJMP	0x006D
    00E7 9621      ADIW	R28,1
    00E8 9508      RET
(0221) 		}
(0222) 	}
(0223) 
(0224) 
(0225) }
(0226) void nrf24l01init(void)
(0227) {
(0228)  	 nRF24L01_IRQ_DIR;
_nrf24l01init:
    00E9 9822      CBI	0x04,2
(0229) 	 nRF24L01_MISO_DIR;
    00EA 9821      CBI	0x04,1
(0230) 	 nRF24L01_CE_DIR;

⌨️ 快捷键说明

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