📄 uart.s
字号:
brlo L61
ldi R24,57
ldd R2,y+2
cp R24,R2
brlo L61
.dbline 491
; (bChar[1] >= '0') && (bChar[1] <= '9') &&\
; (bChar[2] >= '0') && (bChar[2] <= '9'))
; {
.dbline 492
; sStringToChar("Parameter : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L67
ldi R17,>L67
xcall _sStringToChar
.dbline 493
; SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
ldd R18,y+1
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 494
; SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
ldd R18,y+2
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 495
; SciBuffer_Tx_In(&stSciBuffer,'\n');
ldi R18,10
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 496
; }
xjmp L62
L61:
.dbline 498
; else
; {
.dbline 499
; sStringToChar("Illegal Parameter !\n",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L70
ldi R17,>L70
xcall _sStringToChar
.dbline 500
; }
L62:
.dbline 501
; UART_WRITE_DATA(&stSciBuffer);
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _UART_WRITE_DATA
.dbline -2
.dbline 502
; }
L51:
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 511
;
; //********************************************************************
; // Function : ZZCommand
; // Input : none
; // Output : none
; // Description : ZZ,MMM,NNN
; //********************************************************************
; void ZZCommand(void)
; {
.dbline 513
; INT8U bChar[8];
; bChar[0] = stSciBuffer.bRxBuffer[2];
lds R2,_stSciBuffer+3+2
std y+0,R2
.dbline 514
; bChar[1] = stSciBuffer.bRxBuffer[3];
lds R2,_stSciBuffer+3+3
std y+1,R2
.dbline 515
; bChar[2] = stSciBuffer.bRxBuffer[4];
lds R2,_stSciBuffer+3+4
std y+2,R2
.dbline 516
; bChar[3] = stSciBuffer.bRxBuffer[5];
lds R2,_stSciBuffer+3+5
std y+3,R2
.dbline 517
; bChar[4] = stSciBuffer.bRxBuffer[6];
lds R2,_stSciBuffer+3+6
std y+4,R2
.dbline 518
; bChar[5] = stSciBuffer.bRxBuffer[7];
lds R2,_stSciBuffer+3+7
std y+5,R2
.dbline 519
; bChar[6] = stSciBuffer.bRxBuffer[8];
lds R2,_stSciBuffer+3+8
std y+6,R2
.dbline 520
; bChar[7] = stSciBuffer.bRxBuffer[9];
lds R2,_stSciBuffer+3+9
std y+7,R2
.dbline 521
; sStringToChar("Received ZZ Command , ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L95
ldi R17,>L95
xcall _sStringToChar
.dbline 522
; if((bChar[0] == ',') && (bChar[4] == ',') && \
ldd R24,y+0
cpi R24,44
breq X0
xjmp L96
X0:
ldd R24,y+4
cpi R24,44
breq X1
xjmp L96
X1:
ldd R24,y+1
cpi R24,48
brsh X2
xjmp L96
X2:
ldi R24,57
ldd R2,y+1
cp R24,R2
brsh X3
xjmp L96
X3:
ldd R24,y+2
cpi R24,48
brsh X4
xjmp L96
X4:
ldi R24,57
ldd R2,y+2
cp R24,R2
brsh X5
xjmp L96
X5:
ldd R24,y+3
cpi R24,48
brsh X6
xjmp L96
X6:
ldi R24,57
ldd R2,y+3
cp R24,R2
brsh X7
xjmp L96
X7:
ldd R24,y+5
cpi R24,48
brsh X8
xjmp L96
X8:
ldi R24,57
ldd R2,y+5
cp R24,R2
brsh X9
xjmp L96
X9:
ldd R24,y+6
cpi R24,48
brsh X10
xjmp L96
X10:
ldi R24,57
ldd R2,y+6
cp R24,R2
brlo L96
ldd R24,y+7
cpi R24,48
brlo L96
ldi R24,57
ldd R2,y+7
cp R24,R2
brlo L96
.dbline 529
; (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 530
; sStringToChar("Parameter1 : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L111
ldi R17,>L111
xcall _sStringToChar
.dbline 531
; SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
ldd R18,y+1
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 532
; SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
ldd R18,y+2
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 533
; SciBuffer_Tx_In(&stSciBuffer,bChar[3]);
ldd R18,y+3
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 534
; SciBuffer_Tx_In(&stSciBuffer,' ');
ldi R18,32
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 535
; sStringToChar("Parameter2 : ",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L115
ldi R17,>L115
xcall _sStringToChar
.dbline 536
; SciBuffer_Tx_In(&stSciBuffer,bChar[5]);
ldd R18,y+5
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 537
; SciBuffer_Tx_In(&stSciBuffer,bChar[6]);
ldd R18,y+6
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 538
; SciBuffer_Tx_In(&stSciBuffer,bChar[7]);
ldd R18,y+7
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 539
; SciBuffer_Tx_In(&stSciBuffer,'\n');
ldi R18,10
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _SciBuffer_Tx_In
.dbline 540
; }
xjmp L97
L96:
.dbline 542
; else
; {
.dbline 543
; sStringToChar("Illegal Parameters !\n",&stSciBuffer);
ldi R18,<_stSciBuffer
ldi R19,>_stSciBuffer
ldi R16,<L119
ldi R17,>L119
xcall _sStringToChar
.dbline 544
; }
L97:
.dbline 545
; UART_WRITE_DATA(&stSciBuffer);
ldi R16,<_stSciBuffer
ldi R17,>_stSciBuffer
xcall _UART_WRITE_DATA
.dbline -2
.dbline 546
; }
L71:
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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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\RS232通信协议应用设计\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 570
;
; 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 575
; 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 576
; wCommandBuffer[1] = ptr->bRxBuffer[1];
movw R30,R20
ldd R2,z+4
std y+3,R2
.dbline 578
;
; wLow = 0;
clr R22
.dbline 579
; wHigh = 8 - 1;
ldi R24,7
mov R10,R24
.dbline 580
; wMid = wHigh >> 1;
mov R20,R24
asr R20
xjmp L123
L122:
.dbline 583
;
; while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
; {
.dbline 584
; 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 L125
.dbline 585
; {
.dbline 586
; wHigh = wMid - 1;
mov R24,R20
subi R24,1
mov R10,R24
.dbline 587
; }
xjmp L126
L125:
.dbline 589
; else
; {
.dbline 590
; wLow = wMid + 1;
mov R22,R20
subi R22,255 ; addi 1
.dbline 591
; }
L126:
.dbline 593
mov R20,R22
add R20,R10
asr R20
.dbline 594
L123:
.dbline 582
cp R10,R22
brlt L127
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 L122
X11:
L127:
.dbline 596
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 L128
X12:
.dbline 597
.dbline 598
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 599
L128:
.dbline -2
.dbline 600
;
; wMid = (wLow + wHigh) >> 1;
; }
;
; if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
; {
; CommandJobArray[wMid]();
; }
; }
L120:
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 609
;
; //********************************************************************
; // 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 611
; 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 L134
X14:
cpi R24,2
ldi R30,0
cpc R25,R30
brne X15
xjmp L135
X15:
cpi R24,3
ldi R30,0
cpc R25,R30
brne X16
xjmp L136
X16:
cpi R24,4
ldi R30,0
cpc R25,R30
brne X17
xjmp L137
X17:
cpi R24,5
ldi R30,0
cpc R25,R30
brne X18
xjmp L138
X18:
cpi R24,6
ldi R30,0
cpc R25,R30
brne X19
xjmp L139
X19:
cpi R24,7
ldi R30,0
cpc R25,R30
brne X20
xjmp L140
X20:
cpi R24,8
ldi R30,0
cpc R25,R30
brne X21
xjmp L141
X21:
cpi R24,9
ldi R30,0
cpc R25,R30
brne X22
xjmp L142
X22:
cpi R24,10
ldi R30,0
cpc R25,R30
brne X23
xjmp L143
X23:
xjmp L131
X13:
.dbline 612
; {
L134:
.dbline 614
; 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 615
; break;
xjmp L132
L135:
.dbline 617
; 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
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -