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

📄 main.s

📁 ATmega128和ads7864实现ATP闭环控制
💻 S
📖 第 1 页 / 共 4 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\ATP_AVR\main.c
	.dbfunc e ucHex2BCD _ucHex2BCD fc
;         uctemp -> R20
;           ucIn -> R22
	.even
_ucHex2BCD::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 24
; //ICC-AVR application builder : 2007-10-30 15:43:17
; #include "public.h"
; 
; 
; #define Fy0 	61242
; #define FyL 	60742
; #define FyH 	61742
; 
; #define RadPer1MHz 	0.001
; 
; #define Rad0 	0.087266	//5度
; 
; 
; //方程的系数
; 
; #define xishuA	4.9201506335
; #define xishuB	-11.4057818550
; #define xishuC	-4.9964661567
; 
; //const u8 ucHEX2BCD[3000][3];
; 
; 
; u8 ucHex2BCD(u8 ucIn)
; {
	.dbline 27
; 	u8 uctemp;
; 
; 	uctemp=ucIn%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	mov R20,R16
	.dbline 28
; 	uctemp=uctemp|(((ucIn%100)/10)<<4);
	ldi R17,100
	mov R16,R22
	xcall mod8u
	ldi R17,10
	xcall div8u
	mov R24,R16
	andi R24,#0x0F
	swap R24
	or R20,R24
	.dbline 30
; 
; 	return uctemp;
	mov R16,R20
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r uctemp 20 c
	.dbsym r ucIn 22 c
	.dbend
	.dbfunc e HEX2BCD _HEX2BCD fV
;         uctemp -> <dead>
;     pucOutBuff -> R10,R11
;          ulHex -> y+6
	.even
_HEX2BCD::
	xcall push_arg4
	xcall push_gset3
	ldd R10,y+10
	ldd R11,y+11
	.dbline -1
	.dbline 34
; 
; }
; void HEX2BCD(u32 ulHex,u8* pucOutBuff)
; {
	.dbline 37
; 	u8 uctemp;
; 
; 	pucOutBuff[2]=ulHex%10;
	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 R30,R10
	std z+2,R16
	.dbline 38
; 	ulHex=ulHex/10;
	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
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
	.dbline 39
; 	pucOutBuff[2]=pucOutBuff[2]|((ulHex%10)<<4);
	movw R24,R10
	adiw R24,2
	movw R2,R24
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+6
	ldd R5,z+7
	ldd R6,z+8
	ldd R7,z+9
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R4
	movw R18,R6
	xcall mod32u
	ldi R24,4
	ldi R25,0
	st -y,R24
	xcall lsl32
	movw R30,R2
	ldd R4,z+0
	clr R5
	clr R6
	clr R7
	or R4,R16
	or R5,R17
	or R6,R18
	or R7,R19
	std z+0,R4
	.dbline 40
; 	ulHex=ulHex/10;
	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
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
	.dbline 41
; 	pucOutBuff[1]=ulHex%10;
	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 R30,R10
	std z+1,R16
	.dbline 42
; 	ulHex=ulHex/10;
	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
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
	.dbline 43
; 	pucOutBuff[1]=pucOutBuff[1]|((ulHex%10)<<4);
	movw R24,R10
	adiw R24,1
	movw R2,R24
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R4,z+6
	ldd R5,z+7
	ldd R6,z+8
	ldd R7,z+9
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R4
	movw R18,R6
	xcall mod32u
	ldi R24,4
	ldi R25,0
	st -y,R24
	xcall lsl32
	movw R30,R2
	ldd R4,z+0
	clr R5
	clr R6
	clr R7
	or R4,R16
	or R5,R17
	or R6,R18
	or R7,R19
	std z+0,R4
	.dbline 44
; 	ulHex=ulHex/10;
	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
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
	.dbline 45
; 	pucOutBuff[0]=ulHex%10;
	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 R30,R10
	std z+0,R16
	.dbline 46
; 	ulHex=ulHex/10;
	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
	movw R30,R28
	std z+6,R16
	std z+7,R17
	std z+8,R18
	std z+9,R19
	.dbline 47
; 	pucOutBuff[0]=pucOutBuff[0]|((ulHex%10)<<4);
	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
	ldi R24,4
	ldi R25,0
	st -y,R24
	xcall lsl32
	movw R30,R10
	ldd R2,z+0
	clr R3
	clr R4
	clr R5
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	std z+0,R2
	.dbline -2
L2:
	xcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l uctemp 1 c
	.dbsym r pucOutBuff 10 pc
	.dbsym l ulHex 6 l
	.dbend
	.dbfunc e OutputFrequency _OutputFrequency fV
;           ucFY -> y+5
;           ucFX -> y+2
;           ulFY -> y+16
;           ulFX -> y+12
	.even
_OutputFrequency::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,8
	.dbline -1
	.dbline 56
; 
; }
; 
; 
; //输出控制频率
; //输入参数:	ulFX X轴频率,单位kHz
; //				ulFY Y轴频率,单位kHz
; void OutputFrequency(u32 ulFX,u32 ulFY)
; {
	.dbline 58
	ldi R20,64
	ldi R21,156
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L6
	ldi R20,112
	ldi R21,17
	ldi R22,1
	ldi R23,0
	movw R30,R28
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L4
L6:
	.dbline 58
; 	u8 ucFX[3],ucFY[3];
; 	if((ulFX<40000)||(ulFX>70000))	return;
	xjmp L3
L4:
	.dbline 59
	ldi R20,64
	ldi R21,156
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L9
	ldi R20,112
	ldi R21,17
	ldi R22,1
	ldi R23,0
	movw R30,R28
	ldd R2,z+16
	ldd R3,z+17
	ldd R4,z+18
	ldd R5,z+19
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L7
L9:
	.dbline 59
; 	if((ulFY<40000)||(ulFY>70000))	return;
	xjmp L3
L7:
	.dbline 61
; 	
; 	HEX2BCD(ulFX,ucFX);
	movw R24,R28
	adiw R24,2
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+12
	ldd R17,z+13
	ldd R18,z+14
	ldd R19,z+15
	xcall _HEX2BCD
	.dbline 62
; 	HEX2BCD(ulFY,ucFY);
	movw R24,R28
	adiw R24,5
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+16
	ldd R17,z+17
	ldd R18,z+18
	ldd R19,z+19
	xcall _HEX2BCD
	.dbline 68
; 
; 
; 	
; 
; 
; 	DISABLEXOUT;
	cbi 0x3,7
	.dbline 69
; 	DISABLEYOUT;
	cbi 0x3,6
	.dbline 71
; 
; 	SPISend(ucFX[0]);
	ldd R16,y+2
	xcall _SPISend
	.dbline 72
; 	SPISend(ucFX[1]);
	ldd R16,y+3
	xcall _SPISend
	.dbline 73
; 	SPISend(ucFX[2]);
	ldd R16,y+4
	xcall _SPISend
	.dbline 74
; 	SPISend(ucFY[0]);
	ldd R16,y+5
	xcall _SPISend
	.dbline 75
; 	SPISend(ucFY[1]);
	ldd R16,y+6
	xcall _SPISend
	.dbline 76
; 	SPISend(ucFY[2]);
	ldd R16,y+7
	xcall _SPISend
	.dbline 78
; 
; 	ENABLEXOUT;
	sbi 0x3,7
	.dbline 79
; 	ENABLEYOUT;
	sbi 0x3,6
	.dbline -2
L3:
	adiw R28,8
	xcall pop_gset2
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l ucFY 5 A[3:3]c
	.dbsym l ucFX 2 A[3:3]c
	.dbsym l ulFY 16 l
	.dbsym l ulFX 12 l
	.dbend
	.dbfunc e OutputFrequency1 _OutputFrequency1 fV
	.even
_OutputFrequency1::
	.dbline -1
	.dbline 84
; }
; 
; 
; void OutputFrequency1(void)
; {
	.dbline 86
; 	
; 	DISABLEXOUT;
	cbi 0x3,7
	.dbline 87
; 	DISABLEYOUT;
	cbi 0x3,6
	.dbline 89
; 
; 	SPISend(0x06);
	ldi R16,6
	xcall _SPISend
	.dbline 90
; 	SPISend(0x10);
	ldi R16,16
	xcall _SPISend
	.dbline 91
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 92
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 93
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 94
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 96
; 
; 	ENABLEXOUT;
	sbi 0x3,7
	.dbline 97
; 	ENABLEYOUT;
	sbi 0x3,6
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e OutputFrequency2 _OutputFrequency2 fV
	.even
_OutputFrequency2::
	.dbline -1
	.dbline 101
; }
; 
; void OutputFrequency2(void)
; {
	.dbline 103
; 
; 	DISABLEXOUT;
	cbi 0x3,7
	.dbline 104
; 	DISABLEYOUT;
	cbi 0x3,6
	.dbline 106
; 
; 	SPISend(0x07);
	ldi R16,7
	xcall _SPISend
	.dbline 107
; 	SPISend(0x00);
	clr R16
	xcall _SPISend
	.dbline 108
; 	SPISend(0x00);
	clr R16
	xcall _SPISend
	.dbline 109
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 110
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 111
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 113
; 
; 	ENABLEXOUT;
	sbi 0x3,7
	.dbline 114
; 	ENABLEYOUT;
	sbi 0x3,6
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e OutputFrequency3 _OutputFrequency3 fV
;           ucFX -> R20
	.even
_OutputFrequency3::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 122
; }
; 
; 
; 
; 
; 
; void OutputFrequency3(u8 ucFX)
; {
	.dbline 123
; 	DISABLEXOUT;
	cbi 0x3,7
	.dbline 124
; 	DISABLEYOUT;
	cbi 0x3,6
	.dbline 126
; 
; 	SPISend(0x06);
	ldi R16,6
	xcall _SPISend
	.dbline 127
; 	SPISend(ucFX);
	mov R16,R20
	xcall _SPISend
	.dbline 128
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 129
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 130
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 131
; 	SPISend(0);
	clr R16
	xcall _SPISend
	.dbline 133
; 
; 	ENABLEXOUT;
	sbi 0x3,7
	.dbline 134
; 	ENABLEYOUT;
	sbi 0x3,6
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ucFX 20 c
	.dbend
	.dbfunc e ulGetFrequency _ulGetFrequency fl
;        ulNextF -> y+8
;          dNowF -> y+4
;         dNextF -> y+0
;       dNowRad2 -> y+28
;         ulNowF -> y+24
	.even
_ulGetFrequency::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,20
	.dbline -1
	.dbline 139
; }
; 
; 
; u32 ulGetFrequency(u32 ulNowF,double dNowRad2)
; {
	.dbline 143
; 	double dNowF,dNextF;
; 	u32 ulNextF;
; 	
; 	dNowF=((double)ulNowF)/(double)1000000;
	ldi R16,<L18
	ldi R17,>L18
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R28
 ; stack offset 4
	ldd R2,z+28
	ldd R3,z+29
	ldd R4,z+30
	ldd R5,z+31
	lsr R5
	ror R4
	ror R3
	ror R2
	movw R16,R2
	movw R18,R4
	xcall long2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall empy32fs
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
 ; stack offset 4
	ldd R2,z+28
	ldd R3,z+29
	ldd R4,z+30
	ldd R5,z+31
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	movw R16,R2
	movw R18,R4
	xcall long2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall add32fs
	ldi R16,<L19
	ldi R17,>L19
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall div32f
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 145
; 
; 	dNextF=-1-xishuA*dNowF-xishuB*dNowRad2;
	ldi R16,<L20
	ldi R17,>L20
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	ldi R16,<L21
	ldi R17,>L21
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R28
 ; stack offset 8
	ldd R2,z+12
	ldd R3,z+13
	ldd R4,z+14
	ldd R5,z+15
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	xcall sub32fs
	ldi R16,<L22
	ldi R17,>L22
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R28
 ; stack offset 8
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32fs
	xcall sub32f
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 146
; 	dNextF=dNextF/xishuC;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	ldi R16,<L23

⌨️ 快捷键说明

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