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

📄 uart.s

📁 《AVR单片机C语言程序设计实例精粹》素材
💻 S
📖 第 1 页 / 共 4 页
字号:
	st -y,R20
	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 618
; 			break;
	xjmp L132
L136:
	.dbline 620
; 		case 3:
; 			bCode = (dwData / 100) % 10 + '0';
	ldi R20,100
	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
	st -y,R20
	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 621
; 			break;
	xjmp L132
L137:
	.dbline 623
; 		case 4:
; 			bCode = (dwData / 1000) % 10 + '0';
	ldi R20,232
	ldi R21,3
	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
	st -y,R20
	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 L132
L138:
	.dbline 626
; 		case 5:
; 			bCode = (dwData / 10000) % 10 + '0';
	ldi R20,16
	ldi R21,39
	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
	st -y,R20
	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 627
; 			break;
	xjmp L132
L139:
	.dbline 629
; 		case 6 :
; 			bCode = (dwData / 100000) % 10 + '0';
	ldi R20,160
	ldi R21,134
	ldi R22,1
	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
	st -y,R20
	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 630
; 			break;
	xjmp L132
L140:
	.dbline 632
; 		case 7 :
; 			bCode = (dwData / 1000000) % 10 + '0';
	ldi R20,64
	ldi R21,66
	ldi R22,15
	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
	st -y,R20
	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 633
; 			break;
	xjmp L132
L141:
	.dbline 635
; 		case 8 :
; 			bCode = (dwData / 10000000) % 10 + '0';
	ldi R20,128
	ldi R21,150
	ldi R22,152
	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
	st -y,R20
	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 636
; 			break;
	xjmp L132
L142:
	.dbline 638
; 		case 9 :
; 			bCode = (dwData / 100000000) % 10 + '0';
	ldi R20,0
	ldi R21,225
	ldi R22,245
	ldi R23,5
	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
	st -y,R20
	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 639
; 			break;
	xjmp L132
L143:
	.dbline 641
; 		case 10 :
; 			bCode = (dwData / 1000000000) % 10 + '0';
	ldi R20,0
	ldi R21,202
	ldi R22,154
	ldi R23,59
	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
	st -y,R20
	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 642
; 			break;
	xjmp L132
L131:
	.dbline 644
; 		default:
; 			bCode = '0';
	ldi R24,48
	mov R10,R24
	.dbline 645
; 			break;
L132:
	.dbline 647
; 	}	
; 	return(bCode);
	mov R16,R10
	.dbline -2
L130:
	xcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r bCode 10 c
	.dbsym l bPosition 10 c
	.dbsym l dwData 6 l
	.dbend
	.dbfunc e sbCharAsciiPick _sbCharAsciiPick fc
;          bCode -> R10
;      bPosition -> y+10
;         dwData -> y+6
	.even
_sbCharAsciiPick::
	xcall push_arg4
	xcall push_gset3
	.dbline -1
	.dbline 657
; }
; 
; //********************************************************************
; // Function    : sbCharAsciiPick
; // Input       : dwData -Input Data,bPosition-Selected Index
; // Output      : Position Index in HEX System
; // Description : Extract out Selected Char in HEX System
; //********************************************************************
; INT8U sbCharAsciiPick(INT32U dwData,INT8U bPosition)
; {
	.dbline 659
; 	INT8U bCode;
; 	bCode = (dwData >> ((bPosition - 1) << 2)) & 0x0000000F;
	ldd R24,y+10
	clr R25
	sbiw R24,1
	lsl R24
	rol R25
	lsl R24
	rol R25
	movw R30,R28
	ldd R2,z+6
	ldd R3,z+7
	ldd R4,z+8
	ldd R5,z+9
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R2,R16
	movw R4,R18
	ldi R20,15
	ldi R21,0
	ldi R22,0
	ldi R23,0
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	mov R10,R2
	.dbline 660
; 	if(bCode > 9)
	ldi R24,9
	cp R24,R2
	brsh L145
	.dbline 661
; 	{
	.dbline 662
; 		bCode = bCode + 'A' - 0x0A;
	mov R24,R2
	subi R24,191    ; addi 65
	subi R24,10
	mov R10,R24
	.dbline 663
; 	}
	xjmp L146
L145:
	.dbline 665
; 	else
; 	{
	.dbline 666
; 		bCode = bCode + '0';
	mov R24,R10
	subi R24,208    ; addi 48
	mov R10,R24
	.dbline 667
; 	}
L146:
	.dbline 668
; 	return(bCode);
	mov R16,R10
	.dbline -2
L144:
	xcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r bCode 10 c
	.dbsym l bPosition 10 c
	.dbsym l dwData 6 l
	.dbend
	.dbfunc e sDataToNumber _sDataToNumber fV
;            ptr -> R20,R21
;         bIndex -> R22
;         dwData -> y+5
	.even
_sDataToNumber::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,1
	ldd R22,y+9
	ldd R20,y+11
	ldd R21,y+12
	.dbline -1
	.dbline 679
; }
; 	 
; //********************************************************************
; // Function    : sDataToNumber
; // Input       : dwData -Input Data,bIndex - Length 
; //               ptr-Pointer to SCI Buffer
; // Output      : none
; // Description : Convert Data to Decimal Number
; //********************************************************************
; void sDataToNumber(INT32U dwData,INT8U bIndex,struct SCI_Buffer *ptr)
; {
	xjmp L149
L148:
	.dbline 681
	.dbline 682
	mov R2,R22
	subi R22,1
	std y+0,R2
	movw R30,R28
	ldd R16,z+5
	ldd R17,z+6
	ldd R18,z+7
	ldd R19,z+8
	xcall _sbNumAsciiPick
	mov R18,R16
	movw R16,R20
	xcall _SciBuffer_Tx_In
	.dbline 683
L149:
	.dbline 680
; 	while(bIndex != 0)
	tst R22
	brne L148
	.dbline -2
	.dbline 684
; 	{
; 		SciBuffer_Tx_In(ptr,sbNumAsciiPick(dwData,bIndex--));
; 	}
; }
L147:
	adiw R28,1
	xcall pop_gset2
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pX
	.dbsym r bIndex 22 c
	.dbsym l dwData 5 l
	.dbend
	.dbfunc e sDataToChar _sDataToChar fV
