📄 uarttest.s
字号:
.module uarttest.c
.area data(ram, con, rel)
_bcnt::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbsym e bcnt _bcnt c
_bhead::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbsym e bhead _bhead c
_bend::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbsym e bend _bend c
_ccnt::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbsym e ccnt _ccnt c
_cmd_buff::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.blkb 42
.area idata
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.word 0,0,0,0,0
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbstruct 0 3 COMMAND
.dbfield 0 cmd c
.dbfield 1 dat1 c
.dbfield 2 dat2 c
.dbend
.dbsym e cmd_buff _cmd_buff A[45:15]S[COMMAND]
.area text(rom, con, rel)
.dbfile G:\我的毕设\指令处理程序\uarttest.c
.dbfunc e showbuff _showbuff fV
; i -> R20
.even
_showbuff::
xcall push_gset1
.dbline -1
.dbline 34
; #include <iom128v.h>
; #include <macros.h>
;
; #define CMD 'O'
; #define END 'E'
; #define INVAIL 0
; #define READY 'R'
; #define BUSY 'B'
;
;
; #define CONNECT 'C' //连接
; #define WAIT 'W' //等待
; #define MOVEX 'X' //X移位
; #define MOVEY 'Y' //Y移位
; #define MOVEXY 'P' //X-Y移位
;
; #define uchar unsigned char
; #define EOS 'A'
; #define BUFFLEN 40
; #define CMDLEN 5
;
; struct COMMAND{ //指令结构
; uchar cmd;
; uchar dat1;
; uchar dat2;
; };
;
; uchar buff[BUFFLEN],bcnt=00,bhead=0,bend=0; //接受数据缓存 及计数器
; unsigned char ccnt=0; //指令队列计数器
; struct COMMAND cmd_buff[15]={{0,0,0}}; //指令队列
;
; void Send_Str(uchar * str);
;
; void showbuff(void){
.dbline 36
; char i;
; Send_Str(" [Buff: A");
ldi R16,<L2
ldi R17,>L2
xcall _Send_Str
.dbline 37
; for(i=0;i<BUFFLEN;i++)
clr R20
xjmp L6
L3:
.dbline 38
; {
.dbline 39
; if(buff[i]==INVAIL) putchar('-');
ldi R24,<_buff
ldi R25,>_buff
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
tst R2
brne L7
.dbline 39
ldi R16,45
ldi R17,0
xcall _putchar
xjmp L8
L7:
.dbline 40
; else putchar(buff[i]);
ldi R24,<_buff
ldi R25,>_buff
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
clr R17
xcall _putchar
L8:
.dbline 41
L4:
.dbline 37
inc R20
L6:
.dbline 37
cpi R20,40
brlo L3
.dbline 42
; }
; Send_Str(" ] A");
ldi R16,<L9
ldi R17,>L9
xcall _Send_Str
.dbline 43
; putchar(' ');
ldi R16,32
ldi R17,0
xcall _putchar
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e Cmd_buffPro _Cmd_buffPro fV
; j -> R20
; t -> R20
; f -> R22
; tbend -> R10
; i -> R12
.even
_Cmd_buffPro::
xcall push_gset4
.dbline -1
.dbline 47
; }
;
; void Cmd_buffPro(void)
; {uchar i,j=0,tbend,t=0,f=0;
.dbline 47
clr R20
.dbline 47
.dbline 47
clr R22
.dbline 48
; tbend=bcnt;
lds R10,_bcnt
.dbline 49
; i=bhead;
lds R12,_bhead
xjmp L12
L11:
.dbline 52
;
; while(i!=tbend)
; {tbend=bcnt;
.dbline 52
lds R10,_bcnt
.dbline 53
; if(buff[i]==CMD)
ldi R24,<_buff
ldi R25,>_buff
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,79
breq X0
xjmp L14
X0:
.dbline 54
; {
.dbline 55
; f=1;
ldi R22,1
.dbline 57
;
; if(bhead<=tbend)
lds R2,_bhead
cp R10,R2
brlo L16
.dbline 58
; {
.dbline 59
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,251 ; offset = 5
sbci R17,255
subi R16,1
sbci R17,0
xcall mod16s
lds R2,_bhead
clr R3
cp R2,R16
cpc R3,R17
brge L18
mov R2,R10
clr R3
cp R16,R2
cpc R17,R3
brge L18
.dbline 59
ldi R20,1
xjmp L17
L18:
.dbline 59
; if((((i+CMDLEN-1)%BUFFLEN>bhead)&&((i+CMDLEN-1)%BUFFLEN<tbend))) t=1;else t=0;
clr R20
.dbline 60
xjmp L17
L16:
.dbline 60
; }else {
.dbline 61
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,251 ; offset = 5
sbci R17,255
subi R16,1
sbci R17,0
xcall mod16s
lds R2,_bhead
clr R3
cp R2,R16
cpc R3,R17
brlt L22
mov R2,R10
clr R3
cp R16,R2
cpc R17,R3
brge L20
L22:
.dbline 61
ldi R20,1
xjmp L21
L20:
.dbline 61
; if((((i+CMDLEN-1)%BUFFLEN>bhead)||((i+CMDLEN-1)%BUFFLEN<tbend))) t=1;else t=0;
clr R20
L21:
.dbline 62
; }
L17:
.dbline 63
; if(t)
tst R20
brne X1
xjmp L15
X1:
.dbline 64
; {
.dbline 65
; if(buff[(i+CMDLEN-1)%BUFFLEN]==END)
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,251 ; offset = 5
sbci R17,255
subi R16,1
sbci R17,0
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,69
breq X2
xjmp L25
X2:
.dbline 66
; {
.dbline 67
; f=0;
clr R22
.dbline 72
;
; //Send_Str(" [CMD] A");j++;
; //putchar(j+'0');
;
; ccnt=ccnt+1;buff[i%BUFFLEN]=INVAIL;
lds R24,_ccnt
subi R24,255 ; addi 1
sts _ccnt,R24
.dbline 72
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 73
; cmd_buff[ccnt].cmd =buff[(i+1)%BUFFLEN];buff[(i+1)%BUFFLEN]=INVAIL;
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_ccnt
ldi R24,3
mul R24,R3
movw R30,R0
ldi R24,<_cmd_buff
ldi R25,>_cmd_buff
add R30,R24
adc R31,R25
std z+0,R2
.dbline 73
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,255 ; offset = 1
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 74
; cmd_buff[ccnt].dat1=buff[(i+2)%BUFFLEN];buff[(i+2)%BUFFLEN]=INVAIL;
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,254 ; offset = 2
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_ccnt
ldi R24,3
mul R24,R3
movw R30,R0
ldi R24,<_cmd_buff+1
ldi R25,>_cmd_buff+1
add R30,R24
adc R31,R25
std z+0,R2
.dbline 74
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,254 ; offset = 2
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 75
; cmd_buff[ccnt].dat2=buff[(i+3)%BUFFLEN];buff[(i+3)%BUFFLEN]=INVAIL;
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,253 ; offset = 3
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
ldd R2,z+0
lds R3,_ccnt
ldi R24,3
mul R24,R3
movw R30,R0
ldi R24,<_cmd_buff+2
ldi R25,>_cmd_buff+2
add R30,R24
adc R31,R25
std z+0,R2
.dbline 75
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,253 ; offset = 3
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 76
; buff[(i+4)%BUFFLEN]=INVAIL;
ldi R18,40
ldi R19,0
mov R16,R12
clr R17
subi R16,252 ; offset = 4
sbci R17,255
xcall mod16s
movw R30,R16
ldi R24,<_buff
ldi R25,>_buff
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 78
;
; bhead=((i+CMDLEN)%(BUFFLEN));
ldi R17,40
mov R16,R12
subi R16,251 ; addi 5
xcall mod8u
sts _bhead,R16
.dbline 79
; i=bhead;
mov R12,R16
.dbline 83
xjmp L15
L25:
.dbline 83
;
; //putchar('[');putchar(i/10+'0');putchar(i%10+'0');putchar(']');
; //putchar('[');putchar(tbend/10+'0');putchar(tbend%10+'0');putchar(']');
; }else {
.dbline 84
; f=0;buff[i]=INVAIL;
clr R22
.dbline 84
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -