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

📄 uart.s

📁 AVR单片机C语言程序设计实例精粹
💻 S
📖 第 1 页 / 共 4 页
字号:
	std y+0,R2
	.dbline 494
; 	bChar[1] = stSciBuffer.bRxBuffer[3];
	lds R2,_stSciBuffer+3+3
	std y+1,R2
	.dbline 495
; 	bChar[2] = stSciBuffer.bRxBuffer[4];
	lds R2,_stSciBuffer+3+4
	std y+2,R2
	.dbline 496
; 	sStringToChar("Received YY Command , ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L76
	ldi R17,>L76
	xcall _sStringToChar
	.dbline 497
; 	if((bChar[0] == ',') && \
	ldd R24,y+0
	cpi R24,44
	brne L77
	ldd R24,y+1
	cpi R24,48
	brlo L77
	ldi R24,57
	ldd R2,y+1
	cp R24,R2
	brlo L77
	ldd R24,y+2
	cpi R24,48
	brlo L77
	ldi R24,57
	ldd R2,y+2
	cp R24,R2
	brlo L77
	.dbline 500
; 	   (bChar[1] >= '0') && (bChar[1] <= '9') &&\
; 	   (bChar[2] >= '0') && (bChar[2] <= '9'))
; 	{
	.dbline 501
; 		sStringToChar("Parameter : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L83
	ldi R17,>L83
	xcall _sStringToChar
	.dbline 502
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
	ldd R18,y+1
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 503
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
	ldd R18,y+2
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 504
; 		SciBuffer_Tx_In(&stSciBuffer,'\n');
	ldi R18,10
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 505
; 	}
	xjmp L78
L77:
	.dbline 507
; 	else
; 	{
	.dbline 508
; 		sStringToChar("Illegal Parameter !\n",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L86
	ldi R17,>L86
	xcall _sStringToChar
	.dbline 509
; 	}	
L78:
	.dbline 510
; 	UART_WRITE_DATA(&stSciBuffer);
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _UART_WRITE_DATA
	.dbline -2
	.dbline 511
; }
L67:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbsym l bChar 0 A[3:3]c
	.dbend
	.dbfunc e ZZCommand _ZZCommand fV
;          bChar -> y+0
	.even
_ZZCommand::
	sbiw R28,8
	.dbline -1
	.dbline 520
; 
; //********************************************************************
; // Function    : ZZCommand
; // Input       : none
; // Output      : none
; // Description : ZZ,MMM,NNN
; //********************************************************************
; void ZZCommand(void)
; {
	.dbline 522
; 	INT8U bChar[8];
; 	bChar[0] = stSciBuffer.bRxBuffer[2];
	lds R2,_stSciBuffer+3+2
	std y+0,R2
	.dbline 523
; 	bChar[1] = stSciBuffer.bRxBuffer[3];
	lds R2,_stSciBuffer+3+3
	std y+1,R2
	.dbline 524
; 	bChar[2] = stSciBuffer.bRxBuffer[4];
	lds R2,_stSciBuffer+3+4
	std y+2,R2
	.dbline 525
; 	bChar[3] = stSciBuffer.bRxBuffer[5];
	lds R2,_stSciBuffer+3+5
	std y+3,R2
	.dbline 526
; 	bChar[4] = stSciBuffer.bRxBuffer[6];
	lds R2,_stSciBuffer+3+6
	std y+4,R2
	.dbline 527
; 	bChar[5] = stSciBuffer.bRxBuffer[7];
	lds R2,_stSciBuffer+3+7
	std y+5,R2
	.dbline 528
; 	bChar[6] = stSciBuffer.bRxBuffer[8];
	lds R2,_stSciBuffer+3+8
	std y+6,R2
	.dbline 529
; 	bChar[7] = stSciBuffer.bRxBuffer[9];
	lds R2,_stSciBuffer+3+9
	std y+7,R2
	.dbline 530
; 	sStringToChar("Received ZZ Command , ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L111
	ldi R17,>L111
	xcall _sStringToChar
	.dbline 531
; 	if((bChar[0] == ',') && (bChar[4] == ',') && \
	ldd R24,y+0
	cpi R24,44
	breq X0
	xjmp L112
X0:
	ldd R24,y+4
	cpi R24,44
	breq X1
	xjmp L112
X1:
	ldd R24,y+1
	cpi R24,48
	brsh X2
	xjmp L112
X2:
	ldi R24,57
	ldd R2,y+1
	cp R24,R2
	brsh X3
	xjmp L112
X3:
	ldd R24,y+2
	cpi R24,48
	brsh X4
	xjmp L112
X4:
	ldi R24,57
	ldd R2,y+2
	cp R24,R2
	brsh X5
	xjmp L112
X5:
	ldd R24,y+3
	cpi R24,48
	brsh X6
	xjmp L112
X6:
	ldi R24,57
	ldd R2,y+3
	cp R24,R2
	brsh X7
	xjmp L112
X7:
	ldd R24,y+5
	cpi R24,48
	brsh X8
	xjmp L112
X8:
	ldi R24,57
	ldd R2,y+5
	cp R24,R2
	brsh X9
	xjmp L112
X9:
	ldd R24,y+6
	cpi R24,48
	brsh X10
	xjmp L112
X10:
	ldi R24,57
	ldd R2,y+6
	cp R24,R2
	brlo L112
	ldd R24,y+7
	cpi R24,48
	brlo L112
	ldi R24,57
	ldd R2,y+7
	cp R24,R2
	brlo L112
	.dbline 538
; 	   (bChar[1] >= '0') && (bChar[1] <= '9') && \
; 	   (bChar[2] >= '0') && (bChar[2] <= '9') && \
; 	   (bChar[3] >= '0') && (bChar[3] <= '9') && \
; 	   (bChar[5] >= '0') && (bChar[5] <= '9') && \
; 	   (bChar[6] >= '0') && (bChar[6] <= '9') && \
; 	   (bChar[7] >= '0') && (bChar[7] <= '9'))
; 	{
	.dbline 539
; 		sStringToChar("Parameter1 : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L127
	ldi R17,>L127
	xcall _sStringToChar
	.dbline 540
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
	ldd R18,y+1
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 541
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
	ldd R18,y+2
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 542
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[3]);
	ldd R18,y+3
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 543
; 		SciBuffer_Tx_In(&stSciBuffer,' ');	
	ldi R18,32
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 544
; 		sStringToChar("Parameter2 : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L131
	ldi R17,>L131
	xcall _sStringToChar
	.dbline 545
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[5]);
	ldd R18,y+5
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 546
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[6]);
	ldd R18,y+6
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 547
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[7]);
	ldd R18,y+7
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 548
; 		SciBuffer_Tx_In(&stSciBuffer,'\n');	
	ldi R18,10
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 549
; 	}
	xjmp L113
L112:
	.dbline 551
; 	else
; 	{
	.dbline 552
; 		sStringToChar("Illegal Parameters !\n",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L135
	ldi R17,>L135
	xcall _sStringToChar
	.dbline 553
; 	}
L113:
	.dbline 554
; 	UART_WRITE_DATA(&stSciBuffer);
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _UART_WRITE_DATA
	.dbline -2
	.dbline 555
; }
L87:
	adiw R28,8
	.dbline 0 ; func end
	ret
	.dbsym l bChar 0 A[8:8]c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
_CommandJobArray::
	.blkw 1
	.area idata
	.word PL_C1Command
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_C2Command
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_D1Command
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_D2Command
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_D3Command
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_XXCommand
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_YYCommand
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkw 1
	.area idata
	.word PL_ZZCommand
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.dbsym e CommandJobArray _CommandJobArray A[16:8]pfV
_wCommandTabArray::
	.blkb 2
	.area idata
	.byte 'C,49
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'C,50
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'D,49
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'D,50
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'D,51
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'X,'X
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'Y,'Y
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.blkb 2
	.area idata
	.byte 'Z,'Z
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.dbsym e wCommandTabArray _wCommandTabArray A[16:8:2]c
	.area text(rom, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
	.dbfunc e SCI_Parsing _SCI_Parsing fV
; wCommandBuffer -> y+2
;           wLow -> R22
;          wHigh -> R10
;           wMid -> R20
;            ptr -> R20,R21
	.even
_SCI_Parsing::
	xcall push_gset3
	movw R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 579
; 
; typedef void (*pFunc)(void);
; 
; pFunc CommandJobArray[8]=
; {
; 	C1Command,C2Command,D1Command,D2Command,
; 	D3Command,XXCommand,YYCommand,ZZCommand
; };
; 
; char wCommandTabArray[8][2]=
; {
; 	"C1",     "C2",
; 	"D1",	  "D2",		"D3",
; 	"XX",     "YY",     "ZZ",
; };
; 
; //********************************************************************
; // Function    : SCI_Parsing
; // Input       : ptr-Pointer to SCI Buffer
; // Output      : none
; // Description : Parse Received String and Execute Command
; //********************************************************************
; void SCI_Parsing(struct SCI_Buffer *ptr)
; {
	.dbline 584
; 	INT8S wLow;
; 	INT8S wHigh;
; 	INT8S wMid;
; 	char wCommandBuffer[2];
; 	wCommandBuffer[0] = ptr->bRxBuffer[0];
	movw R30,R20
	ldd R2,z+3
	std y+2,R2
	.dbline 585
; 	wCommandBuffer[1] = ptr->bRxBuffer[1];
	movw R30,R20
	ldd R2,z+4
	std y+3,R2
	.dbline 587
; 	
; 	wLow = 0;
	clr R22
	.dbline 588
; 	wHigh = 8 - 1;
	ldi R24,7
	mov R10,R24
	.dbline 589
; 	wMid = wHigh >> 1;
	mov R20,R24
	asr R20
	xjmp L139
L138:
	.dbline 592
; 		
; 	while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
; 	{
	.dbline 593
; 		if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2) > 0)
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2
	mov R17,R20
	muls R16,R17
	movw R16,R0
	ldi R24,<_wCommandTabArray
	ldi R25,>_wCommandTabArray
	add R16,R24
	adc R17,R25
	xcall _strncmp
	clr R2
	clr R3
	cp R2,R16
	cpc R3,R17
	brge L141
	.dbline 594
; 		{
	.dbline 595
; 			wHigh = wMid - 1;	
	mov R24,R20
	subi R24,1
	mov R10,R24
	.dbline 596
; 		}
	xjmp L142
L141:
	.dbline 598
; 		else
; 		{
	.dbline 599
; 			wLow = wMid + 1;
	mov R22,R20
	subi R22,255    ; addi 1
	.dbline 600
; 		}
L142:
	.dbline 602
	mov R20,R22
	add R20,R10
	asr R20
	.dbline 603
L139:
	.dbline 591
	cp R10,R22
	brlt L143
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2
	mov R17,R20
	muls R16,R17
	movw R16,R0
	ldi R24,<_wCommandTabArray
	ldi R25,>_wCommandTabArray
	add R16,R24
	adc R17,R25
	xcall _strncmp
	cpi R16,0
	cpc R16,R17
	brne L138
X11:
L143:
	.dbline 605
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,2
	mov R17,R20
	muls R16,R17
	movw R16,R0
	ldi R24,<_wCommandTabArray
	ldi R25,>_wCommandTabArray
	add R16,R24
	adc R17,R25
	xcall _strncmp
	cpi R16,0
	cpc R16,R17
	brne L144
X12:
	.dbline 606
	.dbline 607
	ldi R16,2
	mov R17,R20
	muls R16,R17
	movw R30,R0
	ldi R24,<_CommandJobArray
	ldi R25,>_CommandJobArray
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	movw R30,R26
	xcall xicall
	.dbline 608
L144:
	.dbline -2
	.dbline 609
; 			
; 		wMid = (wLow + wHigh) >> 1;
; 	}
; 		
; 	if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
; 	{
; 		CommandJobArray[wMid]();
; 	}
; }
L136:
	adiw R28,4
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l wCommandBuffer 2 A[2:2]c
	.dbsym r wLow 22 C
	.dbsym r wHigh 10 C
	.dbsym r wMid 20 C
	.dbsym r ptr 20 pX
	.dbend
	.dbfunc e sbNumAsciiPick _sbNumAsciiPick fc
;          bCode -> R10
;      bPosition -> y+10
;         dwData -> y+6
	.even
_sbNumAsciiPick::
	xcall push_arg4
	xcall push_gset3
	.dbline -1
	.dbline 618
; 
; //********************************************************************
; // Function    : sbNumAsciiPick
; // Input       : dwData -Input Data,bPosition-Selected Index
; // Output      : Position Index in Decimal System
; // Description : Extract out Selected Number in Decimal System
; //********************************************************************
; INT8U sbNumAsciiPick(INT32U dwData,INT8U bPosition)
; {
	.dbline 620
; 	INT8U	bCode;
; 	switch(bPosition)
	ldd R10,y+10
	clr R11
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne X14
	xjmp L150
X14:
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X15
	xjmp L151
X15:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	brne X16
	xjmp L152
X16:
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X17
	xjmp L153
X17:
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brne X18
	xjmp L154
X18:
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brne X19
	xjmp L155
X19:
	cpi R24,7
	ldi R30,0
	cpc R25,R30
	brne X20
	xjmp L156
X20:
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brne X21
	xjmp L157
X21:
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	brne X22
	xjmp L158
X22:
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	brne X23
	xjmp L159
X23:
	xjmp L147
X13:
	.dbline 621
; 	{
L150:
	.dbline 623
; 		case 1:
; 			bCode = dwData % 10 + '0';
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	xcall mod32u
	movw R2,R16
	movw R4,R18
	ldi R20,48
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	mov R10,R2
	.dbline 624
; 			break;
	xjmp L148
L151:
	.dbline 626
; 		case 2:
; 			bCode = (dwData / 10) % 10 + '0';
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7

⌨️ 快捷键说明

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