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

📄 uart.s

📁 cc1020 串口通讯
💻 S
📖 第 1 页 / 共 4 页
字号:
;     }
L218:
;   }
L216:
; 
;   // Switch RX part of CC1020 on
;   WriteToCC1020Register(CC1020_MAIN,0x01);
	ldi R18,1
	clr R16
	rcall _WriteToCC1020Register
; 
;   // Return LOCK status to application
;   return (lock_status);
	mov R16,R20
L209:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
;    lock_status -> R20
; TimeOutCounter -> y+0
;       PA_POWER -> R22
;       TXANALOG -> R20
	.even
_SetupCC1020TX::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	sbiw R28,2
; }
; 
; /****************************************************************************/
; /*  This routine puts the CC1020 into TX mode (from RX). When switching to  */
; /*  TX from PD, use WakeupCC1020ToTX first                                  */
; /****************************************************************************/
; 
; char SetupCC1020TX(unsigned char TXANALOG,unsigned char PA_POWER)
; {
;   volatile int TimeOutCounter;
;   char lock_status;
; 
;   // Turn off PA to avoid frequency splatter
;   WriteToCC1020Register(CC1020_PA_POWER,0x00);
	clr R18
	ldi R16,28
	rcall _WriteToCC1020Register
; 
;   // Setup bias current adjustment
;   WriteToCC1020Register(CC1020_ANALOG,TXANALOG);
	mov R18,R20
	ldi R16,23
	rcall _WriteToCC1020Register
; 
;   // Switch into TX, switch to freq. reg B
;   WriteToCC1020Register(CC1020_MAIN,0xC1);
	ldi R18,193
	clr R16
	rcall _WriteToCC1020Register
;   
; //  WriteToCC1020Register(CC1020_MAIN,0x81);
; 
;   // Monitor LOCK
;   for(TimeOutCounter=LOCK_TIMEOUT; TimeOutCounter>0; TimeOutCounter--)
	ldi R24,32766
	ldi R25,127
	std y+1,R25
	std y+0,R24
L220:
;   {
; 	if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10) break;
	ldi R16,64
	rcall _ReadFromCC1020Register
	mov R24,R16
	andi R24,16
	cpi R24,16
	brne L224
	rjmp L222
L224:
L221:
	ldd R24,y+0
	ldd R25,y+1
	sbiw R24,1
	std y+1,R25
	std y+0,R24
	clr R2
	clr R3
	cp R2,R24
	cpc R3,R25
	brlt L220
L222:
;   }	
; 
;   // If PLL in lock
;   if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10){
	ldi R16,64
	rcall _ReadFromCC1020Register
	mov R24,R16
	andi R24,16
	cpi R24,16
	brne L226
;     // Indicate PLL in LOCK
;     lock_status = LOCK_OK;
	ldi R20,1
	rjmp L227
L226:
;   // Else (PLL out of LOCK)
;   }else{
;     // If recalibration ok
;     if(CalibrateCC1020(PA_POWER)){
	mov R16,R22
	rcall _CalibrateCC1020
	tst R16
	breq L228
;       // Indicate PLL in LOCK
;       lock_status = LOCK_RECAL_OK;
	ldi R20,2
	rjmp L229
L228:
;     // Else (recalibration failed)
;     }else{
;       // Indicate PLL out of LOCK
;       lock_status = LOCK_NOK;
	clr R20
;     }
L229:
;   }
L227:
; 
;   // Restore PA setting
;   WriteToCC1020Register(CC1020_PA_POWER,PA_POWER);
	mov R18,R22
	ldi R16,28
	rcall _WriteToCC1020Register
; 
;   // Turn OFF DCLK squelch in TX
;   WriteToCC1020Register(CC1020_INTERFACE,ReadFromCC1020Register(CC1020_INTERFACE)&~0x10);
	ldi R16,1
	rcall _ReadFromCC1020Register
	mov R18,R16
	andi R18,239
	ldi R16,1
	rcall _WriteToCC1020Register
; 
;   // Return LOCK status to application
;   return (lock_status);
	mov R16,R20
