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

📄 uarttest.s

📁 AVR 128 单片机 串口 自定义指令处理程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R24,<_buff
	ldi R25,>_buff
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 85
; 						  }
	.dbline 86
; 				}
	.dbline 87
	xjmp L15
L14:
	.dbline 87
; 			}else{
	.dbline 88
; 				  if(f==0)buff[i]=INVAIL;
	tst R22
	brne L29
	.dbline 88
	ldi R24,<_buff
	ldi R25,>_buff
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
L29:
	.dbline 89
; 				  i++;
	inc R12
	.dbline 90
; 				  i=i%BUFFLEN;bhead=i;
	ldi R17,40
	mov R16,R12
	xcall mod8u
	mov R12,R16
	.dbline 90
	sts _bhead,R12
	.dbline 91
; 				 }
L15:
	.dbline 92
L12:
	.dbline 51
	cp R12,R10
	breq X3
	xjmp L11
X3:
	.dbline -2
L10:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r t 20 c
	.dbsym r f 22 c
	.dbsym r tbend 10 c
	.dbsym r i 12 c
	.dbend
	.dbfunc e Cmd_pro _Cmd_pro fV
;              i -> R22
	.even
_Cmd_pro::
	xcall push_gset2
	.dbline -1
	.dbline 97
; 		}
; 	 
; 	 }
; 	 
; void Cmd_pro(void)
; 	 {uchar i;
	.dbline 99
; 	 
; 	 if(ccnt>0)
	clr R2
	lds R3,_ccnt
	cp R2,R3
	brlo X5
	xjmp L32
X5:
	.dbline 100
; 	 	{
	.dbline 101
; 	 	for(i=0;i<ccnt;i++)
	clr R22
	xjmp L37
L34:
	.dbline 102
	.dbline 103
	ldi R24,3
	mul R24,R22
	ldi R24,<_cmd_buff+3
	ldi R25,>_cmd_buff+3
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_cmd_buff
	ldi R25,>_cmd_buff
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 104
	ldi R24,3
	mul R24,R22
	ldi R24,<_cmd_buff+3
	ldi R25,>_cmd_buff+3
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_cmd_buff+1
	ldi R25,>_cmd_buff+1
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 105
	ldi R24,3
	mul R24,R22
	ldi R24,<_cmd_buff+3
	ldi R25,>_cmd_buff+3
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_cmd_buff+2
	ldi R25,>_cmd_buff+2
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 107
	ldi R16,91
	ldi R17,0
	xcall _putchar
	.dbline 107
	lds R16,_ccnt
	clr R17
	subi R16,208  ; offset = 48
	sbci R17,255
	xcall _putchar
	.dbline 108
	ldi R16,<L43
	ldi R17,>L43
	xcall _Send_Str
	.dbline 109
	lds R16,_cmd_buff
	clr R17
	xcall _putchar
	.dbline 111
L35:
	.dbline 101
	inc R22
L37:
	.dbline 101
	lds R2,_ccnt
	cp R22,R2
	brsh X6
	xjmp L34
X6:
	.dbline 112
; 	 		{
; 			cmd_buff[i].cmd=cmd_buff[i+1].cmd;
; 			cmd_buff[i].dat1=cmd_buff[i+1].cmd;
; 			cmd_buff[i].dat2=cmd_buff[i+1].cmd;
; 			
; 			putchar('[');putchar(('0'+ccnt));
; 			Send_Str(":proCMD] A");
; 			putchar(cmd_buff[0].cmd);	
; 
; 			}
; 		 ccnt--;
	mov R24,R2
	subi R24,1
	sts _ccnt,R24
	.dbline 114
; 		
; 	 	switch(cmd_buff[0].cmd)
	lds R20,_cmd_buff
	clr R21
	cpi R20,80
	ldi R30,0
	cpc R21,R30
	breq L55
	ldi R24,80
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L59
L58:
	cpi R20,67
	ldi R30,0
	cpc R21,R30
	breq L47
	xjmp L44
L59:
	cpi R20,87
	ldi R30,0
	cpc R21,R30
	breq L49
	cpi R20,88
	ldi R30,0
	cpc R21,R30
	breq L51
	cpi R20,89
	ldi R30,0
	cpc R21,R30
	breq L53
	xjmp L44
X4:
	.dbline 115
; 	 		{
L47:
	.dbline 116
; 			case CONNECT:Send_Str("connect A");break;
	ldi R16,<L48
	ldi R17,>L48
	xcall _Send_Str
	.dbline 116
	xjmp L45
L49:
	.dbline 117
; 			case WAIT	:Send_Str("waiting A");break;
	ldi R16,<L50
	ldi R17,>L50
	xcall _Send_Str
	.dbline 117
	xjmp L45
L51:
	.dbline 118
; 			case MOVEX	:Send_Str("movex A");break;
	ldi R16,<L52
	ldi R17,>L52
	xcall _Send_Str
	.dbline 118
	xjmp L45
L53:
	.dbline 119
; 			case MOVEY	:Send_Str("movey A");break;
	ldi R16,<L54
	ldi R17,>L54
	xcall _Send_Str
	.dbline 119
	xjmp L45
L55:
	.dbline 120
; 			case MOVEXY :Send_Str("movexy A");break;
	ldi R16,<L56
	ldi R17,>L56
	xcall _Send_Str
	.dbline 120
	xjmp L45
L44:
	.dbline 121
; 			default:Send_Str("Inlegal Command!A");break;
	ldi R16,<L57
	ldi R17,>L57
	xcall _Send_Str
	.dbline 121
L45:
	.dbline 123
L32:
	.dbline -2
L31:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbend
	.area vector(rom, abs)
	.org 72
	jmp _ReceivePro
	.area text(rom, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
	.dbfunc e ReceivePro _ReceivePro fV
	.even
_ReceivePro::
	xcall push_lset
	.dbline -1
	.dbline 128
; 			}
; 	 	}
; 	 }
; 	 
; #pragma interrupt_handler ReceivePro:19
; void ReceivePro(void)	  //串口接受中断服务程序
; 	{
	.dbline 129
; 	buff[bcnt]=UDR0;
	ldi R24,<_buff
	ldi R25,>_buff
	lds R30,_bcnt
	clr R31
	add R30,R24
	adc R31,R25
	in R2,0xc
	std z+0,R2
	.dbline 130
; 	bcnt++;
	lds R24,_bcnt
	subi R24,255    ; addi 1
	sts _bcnt,R24
	.dbline 131
; 	bcnt=bcnt%(BUFFLEN);
	ldi R17,40
	mov R16,R24
	xcall mod8u
	sts _bcnt,R16
	.dbline 133
; 	
; 	showbuff();
	xcall _showbuff
	.dbline -2
L60:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Send_Str _Send_Str fV
;            str -> R20,R21
	.even
_Send_Str::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 139
; 	//putchar('['); putchar('H'); putchar(':');putchar(bhead/10+'0');putchar(bhead%10+'0');putchar(']');
; 	//putchar('['); putchar('b'); putchar(':');putchar(bcnt/10+'0');putchar(bcnt%10+'0');putchar(']');
; 	}
; 
; void Send_Str(uchar * str)		//串口发送程序
; 	 {
	xjmp L63
L62:
	.dbline 141
	.dbline 142
	movw R30,R20
	ld R16,Z+
	movw R20,R30
	clr R17
	xcall _putchar
	.dbline 143
L63:
	.dbline 140
; 	 while(*str!=EOS)
	movw R30,R20
	ldd R24,z+0
	cpi R24,65
	brne L62
	.dbline -2
L61:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r str 20 pc
	.dbend
	.dbfunc e USART_Init _USART_Init fV
;           baud -> R16,R17
	.even
_USART_Init::
	.dbline -1
	.dbline 146
; 	 	{
; 		putchar(*(str++));
; 		}
; 	 }
; void USART_Init(unsigned int baud)			  //串口初始化
; 	 {
	.dbline 147
; 	 UBRR0H=0;//(uchar) (baud>>8);
	clr R2
	sts 144,R2
	.dbline 148
; 	 UBRR0L=51;//(uchar) baud;
	ldi R24,51
	out 0x9,R24
	.dbline 150
; 	 
; 	 UCSR0B=(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
	ldi R24,152
	out 0xa,R24
	.dbline 151
; 	 UCSR0C=0x06;
	ldi R24,6
	sts 149,R24
	.dbline -2
L65:
	.dbline 0 ; func end
	ret
	.dbsym r baud 16 i
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 155
; 	 }
; 	 
; void main()
; 	 {
	.dbline 156
; 	 DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	.dbline 157
; 	 PORTB=0X01;	 
	ldi R24,1
	out 0x18,R24
	.dbline 159
; 	 
; 	 USART_Init(0X06);
	ldi R16,6
	ldi R17,0
	xcall _USART_Init
	.dbline 160
; 	 _SEI();
	sei
	.dbline 162
; 	 
; 	 showbuff();
	xcall _showbuff
	xjmp L68
L67:
	.dbline 165
	.dbline 166
	xcall _Cmd_buffPro
	.dbline 167
	xcall _Cmd_pro
	.dbline 168
L68:
	.dbline 165
	xjmp L67
X7:
	.dbline -2
L66:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
_buff::
	.blkb 40
	.dbsym e buff _buff A[40:40]c
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L57:
	.blkb 18
	.area idata
	.byte 'I,'n,'l,'e,'g,'a,'l,32,'C,'o,'m,'m,'a,'n,'d,33
	.byte 'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L56:
	.blkb 9
	.area idata
	.byte 'm,'o,'v,'e,'x,'y,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L54:
	.blkb 8
	.area idata
	.byte 'm,'o,'v,'e,'y,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L52:
	.blkb 8
	.area idata
	.byte 'm,'o,'v,'e,'x,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L50:
	.blkb 10
	.area idata
	.byte 'w,'a,'i,'t,'i,'n,'g,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L48:
	.blkb 10
	.area idata
	.byte 'c,'o,'n,'n,'e,'c,'t,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L43:
	.blkb 11
	.area idata
	.byte 58,'p,'r,'o,'C,'M,'D,93,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L9:
	.blkb 5
	.area idata
	.byte 32,93,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c
L2:
	.blkb 10
	.area idata
	.byte 32,91,'B,'u,'f,'f,58,32,'A,0
	.area data(ram, con, rel)
	.dbfile G:\我的毕设\指令处理程序\uarttest.c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -