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

📄 uart.s

📁 AVR单片机C语言程序设计实例精粹
💻 S
📖 第 1 页 / 共 4 页
字号:
	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 L148
L152:
	.dbline 629
; 		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 630
; 			break;
	xjmp L148
L153:
	.dbline 632
; 		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 633
; 			break;
	xjmp L148
L154:
	.dbline 635
; 		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 636
; 			break;
	xjmp L148
L155:
	.dbline 638
; 		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 639
; 			break;
	xjmp L148
L156:
	.dbline 641
; 		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 642
; 			break;
	xjmp L148
L157:
	.dbline 644
; 		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 645
; 			break;
	xjmp L148
L158:
	.dbline 647
; 		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 648
; 			break;
	xjmp L148
L159:
	.dbline 650
; 		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 651
; 			break;
	xjmp L148
L147:
	.dbline 653
; 		default:
; 			bCode = '0';
	ldi R24,48
	mov R10,R24
	.dbline 654
; 			break;
L148:
	.dbline 656
; 	}	
; 	return(bCode);
	mov R16,R10
	.dbline -2
L146:
	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 666
; }
; 
; //********************************************************************
; // 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 668
; 	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 669
; 	if(bCode > 9)
	ldi R24,9
	cp R24,R2
	brsh L161
	.dbline 670
; 	{
	.dbline 671
; 		bCode = bCode + 'A' - 0x0A;
	mov R24,R2
	subi R24,191    ; addi 65
	subi R24,10
	mov R10,R24
	.dbline 672
; 	}
	xjmp L162
L161:
	.dbline 674
; 	else
; 	{
	.dbline 675
; 		bCode = bCode + '0';
	mov R24,R10
	subi R24,208    ; addi 48
	mov R10,R24
	.dbline 676
; 	}
L162:
	.dbline 677
; 	return(bCode);
	mov R16,R10
	.dbline -2
L160:
	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 688
; }
; 	 
; //********************************************************************
; // 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 L165
L164:
	.dbline 690
	.dbline 691
	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 692
L165:
	.dbline 689
; 	while(bIndex != 0)
	tst R22
	brne L164
	.dbline -2
	.dbline 693
; 	{
; 		SciBuffer_Tx_In(ptr,sbNumAsciiPick(dwData,bIndex--));
; 	}
; }
L163:
	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 703
; 
; //********************************************************************
; // 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 704
; 	if((bIndex >= 1) && (bIndex <= 8))
	cpi R22,1
	brlo L168
	ldi R24,8
	cp R24,R22
	brlo L168
	.dbline 705
; 	{
	xjmp L171
L170:
	.dbline 707
	.dbline 708
	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 709
L171:
	.dbline 706
	tst R22
	brne L170
	.dbline 710
L168:
	.dbline -2
	.dbline 711
; 		while(bIndex != 0)
; 		{
; 			SciBuffer_Tx_In(ptr,sbCharAsciiPick(dwData,bIndex--));
; 		}
; 	}
; }
L167:
	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 721
; 
; //********************************************************************
; // 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 L175
L174:
	.dbline 723
	.dbline 724
	movw R30,R22
	ld R18,Z+
	movw R22,R30
	movw R16,R20
	xcall _SciBuffer_Tx_In
	.dbline 725
L175:
	.dbline 722
; 	while(*string != '\0')
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L174
	.dbline -2
	.dbline 726
; 	{
; 		SciBuffer_Tx_In(ptr,*string++);
; 	}
; }
L173:
	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\市电电压频率测量系统\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\市电电压频率测量系统\UART.c
L135:
	.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\市电电压频率测量系统\UART.c
L131:
	.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\市电电压频率测量系统\UART.c
L127:
	.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\市电电压频率测量系统\UART.c
L111:
	.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\市电电压频率测量系统\UART.c
L86:
	.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\市电电压频率测量系统\UART.c
L83:
	.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\市电电压频率测量系统\UART.c
L76:
	.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\市电电压频率测量系统\UART.c
L66:
	.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\市电电压频率测量系统\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 + -