📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_bLine_Event::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e bLine_Event _bLine_Event c
_bLineCnt::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e bLineCnt _bLineCnt c
_bLineCntTemp::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e bLineCntTemp _bLineCntTemp c
_wLineVoltSample::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLineVoltSample _wLineVoltSample I
_wLineVoltReal::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLineVoltReal _wLineVoltReal I
_wLineVoltRMS::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLineVoltRMS _wLineVoltRMS I
_wLinePeriod::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLinePeriod _wLinePeriod i
_wLinePeriodTemp::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLinePeriodTemp _wLinePeriodTemp i
_wLineCaptureTime::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLineCaptureTime _wLineCaptureTime i
_wLineCaptureTimeLast::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e wLineCaptureTimeLast _wLineCaptureTimeLast i
_dwLineVoltSum::
.blkb 4
.area idata
.word 0,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e dwLineVoltSum _dwLineVoltSum l
_dwLineVoltSumTemp::
.blkb 4
.area idata
.word 0,0
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbsym e dwLineVoltSumTemp _dwLineVoltSumTemp l
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 32
; //***************************************************************
; // File Name : main.c
; // Author : Steaven
; // Created : 2008-07-26
; // Modified :
; // Revision : V0.0
; //***************************************************************
;
; #include "includes.h"
;
; //constant definition
; #define cLineRatio 9333
;
; //global variables definition
; INT8U bLine_Event = 0; //Line Calculation Event
; INT8U bLineCnt = 0; //Line Sampling Count
; INT8U bLineCntTemp = 0; //Line Sampling Count(temporary)
; INT16S wLineVoltSample = 0; //Line Sampling Value
; INT16S wLineVoltReal = 0; //Line Instant Value
; INT16S wLineVoltRMS = 0; //Line RMS Value
; INT16U wLinePeriod = 0; //Line Period
; INT16U wLinePeriodTemp = 0; //Line Period(temporary)
; INT16U wLineCaptureTime = 0; //Line Capature Time
; INT16U wLineCaptureTimeLast = 0; //Line Last Capature Time
; INT32U dwLineVoltSum = 0; //Line S-I Accumulation
; INT32U dwLineVoltSumTemp = 0; //Line S-I Accumulation(temporary)
;
; //local function declaration
; INT16U swRoot(INT32U dwNumber);
;
; void main(void)
; {
.dbline 33
; Hardware_Init();
xcall _Hardware_Init
.dbline 34
; Init_UART();
xcall _Init_UART
xjmp L3
L2:
.dbline 36
; while(1)
; {
.dbline 37
; if(bLine_Event == 1)
lds R24,_bLine_Event
cpi R24,1
brne L5
.dbline 38
; {
.dbline 39
; bLine_Event = 0;
clr R2
sts _bLine_Event,R2
.dbline 40
; if(bLineCnt != 0)
lds R2,_bLineCnt
tst R2
breq L7
.dbline 41
; {
.dbline 42
; wLineVoltRMS = swRoot(dwLineVoltSum/bLineCnt);
clr R3
clr R4
clr R5
lds R8,_dwLineVoltSum+2
lds R9,_dwLineVoltSum+2+1
lds R6,_dwLineVoltSum
lds R7,_dwLineVoltSum+1
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R6
movw R18,R8
xcall div32u
xcall _swRoot
sts _wLineVoltRMS+1,R17
sts _wLineVoltRMS,R16
.dbline 43
; }
L7:
.dbline 44
; }
L5:
.dbline 45
L3:
.dbline 35
xjmp L2
X0:
.dbline -2
.dbline 46
; }
; }
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 76
jmp _TimeCountr0_Interrupt
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\main.c
.dbfunc e TimeCountr0_Interrupt _TimeCountr0_Interrupt fV
; temp2 -> R12,R13
; temp1 -> R10,R11
.even
_TimeCountr0_Interrupt::
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
in R2,0x3f
st -y,R2
xcall push_gset4
.dbline -1
.dbline 56
;
; //***************************************************************
; // Function : wTimeCountr0_Interrupt
; // Input : none
; // Output : none
; // Description : ATmega16 T/C0 ISR
; //***************************************************************
; #pragma interrupt_handler TimeCountr0_Interrupt:20
; void TimeCountr0_Interrupt(void)
; {
.dbline 60
; INT16U temp1,temp2;
;
; //Clear wTimeCountr0 OCIF Flag
; TIFR |= 0x02;
in R24,0x38
ori R24,2
out 0x38,R24
.dbline 61
; TCNT0 = 0x00;
clr R2
out 0x32,R2
.dbline 64
;
; //Read ADC Conversion
; temp1 = (INT16U)ADCL;
in R10,0x4
clr R11
.dbline 65
; temp2 = (INT16U)ADCH;
in R12,0x5
clr R13
.dbline 66
; wLineVoltSample = (temp2 << 8) | temp1;
movw R2,R12
mov R3,R2
clr R2
or R2,R10
or R3,R11
sts _wLineVoltSample+1,R3
sts _wLineVoltSample,R2
.dbline 67
; wLineVoltReal = (INT16S)(((INT32S)(wLineVoltSample - 512) * cLineRatio) >> 10);
movw R24,R2
subi R24,0
sbci R25,2
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldi R20,117
ldi R21,36
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
ldi R24,10
ldi R25,0
st -y,R24
xcall asr32
sts _wLineVoltReal+1,R17
sts _wLineVoltReal,R16
.dbline 68
; if(wLineVoltReal < 0)
movw R24,R16
cpi R16,0
ldi R30,0
cpc R17,R30
brge L10
.dbline 69
; {
.dbline 70
; wLineVoltReal = -wLineVoltReal;
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
sts _wLineVoltReal+1,R25
sts _wLineVoltReal,R24
.dbline 71
; }
L10:
.dbline 72
; dwLineVoltSumTemp += (INT32S)wLineVoltReal * (INT32S)wLineVoltReal;
lds R2,_wLineVoltReal
lds R3,_wLineVoltReal+1
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
lds R6,_wLineVoltReal
lds R7,_wLineVoltReal+1
clr R8
sbrc R7,7
com R8
clr R9
sbrc R8,7
com R9
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R6
movw R18,R8
xcall empy32s
lds R4,_dwLineVoltSumTemp+2
lds R5,_dwLineVoltSumTemp+2+1
lds R2,_dwLineVoltSumTemp
lds R3,_dwLineVoltSumTemp+1
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _dwLineVoltSumTemp+1,R3
sts _dwLineVoltSumTemp,R2
sts _dwLineVoltSumTemp+2+1,R5
sts _dwLineVoltSumTemp+2,R4
.dbline 73
; bLineCntTemp++;
lds R24,_bLineCntTemp
subi R24,255 ; addi 1
sts _bLineCntTemp,R24
.dbline -2
.dbline 84
; /*
; if(bLineCntTemp >= 40)
; {
; dwLineVoltSum = dwLineVoltSumTemp;
; dwLineVoltSumTemp = 0;
; bLineCnt = bLineCntTemp;
; bLineCntTemp = 0;
; bLine_Event = 1;
; }
; */
; }
L9:
xcall pop_gset4
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r temp2 12 i
.dbsym r temp1 10 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -