📄 uart.s
字号:
std y+0,R2
.dbline 494
; bChar[1] = stSciBuffer.bRxBuffer[3];
lds R2,_stSciBuffer+3+3
std y+1,R2
.dbline 495
; bChar[2] = stSciBuffer.bRxBuffer[4];
lds R2,_stSciBuffer+3+4
std y+2,R2
.dbline 496
; sStringToChar("Received YY Command , ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L76
ldi R17,>L76
xcall _sStringToChar
.dbline 497
; if((bChar[0] == ',') && \
ldd R24,y+0
cpi R24,44
brne L77
ldd R24,y+1
cpi R24,48
brlo L77
ldi R24,57
ldd R2,y+1
cp R24,R2
brlo L77
ldd R24,y+2
cpi R24,48
brlo L77
ldi R24,57
ldd R2,y+2
cp R24,R2
brlo L77
.dbline 500
; (bChar[1] >= '0') && (bChar[1] <= '9') &&\
; (bChar[2] >= '0') && (bChar[2] <= '9'))
; {
.dbline 501
; sStringToChar("Parameter : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L83
ldi R17,>L83
xcall _sStringToChar
.dbline 502
; SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
ldd R18,y+1
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 503
; SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
ldd R18,y+2
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 504
; SciBuffer_Tx_In(&stSciBuffer,'\n');
ldi R18,10
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 505
; }
xjmp L78
L77:
.dbline 507
; else
; {
.dbline 508
; sStringToChar("Illegal Parameter !\n",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L86
ldi R17,>L86
xcall _sStringToChar
.dbline 509
; }
L78:
.dbline 510
; UART_WRITE_DATA(&stSciBuffer);
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _UART_WRITE_DATA
.dbline -2
.dbline 511
; }
L67:
adiw R28,3
.dbline 0 ; func end
ret
.dbsym l bChar 0 A[3:3]c
.dbend
.dbfunc e ZZCommand _ZZCommand fV
; bChar -> y+0
.even
_ZZCommand::
sbiw R28,8
.dbline -1
.dbline 520
;
; //********************************************************************
; // Function : ZZCommand
; // Input : none
; // Output : none
; // Description : ZZ,MMM,NNN
; //********************************************************************
; void ZZCommand(void)
; {
.dbline 522
; INT8U bChar[8];
; bChar[0] = stSciBuffer.bRxBuffer[2];
lds R2,_stSciBuffer+3+2
std y+0,R2
.dbline 523
; bChar[1] = stSciBuffer.bRxBuffer[3];
lds R2,_stSciBuffer+3+3
std y+1,R2
.dbline 524
; bChar[2] = stSciBuffer.bRxBuffer[4];
lds R2,_stSciBuffer+3+4
std y+2,R2
.dbline 525
; bChar[3] = stSciBuffer.bRxBuffer[5];
lds R2,_stSciBuffer+3+5
std y+3,R2
.dbline 526
; bChar[4] = stSciBuffer.bRxBuffer[6];
lds R2,_stSciBuffer+3+6
std y+4,R2
.dbline 527
; bChar[5] = stSciBuffer.bRxBuffer[7];
lds R2,_stSciBuffer+3+7
std y+5,R2
.dbline 528
; bChar[6] = stSciBuffer.bRxBuffer[8];
lds R2,_stSciBuffer+3+8
std y+6,R2
.dbline 529
; bChar[7] = stSciBuffer.bRxBuffer[9];
lds R2,_stSciBuffer+3+9
std y+7,R2
.dbline 530
; sStringToChar("Received ZZ Command , ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L111
ldi R17,>L111
xcall _sStringToChar
.dbline 531
; if((bChar[0] == ',') && (bChar[4] == ',') && \
ldd R24,y+0
cpi R24,44
breq X0
xjmp L112
X0:
ldd R24,y+4
cpi R24,44
breq X1
xjmp L112
X1:
ldd R24,y+1
cpi R24,48
brsh X2
xjmp L112
X2:
ldi R24,57
ldd R2,y+1
cp R24,R2
brsh X3
xjmp L112
X3:
ldd R24,y+2
cpi R24,48
brsh X4
xjmp L112
X4:
ldi R24,57
ldd R2,y+2
cp R24,R2
brsh X5
xjmp L112
X5:
ldd R24,y+3
cpi R24,48
brsh X6
xjmp L112
X6:
ldi R24,57
ldd R2,y+3
cp R24,R2
brsh X7
xjmp L112
X7:
ldd R24,y+5
cpi R24,48
brsh X8
xjmp L112
X8:
ldi R24,57
ldd R2,y+5
cp R24,R2
brsh X9
xjmp L112
X9:
ldd R24,y+6
cpi R24,48
brsh X10
xjmp L112
X10:
ldi R24,57
ldd R2,y+6
cp R24,R2
brlo L112
ldd R24,y+7
cpi R24,48
brlo L112
ldi R24,57
ldd R2,y+7
cp R24,R2
brlo L112
.dbline 538
; (bChar[1] >= '0') && (bChar[1] <= '9') && \
; (bChar[2] >= '0') && (bChar[2] <= '9') && \
; (bChar[3] >= '0') && (bChar[3] <= '9') && \
; (bChar[5] >= '0') && (bChar[5] <= '9') && \
; (bChar[6] >= '0') && (bChar[6] <= '9') && \
; (bChar[7] >= '0') && (bChar[7] <= '9'))
; {
.dbline 539
; sStringToChar("Parameter1 : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L127
ldi R17,>L127
xcall _sStringToChar
.dbline 540
; SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
ldd R18,y+1
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 541
; SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
ldd R18,y+2
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 542
; SciBuffer_Tx_In(&stSciBuffer,bChar[3]);
ldd R18,y+3
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 543
; SciBuffer_Tx_In(&stSciBuffer,' ');
ldi R18,32
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 544
; sStringToChar("Parameter2 : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L131
ldi R17,>L131
xcall _sStringToChar
.dbline 545
; SciBuffer_Tx_In(&stSciBuffer,bChar[5]);
ldd R18,y+5
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 546
; SciBuffer_Tx_In(&stSciBuffer,bChar[6]);
ldd R18,y+6
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 547
; SciBuffer_Tx_In(&stSciBuffer,bChar[7]);
ldd R18,y+7
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 548
; SciBuffer_Tx_In(&stSciBuffer,'\n');
ldi R18,10
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 549
; }
xjmp L113
L112:
.dbline 551
; else
; {
.dbline 552
; sStringToChar("Illegal Parameters !\n",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L135
ldi R17,>L135
xcall _sStringToChar
.dbline 553
; }
L113:
.dbline 554
; UART_WRITE_DATA(&stSciBuffer);
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _UART_WRITE_DATA
.dbline -2
.dbline 555
; }
L87:
adiw R28,8
.dbline 0 ; func end
ret
.dbsym l bChar 0 A[8:8]c
.dbend
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
_CommandJobArray::
.blkw 1
.area idata
.word PL_C1Command
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_C2Command
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_D1Command
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_D2Command
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_D3Command
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_XXCommand
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_YYCommand
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkw 1
.area idata
.word PL_ZZCommand
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.dbsym e CommandJobArray _CommandJobArray A[16:8]pfV
_wCommandTabArray::
.blkb 2
.area idata
.byte 'C,49
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'C,50
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'D,49
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'D,50
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'D,51
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'X,'X
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'Y,'Y
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.blkb 2
.area idata
.byte 'Z,'Z
.area data(ram, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.dbsym e wCommandTabArray _wCommandTabArray A[16:8:2]c
.area text(rom, con, rel)
.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\市电电压频率测量系统\UART.c
.dbfunc e SCI_Parsing _SCI_Parsing fV
; wCommandBuffer -> y+2
; wLow -> R22
; wHigh -> R10
; wMid -> R20
; ptr -> R20,R21
.even
_SCI_Parsing::
xcall push_gset3
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 579
;
; typedef void (*pFunc)(void);
;
; pFunc CommandJobArray[8]=
; {
; C1Command,C2Command,D1Command,D2Command,
; D3Command,XXCommand,YYCommand,ZZCommand
; };
;
; char wCommandTabArray[8][2]=
; {
; "C1", "C2",
; "D1", "D2", "D3",
; "XX", "YY", "ZZ",
; };
;
; //********************************************************************
; // Function : SCI_Parsing
; // Input : ptr-Pointer to SCI Buffer
; // Output : none
; // Description : Parse Received String and Execute Command
; //********************************************************************
; void SCI_Parsing(struct SCI_Buffer *ptr)
; {
.dbline 584
; INT8S wLow;
; INT8S wHigh;
; INT8S wMid;
; char wCommandBuffer[2];
; wCommandBuffer[0] = ptr->bRxBuffer[0];
movw R30,R20
ldd R2,z+3
std y+2,R2
.dbline 585
; wCommandBuffer[1] = ptr->bRxBuffer[1];
movw R30,R20
ldd R2,z+4
std y+3,R2
.dbline 587
;
; wLow = 0;
clr R22
.dbline 588
; wHigh = 8 - 1;
ldi R24,7
mov R10,R24
.dbline 589
; wMid = wHigh >> 1;
mov R20,R24
asr R20
xjmp L139
L138:
.dbline 592
;
; while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
; {
.dbline 593
; if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2) > 0)
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2
mov R17,R20
muls R16,R17
movw R16,R0
ldi R24,<_wCommandTabArray
ldi R25,>_wCommandTabArray
add R16,R24
adc R17,R25
xcall _strncmp
clr R2
clr R3
cp R2,R16
cpc R3,R17
brge L141
.dbline 594
; {
.dbline 595
; wHigh = wMid - 1;
mov R24,R20
subi R24,1
mov R10,R24
.dbline 596
; }
xjmp L142
L141:
.dbline 598
; else
; {
.dbline 599
; wLow = wMid + 1;
mov R22,R20
subi R22,255 ; addi 1
.dbline 600
; }
L142:
.dbline 602
mov R20,R22
add R20,R10
asr R20
.dbline 603
L139:
.dbline 591
cp R10,R22
brlt L143
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2
mov R17,R20
muls R16,R17
movw R16,R0
ldi R24,<_wCommandTabArray
ldi R25,>_wCommandTabArray
add R16,R24
adc R17,R25
xcall _strncmp
cpi R16,0
cpc R16,R17
brne L138
X11:
L143:
.dbline 605
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R28
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,2
mov R17,R20
muls R16,R17
movw R16,R0
ldi R24,<_wCommandTabArray
ldi R25,>_wCommandTabArray
add R16,R24
adc R17,R25
xcall _strncmp
cpi R16,0
cpc R16,R17
brne L144
X12:
.dbline 606
.dbline 607
ldi R16,2
mov R17,R20
muls R16,R17
movw R30,R0
ldi R24,<_CommandJobArray
ldi R25,>_CommandJobArray
add R30,R24
adc R31,R25
ldd R26,z+0
ldd R27,z+1
movw R30,R26
xcall xicall
.dbline 608
L144:
.dbline -2
.dbline 609
;
; wMid = (wLow + wHigh) >> 1;
; }
;
; if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
; {
; CommandJobArray[wMid]();
; }
; }
L136:
adiw R28,4
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l wCommandBuffer 2 A[2:2]c
.dbsym r wLow 22 C
.dbsym r wHigh 10 C
.dbsym r wMid 20 C
.dbsym r ptr 20 pX
.dbend
.dbfunc e sbNumAsciiPick _sbNumAsciiPick fc
; bCode -> R10
; bPosition -> y+10
; dwData -> y+6
.even
_sbNumAsciiPick::
xcall push_arg4
xcall push_gset3
.dbline -1
.dbline 618
;
; //********************************************************************
; // Function : sbNumAsciiPick
; // Input : dwData -Input Data,bPosition-Selected Index
; // Output : Position Index in Decimal System
; // Description : Extract out Selected Number in Decimal System
; //********************************************************************
; INT8U sbNumAsciiPick(INT32U dwData,INT8U bPosition)
; {
.dbline 620
; INT8U bCode;
; switch(bPosition)
ldd R10,y+10
clr R11
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
brne X14
xjmp L150
X14:
cpi R24,2
ldi R30,0
cpc R25,R30
brne X15
xjmp L151
X15:
cpi R24,3
ldi R30,0
cpc R25,R30
brne X16
xjmp L152
X16:
cpi R24,4
ldi R30,0
cpc R25,R30
brne X17
xjmp L153
X17:
cpi R24,5
ldi R30,0
cpc R25,R30
brne X18
xjmp L154
X18:
cpi R24,6
ldi R30,0
cpc R25,R30
brne X19
xjmp L155
X19:
cpi R24,7
ldi R30,0
cpc R25,R30
brne X20
xjmp L156
X20:
cpi R24,8
ldi R30,0
cpc R25,R30
brne X21
xjmp L157
X21:
cpi R24,9
ldi R30,0
cpc R25,R30
brne X22
xjmp L158
X22:
cpi R24,10
ldi R30,0
cpc R25,R30
brne X23
xjmp L159
X23:
xjmp L147
X13:
.dbline 621
; {
L150:
.dbline 623
; case 1:
; bCode = dwData % 10 + '0';
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 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 L148
L151:
.dbline 626
; case 2:
; bCode = (dwData / 10) % 10 + '0';
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+6
ldd R3,z+7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -