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

📄 uarttest.s

📁 AVR 128 单片机 串口 自定义指令处理程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -