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

📄 main.s

📁 AVR单片机RS232通信接口应用设计
💻 S
📖 第 1 页 / 共 2 页
字号:
	.area vector(rom, abs)
	.org 20
	jmp _Timer1Capture_Interrupt
	.area text(rom, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
	.dbfunc e Timer1Capture_Interrupt _Timer1Capture_Interrupt fV
;          temp2 -> <dead>
;          temp1 -> <dead>
	.even
_Timer1Capture_Interrupt::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	st -y,R25
	st -y,R30
	in R0,0x3f
	st -y,R0
	xcall push_gset2
	.dbline -1
	.dbline 94
; 
; //***************************************************************
; // Function    : Timer1Capture_Interrupt                                
; // Input       : none                                            
; // Output      : none                                            
; // Description : ATmega16 T/C1-Capature ISR                               
; //***************************************************************
; #pragma interrupt_handler Timer1Capture_Interrupt:6
; void Timer1Capture_Interrupt(void)
; {
	.dbline 98
; 	INT16U temp1,temp2;
; 
; 	//Clear Interrupt Flag
; 	TIFR |= 0x20;
	in R24,0x38
	ori R24,32
	out 0x38,R24
	.dbline 100
; 	//Calculate Line Period
; 	wLineCaptureTimeLast = wLineCaptureTime;
	lds R2,_wLineCaptureTime
	lds R3,_wLineCaptureTime+1
	sts _wLineCaptureTimeLast+1,R3
	sts _wLineCaptureTimeLast,R2
	.dbline 101
; 	wLineCaptureTime = ICR1;
	in R2,0x26
	in R3,0x27
	sts _wLineCaptureTime+1,R3
	sts _wLineCaptureTime,R2
	.dbline 102
; 	wLinePeriodTemp = wLineCaptureTime - wLineCaptureTimeLast;
	lds R2,_wLineCaptureTimeLast
	lds R3,_wLineCaptureTimeLast+1
	lds R4,_wLineCaptureTime
	lds R5,_wLineCaptureTime+1
	sub R4,R2
	sbc R5,R3
	sts _wLinePeriodTemp+1,R5
	sts _wLinePeriodTemp,R4
	.dbline 103
; 	if((wLinePeriodTemp >= 14285) && (wLinePeriodTemp <= 25000))
	movw R24,R4
	cpi R24,205
	ldi R30,55
	cpc R25,R30
	brlo L13
	ldi R24,25000
	ldi R25,97
	movw R2,R4
	cp R24,R4
	cpc R25,R5
	brlo L13
	.dbline 104
; 	{
	.dbline 105
; 		wLinePeriod = wLinePeriodTemp;
	sts _wLinePeriod+1,R3
	sts _wLinePeriod,R2
	.dbline 106
; 	}
L13:
	.dbline 108
; 	//Acquire Line Volt Accumulation
; 	dwLineVoltSum = dwLineVoltSumTemp;
	lds R4,_dwLineVoltSumTemp+2
	lds R5,_dwLineVoltSumTemp+2+1
	lds R2,_dwLineVoltSumTemp
	lds R3,_dwLineVoltSumTemp+1
	sts _dwLineVoltSum+1,R3
	sts _dwLineVoltSum,R2
	sts _dwLineVoltSum+2+1,R5
	sts _dwLineVoltSum+2,R4
	.dbline 109
; 	dwLineVoltSumTemp = 0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _dwLineVoltSumTemp+1,R21
	sts _dwLineVoltSumTemp,R20
	sts _dwLineVoltSumTemp+2+1,R23
	sts _dwLineVoltSumTemp+2,R22
	.dbline 110
; 	bLineCnt = bLineCntTemp;
	lds R2,_bLineCntTemp
	sts _bLineCnt,R2
	.dbline 111
; 	bLineCntTemp = 0;
	clr R2
	sts _bLineCntTemp,R2
	.dbline 112
; 	bLine_Event = 1;
	ldi R24,1
	sts _bLine_Event,R24
	.dbline -2
	.dbline 113
; }
L12:
	xcall pop_gset2
	ld R0,y+
	out 0x3f,R0
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	.dbline 0 ; func end
	reti
	.dbsym l temp2 1 i
	.dbsym l temp1 1 i
	.dbend
	.dbfunc e swRoot _swRoot fi
;             ii -> R10
;   dwSquareRoot -> y+0
;       dwNumber -> y+10
	.even
_swRoot::
	xcall push_arg4
	xcall push_gset3
	sbiw R28,4
	.dbline -1
	.dbline 122
; 
; //***************************************************************
; // Function    : swRoot                                
; // Input       : dwNumber                                            
; // Output      : Square Root of input                                            
; // Description : Square Root Calculate                               
; //***************************************************************
; INT16U swRoot(INT32U dwNumber)
; {
	.dbline 126
; 	INT8U ii;
;     INT32U dwSquareRoot;
;     
;     if(dwNumber == 0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L16
	.dbline 127
;     {
	.dbline 128
;     	return (0);
	clr R16
	clr R17
	xjmp L15
L16:
	.dbline 130
;     }
;     if(dwNumber <= 4194304)
	ldi R20,0
	ldi R21,0
	ldi R22,64
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brlo L18
	.dbline 131
;     {
	.dbline 132
;     	dwSquareRoot = dwNumber / 1024 + 63;
	ldi R24,10
	ldi R25,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R2,R16
	movw R4,R18
	ldi R20,63
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 133
;     }
	xjmp L19
L18:
	.dbline 134
;     else if(dwNumber <= 134217728)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,8
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brlo L20
	.dbline 135
;     {
	.dbline 136
;     	dwSquareRoot = dwNumber / 4096 + 255;
	ldi R24,12
	ldi R25,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R2,R16
	movw R4,R18
	ldi R20,255
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 137
;     }
	xjmp L21
L20:
	.dbline 139
;     else
;     {
	.dbline 140
;     	dwSquareRoot = dwNumber / 16384 + 1023;
	ldi R24,14
	ldi R25,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R2,R16
	movw R4,R18
	ldi R20,255
	ldi R21,3
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 141
;     }
L21:
L19:
	.dbline 142
;     for (ii = 0;ii < 5;ii++)
	clr R10
	xjmp L25
L22:
	.dbline 143
	.dbline 144
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	ldd R6,z+10
	ldd R7,z+11
	ldd R8,z+12
	ldd R9,z+13
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall div32u
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	lsr R5
	ror R4
	ror R3
	ror R2
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 145
L23:
	.dbline 142
	inc R10
L25:
	.dbline 142
	mov R24,R10
	cpi R24,5
	brlo L22
	.dbline 146
; 	{
; 		dwSquareRoot = (dwSquareRoot + dwNumber / dwSquareRoot) / 2;
; 	}
;     return((INT16U)dwSquareRoot);
	movw R30,R28
	ldd R16,z+0
	ldd R17,z+1
	.dbline -2
L15:
	adiw R28,4
	xcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r ii 10 c
	.dbsym l dwSquareRoot 0 l
	.dbsym l dwNumber 10 l
	.dbend

⌨️ 快捷键说明

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