L219:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.even
_SetupCC1020PD::
; }
; 
; 
; /****************************************************************************/
; /*  This routine puts the CC1020 into power down mode. Use WakeUpCC1020ToRX */
; /*  followed by SetupCC1020RX or WakeupCC1020ToTX followed by SetupCC1020TX */
; /*  to wake up from power down                                              */
; /****************************************************************************/
; 
; void SetupCC1020PD(void)
; {
;   // Put CC1020 into power-down
;   WriteToCC1020Register(CC1020_MAIN,0x1F);
	ldi R18,31
	clr R16
	rcall _WriteToCC1020Register
; 
;   // Turn off PA to minimise current draw
;   WriteToCC1020Register(CC1020_PA_POWER,0x00);
	clr R18
	ldi R16,28
	rcall _WriteToCC1020Register
L230:
	.dbline 0 ; func end
	ret
	.even
_ResetCC1020::
; }
; 
; /****************************************************************************/
; /*  This routine resets the CC1020, clearing all registers.                 */
; /****************************************************************************/  
; 
; void ResetCC1020(void)
; {
;   // Reset CC1020
;   WriteToCC1020Register(CC1020_MAIN, 0x0F&~0x01);
	ldi R18,14
	clr R16
	rcall _WriteToCC1020Register
; 
;   // Bring CC1020 out of reset
;   WriteToCC1020Register(CC1020_MAIN, 0x1F);
	ldi R18,31
	clr R16
	rcall _WriteToCC1020Register
L231:
	.dbline 0 ; func end
	ret
;          value -> R22
;        counter -> R20
	.even
_ConfigureCC1020::
	rcall push_gset2
; }
; 
; /****************************************************************************/
; /*  This routine sends new configuration data to the CC1020                 */
; /****************************************************************************/
; 
; void ConfigureCC1020(void)
; {
	ldi R20,1
	rjmp L236
L233:
	ldi R24,<_DefaultConfig433-1
	ldi R25,>_DefaultConfig433-1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R22,Z
	mov R18,R22
	mov R16,R20
	rcall _WriteToCC1020Register
L234:
	inc R20
L236:
;   unsigned char counter;
;   unsigned char value;
;   for(counter=0x01; counter<=0x20; counter++){
	ldi R24,32
	cp R24,R20
	brsh L233
L232:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
;              i -> <dead>
;              j -> R10
	.even
_main::
;     value=DefaultConfig433[counter-1];
;     WriteToCC1020Register(counter,value); 
;   }
; }
; 
; 
; /*		RS232通信main函数		*/
; 
; void main(void)
; {
; 	uchar i,j;
; 	databak[0]=0x00;
	clr R2
	sts _databak,R2
; 	databak[1]=0x00;
	sts _databak+1,R2
; 	databak[2]=0x00;
	sts _databak+2,R2
; 	Tx_Rx=2;
	ldi R24,2
	sts _Tx_Rx,R24
; 	Rx_Time=0;
	sts _Rx_Time,R2
; 	init_devices();	// MCU初始化 
	rcall _init_devices
; 	Initial();      // 变量初始化 
	rcall _Initial
;   	WDR();			// 喂狗
	wdr
; 
; 	port_init();
	rcall _port_init
; 	uart_init();
	rcall _uart_init
; 	SEI(); 
	sei
;  
; 	SetupCC1020PD();
	rcall _SetupCC1020PD
;  	ResetCC1020() ;
	rcall _ResetCC1020
;  	ConfigureCC1020();
	rcall _ConfigureCC1020
;  	
;  	WakeUpCC1020ToRX(RXANALOG);   
	lds R16,_RXANALOG
	rcall _WakeUpCC1020ToRX
;   if(!CalibrateCC1020(PA_POWER))
	lds R16,_PA_POWER
	rcall _CalibrateCC1020
	tst R16
	brne L241
; 	boolval=2;
	ldi R24,2
	sts _boolval,R24
L241:
;    
;   WakeUpCC1020ToTX(TXANALOG);   
	lds R16,_TXANALOG
	rcall _WakeUpCC1020ToTX
;   if (!CalibrateCC1020(PA_POWER))
	lds R16,_PA_POWER
	rcall _CalibrateCC1020
	tst R16
	brne L243
;   boolval=3;  
	ldi R24,3
	sts _boolval,R24
L243:
;  	
; 	SetupAGC();
	rcall _SetupAGC
; 	SetupCC1020PD() ;
	rcall _SetupCC1020PD
; 	bool_val = SetupCC1020RX(RXANALOG, PA_POWER);
	lds R18,_PA_POWER
	lds R16,_RXANALOG
	rcall _SetupCC1020RX
	sts _bool_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
	ldi R16,1
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
	mov R18,R16
	ldi R16,1
	rcall _WriteToCC1020Register
	rjmp L246
L245:
; 	
; while(1)
; {
;  if(rsok40==1)
	lds R24,_rsok40
	cpi R24,1
	brne L248
;  {
;  //串行通讯
; 	WDR();
	wdr
; 	if(rscnt12==entercomm){
	lds R24,_rscnt12
	cpi R24,86
	brne L250
; 		entcomm();
	rcall _entcomm
; 						}
	rjmp L251
L250:
; 	else if(rscnt12==voltagedata){
	lds R24,_rscnt12
	cpi R24,1
	brne L252
; 		voltagerepol();
	rcall _voltagerepol
; 								}
	rjmp L253
L252:
; 	else if(rscnt12==currentdata){
	lds R24,_rscnt12
	cpi R24,2
	brne L254
; 		currentrepol();
	rcall _currentrepol
; 								}
L254:
; 	else{}	
L255:
L253:
L251:
; 	rsok00=0;
	clr R2
	sts _rsok00,R2
; 	rsok10=0;
	sts _rsok10,R2
; 	rsok20=0;
	sts _rsok20,R2
; 	rsok30=0;
	sts _rsok30,R2
; 	rsok40=0;
	sts _rsok40,R2
; 	rscnt01=0;
	sts _rscnt01,R2
; 	rscnt11=0;	
	sts _rscnt11,R2
; 	rscnt12=0x00;
	sts _rscnt12,R2
;  	rscnt13=0x00;
	sts _rscnt13,R2
;   }
	rjmp L249
L248:
;  else{
;  	  WDR();
	wdr
; // 	P2MDOUT = 0xA0;
; //	P2 =0xff;
; 		DDRB  = 0x03;
	ldi R24,3
	out 0x17,R24
; 	DDRD  = 0x30;
	ldi R24,48
	out 0x11,R24
;    	bool_val = SetupCC1020RX( RXANALOG, PA_POWER);
	lds R18,_PA_POWER
	lds R16,_RXANALOG
	rcall _SetupCC1020RX
	sts _bool_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
	ldi R16,1
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; //	retrn_val = 0x1f;
; 	WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
	mov R18,R16
	ldi R16,1
	rcall _WriteToCC1020Register
; 	delay(100000);
	ldi R16,160
	ldi R17,134
	ldi R18,1
	ldi R19,0
	rcall _delay
; 
; 
; 	bool_val = SetupCC1020TX( TXANALOG, PA_POWER);
	lds R18,_PA_POWER
	lds R16,_TXANALOG
	rcall _SetupCC1020TX
	sts _bool_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_INTERFACE);
	ldi R16,1
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; //	retrn_val = 0x0f;
; 	WriteToCC1020Register(CC1020_INTERFACE, retrn_val);
	mov R18,R16
	ldi R16,1
	rcall _WriteToCC1020Register
;  //  	P2MDOUT = 0xA8;
; //	P2 =0xff;
; 		DDRB  = 0x03;
	ldi R24,3
	out 0x17,R24
; 	DDRD  = 0x30;
	ldi R24,48
	out 0x11,R24
; 		j = 0;
	clr R10
; 
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS);
	ldi R16,64
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_RSSI);
	ldi R16,66
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_AFC);
	ldi R16,67
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_GAUSS_FILTER);
	ldi R16,68
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
	rjmp L257
