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

📄 uart.s

📁 《AVR单片机C语言程序设计实例精粹》素材
💻 S
📖 第 1 页 / 共 4 页
字号:
	brlo L61
	ldi R24,57
	ldd R2,y+2
	cp R24,R2
	brlo L61
	.dbline 491
; 	   (bChar[1] >= '0') && (bChar[1] <= '9') &&\
; 	   (bChar[2] >= '0') && (bChar[2] <= '9'))
; 	{
	.dbline 492
; 		sStringToChar("Parameter : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L67
	ldi R17,>L67
	xcall _sStringToChar
	.dbline 493
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
	ldd R18,y+1
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 494
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
	ldd R18,y+2
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 495
; 		SciBuffer_Tx_In(&stSciBuffer,'\n');
	ldi R18,10
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 496
; 	}
	xjmp L62
L61:
	.dbline 498
; 	else
; 	{
	.dbline 499
; 		sStringToChar("Illegal Parameter !\n",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L70
	ldi R17,>L70
	xcall _sStringToChar
	.dbline 500
; 	}	
L62:
	.dbline 501
; 	UART_WRITE_DATA(&stSciBuffer);
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _UART_WRITE_DATA
	.dbline -2
	.dbline 502
; }
L51:
	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 511
; 
; //********************************************************************
; // Function    : ZZCommand
; // Input       : none
; // Output      : none
; // Description : ZZ,MMM,NNN
; //********************************************************************
; void ZZCommand(void)
; {
	.dbline 513
; 	INT8U bChar[8];
; 	bChar[0] = stSciBuffer.bRxBuffer[2];
	lds R2,_stSciBuffer+3+2
	std y+0,R2
	.dbline 514
; 	bChar[1] = stSciBuffer.bRxBuffer[3];
	lds R2,_stSciBuffer+3+3
	std y+1,R2
	.dbline 515
; 	bChar[2] = stSciBuffer.bRxBuffer[4];
	lds R2,_stSciBuffer+3+4
	std y+2,R2
	.dbline 516
; 	bChar[3] = stSciBuffer.bRxBuffer[5];
	lds R2,_stSciBuffer+3+5
	std y+3,R2
	.dbline 517
; 	bChar[4] = stSciBuffer.bRxBuffer[6];
	lds R2,_stSciBuffer+3+6
	std y+4,R2
	.dbline 518
; 	bChar[5] = stSciBuffer.bRxBuffer[7];
	lds R2,_stSciBuffer+3+7
	std y+5,R2
	.dbline 519
; 	bChar[6] = stSciBuffer.bRxBuffer[8];
	lds R2,_stSciBuffer+3+8
	std y+6,R2
	.dbline 520
; 	bChar[7] = stSciBuffer.bRxBuffer[9];
	lds R2,_stSciBuffer+3+9
	std y+7,R2
	.dbline 521
; 	sStringToChar("Received ZZ Command , ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L95
	ldi R17,>L95
	xcall _sStringToChar
	.dbline 522
; 	if((bChar[0] == ',') && (bChar[4] == ',') && \
	ldd R24,y+0
	cpi R24,44
	breq X0
	xjmp L96
X0:
	ldd R24,y+4
	cpi R24,44
	breq X1
	xjmp L96
X1:
	ldd R24,y+1
	cpi R24,48
	brsh X2
	xjmp L96
X2:
	ldi R24,57
	ldd R2,y+1
	cp R24,R2
	brsh X3
	xjmp L96
X3:
	ldd R24,y+2
	cpi R24,48
	brsh X4
	xjmp L96
X4:
	ldi R24,57
	ldd R2,y+2
	cp R24,R2
	brsh X5
	xjmp L96
X5:
	ldd R24,y+3
	cpi R24,48
	brsh X6
	xjmp L96
X6:
	ldi R24,57
	ldd R2,y+3
	cp R24,R2
	brsh X7
	xjmp L96
X7:
	ldd R24,y+5
	cpi R24,48
	brsh X8
	xjmp L96
X8:
	ldi R24,57
	ldd R2,y+5
	cp R24,R2
	brsh X9
	xjmp L96
X9:
	ldd R24,y+6
	cpi R24,48
	brsh X10
	xjmp L96
X10:
	ldi R24,57
	ldd R2,y+6
	cp R24,R2
	brlo L96
	ldd R24,y+7
	cpi R24,48
	brlo L96
	ldi R24,57
	ldd R2,y+7
	cp R24,R2
	brlo L96
	.dbline 529
; 	   (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 530
; 		sStringToChar("Parameter1 : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L111
	ldi R17,>L111
	xcall _sStringToChar
	.dbline 531
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
	ldd R18,y+1
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 532
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
	ldd R18,y+2
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 533
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[3]);
	ldd R18,y+3
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 534
; 		SciBuffer_Tx_In(&stSciBuffer,' ');	
	ldi R18,32
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 535
; 		sStringToChar("Parameter2 : ",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L115
	ldi R17,>L115
	xcall _sStringToChar
	.dbline 536
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[5]);
	ldd R18,y+5
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 537
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[6]);
	ldd R18,y+6
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 538
; 		SciBuffer_Tx_In(&stSciBuffer,bChar[7]);
	ldd R18,y+7
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 539
; 		SciBuffer_Tx_In(&stSciBuffer,'\n');	
	ldi R18,10
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _SciBuffer_Tx_In
	.dbline 540
; 	}
	xjmp L97
L96:
	.dbline 542
; 	else
; 	{
	.dbline 543
; 		sStringToChar("Illegal Parameters !\n",&stSciBuffer);
	ldi R18,<_stSciBuffer
	ldi R19,>_stSciBuffer
	ldi R16,<L119
	ldi R17,>L119
	xcall _sStringToChar
	.dbline 544
; 	}
L97:
	.dbline 545
; 	UART_WRITE_DATA(&stSciBuffer);
	ldi R16,<_stSciBuffer
	ldi R17,>_stSciBuffer
	xcall _UART_WRITE_DATA
	.dbline -2
	.dbline 546
; }
L71:
	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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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 570
; 
; 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 575
; 	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 576
; 	wCommandBuffer[1] = ptr->bRxBuffer[1];
	movw R30,R20
	ldd R2,z+4
	std y+3,R2
	.dbline 578
; 	
; 	wLow = 0;
	clr R22
	.dbline 579
; 	wHigh = 8 - 1;
	ldi R24,7
	mov R10,R24
	.dbline 580
; 	wMid = wHigh >> 1;
	mov R20,R24
	asr R20
	xjmp L123
L122:
	.dbline 583
; 		
; 	while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
; 	{
	.dbline 584
; 		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 L125
	.dbline 585
; 		{
	.dbline 586
; 			wHigh = wMid - 1;	
	mov R24,R20
	subi R24,1
	mov R10,R24
	.dbline 587
; 		}
	xjmp L126
L125:
	.dbline 589
; 		else
; 		{
	.dbline 590
; 			wLow = wMid + 1;
	mov R22,R20
	subi R22,255    ; addi 1
	.dbline 591
; 		}
L126:
	.dbline 593
	mov R20,R22
	add R20,R10
	asr R20
	.dbline 594
L123:
	.dbline 582
	cp R10,R22
	brlt L127
	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 L122
X11:
L127:
	.dbline 596
	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 L128
X12:
	.dbline 597
	.dbline 598
	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 599
L128:
	.dbline -2
	.dbline 600
; 			
; 		wMid = (wLow + wHigh) >> 1;
; 	}
; 		
; 	if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
; 	{
; 		CommandJobArray[wMid]();
; 	}
; }
L120:
	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 609
; 
; //********************************************************************
; // 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 611
; 	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 L134
X14:
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X15
	xjmp L135
X15:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	brne X16
	xjmp L136
X16:
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X17
	xjmp L137
X17:
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brne X18
	xjmp L138
X18:
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brne X19
	xjmp L139
X19:
	cpi R24,7
	ldi R30,0
	cpc R25,R30
	brne X20
	xjmp L140
X20:
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brne X21
	xjmp L141
X21:
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	brne X22
	xjmp L142
X22:
	cpi R24,10
	ldi R30,0
	cpc R25,R30
	brne X23
	xjmp L143
X23:
	xjmp L131
X13:
	.dbline 612
; 	{
L134:
	.dbline 614
; 		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 615
; 			break;
	xjmp L132
L135:
	.dbline 617
; 		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
	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 div32u
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21

⌨️ 快捷键说明

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