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

📄 jifeng_jieshou.s

📁 非常适合实用的无线射频芯片NRF905
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 203
; }
; //--------------------------------系统状态初始化--------------------------------
; void system_Init(void)			
; {
	.dbline 205
; 
;    	Hign_nrf905_CSN;			// SPI使能
	sbi 0x18,4
	.dbline 205
	.dbline 206
; 	Low_nrf905_SCK;				
	cbi 0x18,7
	.dbline 206
	.dbline 207
; 	Low_nrf905_DR;				// DR=0
	cbi 0x18,2
	.dbline 207
	.dbline 208
; 	Low_nrf905_AM;				// AM=0
	cbi 0x18,3
	.dbline 208
	.dbline 209
; 	Low_nrf905_CD;				// CD=0
	cbi 0x12,4
	.dbline 209
	.dbline 210
; 	Hign_nrf905_PWR;		    // PWR=1
	sbi 0x18,1
	.dbline 210
	.dbline 211
; 	Low_nrf905_TRX_CE;			// nrf905_TRX_CE=0
	cbi 0x12,5
	.dbline 211
	.dbline 212
; 	Low_nrf905_TX_EN ;			// nrf905_TX_EN=0
	cbi 0x18,0
	.dbline 212
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Config905 _Config905 fV
;              i -> R20
	.even
_Config905::
	rcall push_gset1
	.dbline -1
	.dbline 216
; }
; //--------------------------------NRF905寄存器初始化函数------------------------
; void Config905(void)
; {
	.dbline 218
; 	uchar i;
; 	Low_nrf905_CSN;				//SPI使能											
	cbi 0x18,4
	.dbline 218
	.dbline 219
; 	Delay(1);				   
	ldi R16,1
	ldi R17,0
	rcall _Delay
	.dbline 220
; 	for (i=0;i<11;i++)			//碞RF905配置字
	clr R20
	rjmp L19
L16:
	.dbline 221
	.dbline 222
	ldi R24,<_RFConf
	ldi R25,>_RFConf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SpiReadSpiWrite
	.dbline 223
L17:
	.dbline 220
	inc R20
L19:
	.dbline 220
	cpi R20,11
	brlo L16
	.dbline 224
; 	{
; 	 SpiReadSpiWrite(RFConf[i]);
; 	}
; 	Hign_nrf905_CSN;					// Disable Spi
	sbi 0x18,4
	.dbline 224
	.dbline -2
L15:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e TxPacket _TxPacket fV
;              i -> R20
	.even
_TxPacket::
	rcall push_gset1
	.dbline -1
	.dbline 228
; }
; //--------------------------------NRF905待发数据打包----------------------------
; void TxPacket(void)
; {
	.dbline 230
; 	uchar i;
; 	Low_nrf905_CSN;		   				// 使能Spi,允许对nrf905进行读写操作
	cbi 0x18,4
	.dbline 230
	.dbline 231
; 	Delay(1);
	ldi R16,1
	ldi R17,0
	rcall _Delay
	.dbline 232
; 	SpiReadSpiWrite(WTP);				// 写数据前先写写数据命令
	ldi R16,32
	rcall _SpiReadSpiWrite
	.dbline 233
; 	for (i=0;i<32;i++)
	clr R20
	rjmp L24
L21:
	.dbline 234
	.dbline 235
	ldi R24,<_TxRxBuffer
	ldi R25,>_TxRxBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SpiReadSpiWrite
	.dbline 236
L22:
	.dbline 233
	inc R20
L24:
	.dbline 233
	cpi R20,32
	brlo L21
	.dbline 237
; 	{
; 	SpiReadSpiWrite(TxRxBuffer[i]);		// 待发送的32字节数据
; 	}						
; 	Hign_nrf905_CSN;
	sbi 0x18,4
	.dbline 237
	.dbline 238
; 	Delay(1);							// 关闭Spi,不允许对nrf905进行读写操作
	ldi R16,1
	ldi R17,0
	rcall _Delay
	.dbline 239
; 	Low_nrf905_CSN;						// 使能Spi
	cbi 0x18,4
	.dbline 239
	.dbline 240
; 	SpiReadSpiWrite(WTA);				// 写地址前首先先写地址命令
	ldi R16,34
	rcall _SpiReadSpiWrite
	.dbline 241
; 	for (i=0;i<4;i++)					// 写入4 bytes 接收地址
	clr R20
	rjmp L28
L25:
	.dbline 242
	.dbline 243
	ldi R24,<_TxAddress
	ldi R25,>_TxAddress
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _SpiReadSpiWrite
	.dbline 244
L26:
	.dbline 241
	inc R20
L28:
	.dbline 241
	cpi R20,4
	brlo L25
	.dbline 245
; 	{
; 	SpiReadSpiWrite(TxAddress[i]);
; 	}
; 	Hign_nrf905_CSN;					// 关闭Spi
	sbi 0x18,4
	.dbline 245
	.dbline 246
; 	Hign_nrf905_TRX_CE;					// Set TRX_CE high,start Tx data transmission
	sbi 0x12,5
	.dbline 246
	.dbline 247
; 	Delay(1);							// 等待DR变高
	ldi R16,1
	ldi R17,0
	rcall _Delay
	.dbline 248
; 	Low_nrf905_TRX_CE;					// 设置TRX_CE=0
	cbi 0x12,5
	.dbline 248
	.dbline -2
L20:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e SetTxMode _SetTxMode fV
	.even
_SetTxMode::
	.dbline -1
	.dbline 252
; }
; //------------------------------设置发送模式------------------------------------
; void SetTxMode(void)
; {
	.dbline 253
; 	Low_nrf905_TRX_CE;				//
	cbi 0x12,5
	.dbline 253
	.dbline 254
; 	Hign_nrf905_TX_EN;				//发送使能
	sbi 0x18,0
	.dbline 254
	.dbline 255
; 	Delay(2); 				// delay for mode change(>=650us)
	ldi R16,2
	ldi R17,0
	rcall _Delay
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SetRxMode _SetRxMode fV
	.even
_SetRxMode::
	.dbline -1
	.dbline 259
; }
; //------------------------------设置接收模式激发--------------------------------
; void SetRxMode(void)
; {
	.dbline 260
; 	Low_nrf905_TX_EN;
	cbi 0x18,0
	.dbline 260
	.dbline 261
; 	Hign_nrf905_TRX_CE;
	sbi 0x12,5
	.dbline 261
	.dbline 262
; 	Delay(10); 					// delay for mode change(>=650us)
	ldi R16,10
	ldi R17,0
	rcall _Delay
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TX _TX fV
	.even
_TX::
	.dbline -1
	.dbline 266
; }
; //------------------------------发送数据----------------------------------------
; void TX(void)
; {
	.dbline 267
;      SetTxMode();	   // Set nRF905 in Tx mode
	rcall _SetTxMode
	.dbline 268
; 	 TxPacket();			   // Send data by nRF905
	rcall _TxPacket
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e CheckDR _CheckDR fc
	.even
_CheckDR::
	.dbline -1
	.dbline 272
; }
; //-----------------------------判断是否收到数据---------------------------------
; unsigned char CheckDR(void)		//检查是否有新数据传入 
; {
	.dbline 273
; 	if (PINB & (1 << PB2))
	sbis 0x16,2
	rjmp L33
	.dbline 274
; 	{
	.dbline 275
; 		return 1; 	 	  		//收到数据
	ldi R16,1
	rjmp L32
L33:
	.dbline 278
; 	}
; 	else
; 	{
	.dbline 279
; 		return 0;
	clr R16
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e RxPacket _RxPacket fV
;              i -> R20
	.even
_RxPacket::
	rcall push_gset1
	.dbline -1
	.dbline 284
; 	}
; }
; //-----------------------------------读接收数据包-------------------------------
; void RxPacket(void)							//读数据
; {
	.dbline 286
; 	uchar i;
;     Low_nrf905_TRX_CE;
	cbi 0x12,5
	.dbline 286
	.dbline 287
; 	Low_nrf905_CSN;						    // 使能SPI
	cbi 0x18,4
	.dbline 287
	.dbline 288
;     Delay(1);
	ldi R16,1
	ldi R17,0
	rcall _Delay
	.dbline 289
; 	SpiReadSpiWrite(RRP);				   // 写入数据接收缓冲区数据命令
	ldi R16,36
	rcall _SpiReadSpiWrite
	.dbline 290
; 	for (i = 0 ;i < 4 ;i++)
	clr R20
	rjmp L39
L36:
	.dbline 291
	.dbline 292
	clr R16
	rcall _SpiReadSpiWrite
	ldi R24,<_TxRxBuffer
	ldi R25,>_TxRxBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 293
L37:
	.dbline 290
	inc R20
L39:
	.dbline 290
	cpi R20,4
	brlo L36
	.dbline 294
; 	{   
; 	TxRxBuffer[i]=SpiReadSpiWrite(0);	  // 读取数据接收缓冲区数据       
; 	}
; 	Hign_nrf905_CSN;
	sbi 0x18,4
	.dbline 294
	.dbline 295
;     Delay(2);                            //
	ldi R16,2
	ldi R17,0
	rcall _Delay
	.dbline 296
; 	Hign_nrf905_TRX_CE;							
	sbi 0x12,5
	.dbline 296
	.dbline -2
L35:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e RX _RX fV
	.even
_RX::
	.dbline -1
	.dbline 300
; }
; //--------------------------------设置接收模式----------------------------------
; void  RX(void)
; {
	.dbline 301
;     SetRxMode();			          //设置NRF905接收模式
	rcall _SetRxMode
L41:
	.dbline 302
L42:
	.dbline 302
;     while (CheckDR()==0);	         //等待接收完成
	rcall _CheckDR
	tst R16
	breq L41
	.dbline 303
; 	RxPacket();                     //读取接收数据缓冲区
	rcall _RxPacket
	.dbline 304
; 	Delay(10);
	ldi R16,10
	ldi R17,0
	rcall _Delay
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Delay _LCD_Delay fV
;              i -> R20,R21
;           time -> R16,R17
	.even
_LCD_Delay::
	rcall push_gset1
	.dbline -1
	.dbline 311
; }
; //******************************************************************************
; //以下为LCD驱动
; //******************************************************************************
; //------------------------------------------------------------------------------
; void LCD_Delay(uint time)
; {
	.dbline 313
	mov R20,R16
	mov R21,R17
	rjmp L48
L45:
	.dbline 313
L46:
	.dbline 313
	subi R20,1
	sbci R21,0
L48:
	.dbline 313
; 	uint i;
; 	for(i=time;i>0;i--);
	cpi R20,0
	cpc R20,R21
	brne L45
X1:
	.dbline -2
L44:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r time 16 i
	.dbend
	.dbfunc e Lcd_init _Lcd_init fV
	.even
_Lcd_init::
	.dbline -1
	.dbline 317
; }
; //---------------------------LCD初始化---------------------------------------
; void Lcd_init(void)
; {
	.dbline 318
;  	DDRC=0xF8;
	ldi R24,248
	out 0x14,R24
	.dbline 320
; 	//ASSR &= ~(1 <<AS2); 
; 	Hign_LCD_CS;
	sbi 0x15,7
	.dbline 320
	.dbline 321
; 	Low_LCD_RESET;	 	//硬复位
	cbi 0x15,6
	.dbline 321
	.dbline 322
; 	LCD_Delay(50);
	ldi R16,50
	ldi R17,0
	rcall _LCD_Delay
	.dbline 323
; 	Hign_LCD_RESET;			
	sbi 0x15,6
	.dbline 323
	.dbline 325
; 	////////////////////////////////////////////////////////
; 	Lcd_Write_command(0xe2);	//软复位RESet:initialize the internal functions
	ldi R16,226
	rcall _Lcd_Write_command
	.dbline 326
; 	LCD_Delay(100);
	ldi R16,100
	ldi R17,0
	rcall _LCD_Delay
	.dbline 327
; 	Lcd_Write_command(0xae);	//DISPLAY OFF 
	ldi R16,174
	rcall _Lcd_Write_command
	.dbline 328
; 	Lcd_Write_command(0xa1);	//ADC SELECT ON
	ldi R16,161
	rcall _Lcd_Write_command
	.dbline 329
; 	Lcd_Write_command(0xc0);	//SHL SELECT COM64-COM1
	ldi R16,192
	rcall _Lcd_Write_command
	.dbline 330
; 	Lcd_Write_command(0xa2);	//SET LCD BIAS(1/9)
	ldi R16,162
	rcall _Lcd_Write_command
	.dbline 332
; 	//////////////////////////////////////////////////////
; 	Lcd_Write_command(0x2c);//SET POWER CONTROL(VC=1)
	ldi R16,44
	rcall _Lcd_Write_command
	.dbline 333
; 	Lcd_Write_command(0x2e);	//SET POWER CONTROL(VR=1)
	ldi R16,46
	rcall _Lcd_Write_command
	.dbline 334
; 	Lcd_Write_command(0x2f);	//SET POWER CONTROL(VF=1)
	ldi R16,47
	rcall _Lcd_Write_command
	.dbline 336
; 	////////////////////////////////////////////////////////
; 	Lcd_Write_command(0x26);	//REGULATOR RESISTOR SELECT(R2 R1 R0)=110
	ldi R16,38
	rcall _Lcd_Write_command
	.dbline 337
; 	Lcd_Write_command(0x81);	//SET REFERENCE VOLTAGE MODE	
	ldi R16,129
	rcall _Lcd_Write_command
	.dbline 338
; 	Lcd_Write_command(0x3f);	//SET REFERENCE VOLTAGE REGISTER 2ch
	ldi R16,63
	rcall _Lcd_Write_command
	.dbline 340
; 	//////////////////////////////////////////////////////
; 	Lcd_Write_command(0x7f);	//START DISPLAY LINE(COM1)  起始行
	ldi R16,127
	rcall _Lcd_Write_command
	.dbline 342
; 	//////////////////////////////////////////////////////
; 	Lcd_Write_command(0xe0);	//写入数据时地址自动加1,读数据时不变
	ldi R16,224
	rcall _Lcd_Write_command
	.dbline 344
; 	//////////////////////////////////////////////////////////
; 	Lcd_Write_command(0xaf);	//DISPLAY ON  
	ldi R16,175
	rcall _Lcd_Write_command
	.dbline -2
L49:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Lcd_Write_Data _Lcd_Write_Data fV
;              i -> R20,R21
;           temp -> R22,R23
;           DATA -> R20
	.even
_Lcd_Write_Data::
	rcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 348
; }
; //--------------------------------LCD写数据函数---------------------------------
; void Lcd_Write_Data(uchar DATA)              //写一个字节,再加一列,正好在一页
; {                                            //定好一页后,再一列一列的写
	.dbline 350
; 	int i,temp;
; 	temp=DATA;
	mov R22,R20
	clr R23
	.dbline 351
; 	Low_LCD_RS;		
	cbi 0x15,5
	.dbline 351
	.dbline 352
; 	Hign_LCD_CS;
	sbi 0x15,7
	.dbline 352
	.dbline 353
; 	Hign_LCD_SCL;
	sbi 0x15,4
	.dbline 353
	.dbline 354
; 	LCD_Delay(1);
	ldi R16,1
	ldi R17,0
	rcall _LCD_Delay
	.dbline 355
; 	Low_LCD_CS;
	cbi 0x15,7
	.dbline 355
	.dbline 356
; 	Low_LCD_SCL;
	cbi 0x15,4
	.dbline 356
	.dbline 357
; 	Hign_LCD_RS;		//RS=1 时为写数据
	sbi 0x15,5
	.dbline 357
	.dbline 358
; 	LCD_Delay(1);
	ldi R16,1
	ldi R17,0
	rcall _LCD_Delay
	.dbline 359
; 	for(i=0;i<8;i++)
	clr R20
	clr R21
L51:
	.dbline 360
; 	{
	.dbline 361
; 		Low_LCD_SCL;
	cbi 0x15,4
	.dbline 361
	.dbline 362
; 		if(temp&0x80)
	sbrs R22,7
	rjmp L55
	.dbline 363
; 		{
	.dbline 364
; 		Hign_LCD_SI;
	sbi 0x15,3
	.dbline 364
	.dbline 365
; 		}
	rjmp L56
L55:
	.dbline 367
; 		else
; 		{
	.dbline 368
; 		Low_LCD_SI;
	cbi 0x15,3
	.dbline 368
	.dbline 369
; 		}
L56:
	.dbline 370
	ldi R16,1
	ldi R17,0
	rcall _LCD_Delay
	.dbline 371
	lsl R22
	rol R23
	.dbline 372
	sbi 0x15,4
	.dbline 372
	.dbline 373
	ldi R16,1
	ldi R17,0
	rcall _LCD_Delay

⌨️ 快捷键说明

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