;            ptr -> R20,R21
;         bIndex -> R22
;         dwData -> y+5
	.even
_sDataToChar::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,1
	ldd R22,y+9
	ldd R20,y+11
	ldd R21,y+12
	.dbline -1
	.dbline 694
; 
; //********************************************************************
; // Function    : sDataToChar
; // Input       : dwData -Input Data,bIndex - Length 
; //               ptr-Pointer to SCI Buffer
; // Output      : none
; // Description : Convert Data to HEX Number
; //********************************************************************
; void sDataToChar(INT32U dwData,INT8U bIndex,struct SCI_Buffer *ptr)
; {
	.dbline 695
; 	if((bIndex >= 1) && (bIndex <= 8))
	cpi R22,1
	brlo L152
	ldi R24,8
	cp R24,R22
	brlo L152
	.dbline 696
; 	{
	xjmp L155
L154:
	.dbline 698
	.dbline 699
	mov R2,R22
	subi R22,1
	std y+0,R2
	movw R30,R28
	ldd R16,z+5
	ldd R17,z+6
	ldd R18,z+7
	ldd R19,z+8
	xcall _sbCharAsciiPick
	mov R18,R16
	movw R16,R20
	xcall _SciBuffer_Tx_In
	.dbline 700
L155:
	.dbline 697
	tst R22
	brne L154
	.dbline 701
L152:
	.dbline -2
	.dbline 702
; 		while(bIndex != 0)
; 		{
; 			SciBuffer_Tx_In(ptr,sbCharAsciiPick(dwData,bIndex--));
; 		}
; 	}
; }
L151:
	adiw R28,1
	xcall pop_gset2
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pX
	.dbsym r bIndex 22 c
	.dbsym l dwData 5 l
	.dbend
	.dbfunc e sStringToChar _sStringToChar fV
;            ptr -> R20,R21
;         string -> R22,R23
	.even
_sStringToChar::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	.dbline -1
	.dbline 712
; 
; //********************************************************************
; // Function    : sStringToChar
; // Input       : string - pointer to char list
; //               ptr-Pointer to SCI Buffer
; // Output      : none
; // Description : Convert String to Char
; //********************************************************************
; void sStringToChar(INT8U *string,struct SCI_Buffer *ptr)
; {
	xjmp L159
L158:
	.dbline 714
	.dbline 715
	movw R30,R22
	ld R18,Z+
	movw R22,R30
	movw R16,R20
	xcall _SciBuffer_Tx_In
	.dbline 716
L159:
	.dbline 713
; 	while(*string != '\0')
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L158
	.dbline -2
	.dbline 717
; 	{
; 		SciBuffer_Tx_In(ptr,*string++);
; 	}
; }
L157:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pX
	.dbsym r string 22 pc
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
_stSciBuffer::
	.blkb 153
	.dbsym e stSciBuffer _stSciBuffer X
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L119:
	.blkb 22
	.area idata
	.byte 'I,'l,'l,'e,'g,'a,'l,32,'P,'a,'r,'a,'m,'e,'t,'e
	.byte 'r,'s,32,33,10,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L115:
	.blkb 14
	.area idata
	.byte 'P,'a,'r,'a,'m,'e,'t,'e,'r,50,32,58,32,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L111:
	.blkb 14
	.area idata
	.byte 'P,'a,'r,'a,'m,'e,'t,'e,'r,49,32,58,32,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L95:
	.blkb 23
	.area idata
	.byte 'R,'e,'c,'e,'i,'v,'e,'d,32,'Z,'Z,32,'C,'o,'m,'m
	.byte 'a,'n,'d,32,44,32,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L70:
	.blkb 21
	.area idata
	.byte 'I,'l,'l,'e,'g,'a,'l,32,'P,'a,'r,'a,'m,'e,'t,'e
	.byte 'r,32,33,10,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L67:
	.blkb 13
	.area idata
	.byte 'P,'a,'r,'a,'m,'e,'t,'e,'r,32,58,32,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L60:
	.blkb 23
	.area idata
	.byte 'R,'e,'c,'e,'i,'v,'e,'d,32,'Y,'Y,32,'C,'o,'m,'m
	.byte 'a,'n,'d,32,44,32,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
L50:
	.blkb 22
	.area idata
	.byte 'R,'e,'c,'e,'i,'v,'e,'d,32,'X,'X,32,'C,'o,'m,'m
	.byte 'a,'n,'d,46,10,0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
	.area func_lit
PL_ZZCommand:	.word `_ZZCommand
PL_YYCommand:	.word `_YYCommand
PL_XXCommand:	.word `_XXCommand
PL_D3Command:	.word `_D3Command
PL_D2Command:	.word `_D2Command
PL_D1Command:	.word `_D1Command
PL_C2Command:	.word `_C2Command
PL_C1Command:	.word `_C1Command

⌨️ 快捷键说明

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