L256:
; 		while(1){
; 			if(j==2) break;
	mov R24,R10
	cpi R24,2
	brne L259
	rjmp L258
L259:
	clr R2
	sts _looptmp,R2
	rjmp L264
X4:
; 			for(looptmp = 0;looptmp<32;looptmp++){
L265:
L266:
; 			//	if((looptmp & 1) == 1) DIO_1;
; 				//else DIO_0;
; //				delay(14);
; 	//			delay(23);
; 			//	delay(7);
; 		  		//while(Dclk == 0);
; 				//delay(1);
; 				while(Dclk == 0);
	in R24,0x12
	andi R24,8
	out 0x12,R24
	tst R24
	breq L265
L268:
L269:
; 		   		while(Dclk == 1);
	in R24,0x12
	andi R24,8
	out 0x12,R24
	cpi R24,1
	breq L268
	lds R24,_looptmp
	cpi R24,10
	breq L273
	cpi R24,13
	brne L271
L273:
; 				if(looptmp == 10 || looptmp == 13) continue;			
	rjmp L262
L271:
; 				if(j ==1) DIO_1;
	mov R24,R10
	cpi R24,1
	brne L274
	sbi 0x12,4
	rjmp L275
L274:
; 				else      DIO_0;
	cbi 0x12,4
L275:
; 
; 				if(j ==1) j = 0;
	mov R24,R10
	cpi R24,1
	brne L276
	clr R10
	rjmp L279
L276:
; 				else            j = 1;
	clr R10
	inc R10
L278:
L279:
	in R24,0x12
	andi R24,8
	out 0x12,R24
	tst R24
	breq L278
L262:
	lds R24,_looptmp
	subi R24,255    ; addi 1
	sts _looptmp,R24
L264:
	lds R24,_looptmp
	cpi R24,32
	brlo L266
	ldi R16,16
	ldi R17,39
	ldi R18,0
	ldi R19,0
	rcall _delay
L257:
	rjmp L256
L258:
; 				while(Dclk == 0);
; 
; 			}
; 			delay(10000);
; 		}
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST1);
	ldi R16,33
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST2);
	ldi R16,34
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST3);
	ldi R16,35
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST4);
	ldi R16,36
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST5);
	ldi R16,37
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST6);
	ldi R16,38
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_TEST7);
	ldi R16,39
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 
; 	retrn_val = ReadFromCC1020Register(CC1020_RESET_DONE);
	ldi R16,65
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_RSSI);
	ldi R16,66
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_AFC);
	ldi R16,67
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_GAUSS_FILTER);
	ldi R16,68
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS);
	ldi R16,64
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS1);
	ldi R16,69
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS2);
	ldi R16,70
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS3);
	ldi R16,71
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS4);
	ldi R16,72
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS5);
	ldi R16,73
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS6);
	ldi R16,74
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; 	retrn_val = ReadFromCC1020Register(CC1020_STATUS7);
	ldi R16,75
	rcall _ReadFromCC1020Register
	sts _retrn_val,R16
; /*
; 	WriteToCC1020Register(CC1020_INTERFACE, 0x1f);
; 	SetupCC1020RX(RXANALOG, PA_POWER);
; 		delay(50000);
; */
;  	 }
L249:
L246:
	rjmp L245
X5:
L238:
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_Vwn_Buf::
	.blkb 26
_Rx_Time::
	.blkb 1
_Tx_Rx::
	.blkb 1
_datawn2::
	.blkb 3
_databak::
	.blkb 3
_w1::
	.blkb 1
_rsok40::
	.blkb 1
_rsok30::
	.blkb 1
_rsok20::
	.blkb 1
_rsok10::
	.blkb 1
_rsok00::
	.blkb 1
_xx1::
	.blkb 1
_xx0::
	.blkb 1
_rscnt01::
	.blkb 1
_rscnt13::
	.blkb 1
_rscnt12::
	.blkb 1
_rscnt11::
	.blkb 1
_rcvd1::
	.blkb 1
_rcv1::
	.blkb 50
_bool_val::
	.blkb 1
_looptmp::
	.blkb 1
_retrn_val::
	.blkb 1
_boolval::
	.blkb 1

⌨️ 快捷键说明

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