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

📄 uarttest.lst

📁 AVR 128 单片机 串口 自定义指令处理程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    008B EFCF      LDI	R28,0xFF
    008C E1D0      LDI	R29,0x10
    008D BFCD      OUT	0x3D,R28
    008E BFDE      OUT	0x3E,R29
    008F 51C0      SUBI	R28,0x10
    0090 40D0      SBCI	R29,0
    0091 EA0A      LDI	R16,0xAA
    0092 8308      STD	Y+0,R16
    0093 2400      CLR	R0
    0094 E8EA      LDI	R30,0x8A
    0095 E0F1      LDI	R31,1
    0096 E011      LDI	R17,1
    0097 3BE4      CPI	R30,0xB4
    0098 07F1      CPC	R31,R17
    0099 F011      BEQ	0x009C
    009A 9201      ST	R0,Z+
    009B CFFB      RJMP	0x0097
    009C 8300      STD	Z+0,R16
    009D E8EC      LDI	R30,0x8C
    009E E0F0      LDI	R31,0
    009F E0A0      LDI	R26,0
    00A0 E0B1      LDI	R27,1
    00A1 E011      LDI	R17,1
    00A2 31E6      CPI	R30,0x16
    00A3 07F1      CPC	R31,R17
    00A4 F021      BEQ	0x00A9
    00A5 95C8      LPM
    00A6 9631      ADIW	R30,1
    00A7 920D      ST	R0,X+
    00A8 CFF9      RJMP	0x00A2
    00A9 940E02BA  CALL	_main
_exit:
    00AB CFFF      RJMP	_exit
_showbuff:
  i                    --> R20
    00AC 940E0328  CALL	push_gset1
FILE: G:\我的毕设\指令处理程序\uarttest.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) 
(0004) #define CMD		   'O' 
(0005) #define END		   'E'
(0006) #define INVAIL	   0
(0007) #define READY	   'R'
(0008) #define BUSY	   'B'
(0009) 
(0010) 
(0011) #define CONNECT	   'C' 	//连接
(0012) #define WAIT	   'W'  //等待
(0013) #define MOVEX	   'X'	//X移位
(0014) #define MOVEY	   'Y'	//Y移位
(0015) #define	MOVEXY	   'P'	//X-Y移位
(0016) 
(0017) #define  uchar	   unsigned char
(0018) #define  EOS	   'A'
(0019) #define BUFFLEN	   40
(0020) #define CMDLEN	   5
(0021) 
(0022) struct COMMAND{	   	  		//指令结构
(0023) 	   		   uchar cmd;
(0024) 			   uchar dat1;
(0025) 			   uchar dat2;
(0026) 			   };
(0027) 
(0028) uchar buff[BUFFLEN],bcnt=00,bhead=0,bend=0;	  //接受数据缓存 及计数器
(0029) unsigned char ccnt=0;						  //指令队列计数器
(0030) struct COMMAND	cmd_buff[15]={{0,0,0}};	  	  //指令队列
(0031) 
(0032) void Send_Str(uchar * str);
(0033) 
(0034) void showbuff(void){
(0035) 	 				char i;
(0036) 					Send_Str(" [Buff: A");
    00AE E800      LDI	R16,0x80
    00AF E011      LDI	R17,1
    00B0 D1ED      RCALL	_Send_Str
(0037) 					for(i=0;i<BUFFLEN;i++)
    00B1 2744      CLR	R20
    00B2 C019      RJMP	0x00CC
(0038) 							{
(0039) 							if(buff[i]==INVAIL) putchar('-');
    00B3 E88A      LDI	R24,0x8A
    00B4 E091      LDI	R25,1
    00B5 2FE4      MOV	R30,R20
    00B6 27FF      CLR	R31
    00B7 0FE8      ADD	R30,R24
    00B8 1FF9      ADC	R31,R25
    00B9 8020      LDD	R2,Z+0
    00BA 2022      TST	R2
    00BB F429      BNE	0x00C1
    00BC E20D      LDI	R16,0x2D
    00BD E010      LDI	R17,0
    00BE 940E036D  CALL	_putchar
    00C0 C00A      RJMP	0x00CB
(0040) 							else putchar(buff[i]);
    00C1 E88A      LDI	R24,0x8A
    00C2 E091      LDI	R25,1
    00C3 2FE4      MOV	R30,R20
    00C4 27FF      CLR	R31
    00C5 0FE8      ADD	R30,R24
    00C6 1FF9      ADC	R31,R25
    00C7 8100      LDD	R16,Z+0
    00C8 2711      CLR	R17
    00C9 940E036D  CALL	_putchar
    00CB 9543      INC	R20
    00CC 3248      CPI	R20,0x28
    00CD F328      BCS	0x00B3
(0041) 							}
(0042) 					Send_Str(" ] A");
    00CE E70B      LDI	R16,0x7B
    00CF E011      LDI	R17,1
    00D0 D1CD      RCALL	_Send_Str
(0043) 					putchar(' ');
    00D1 E200      LDI	R16,0x20
    00D2 E010      LDI	R17,0
    00D3 940E036D  CALL	_putchar
    00D5 940E032B  CALL	pop_gset1
    00D7 9508      RET
_Cmd_buffPro:
  j                    --> R20
  t                    --> R20
  f                    --> R22
  tbend                --> R10
  i                    --> R12
    00D8 940E0322  CALL	push_gset4
(0044) 					}
(0045) 
(0046) void Cmd_buffPro(void)
(0047) 	 {uchar i,j=0,tbend,t=0,f=0;
    00DA 2744      CLR	R20
    00DB 2766      CLR	R22
(0048) 	  tbend=bcnt;
    00DC 90A00100  LDS	R10,bcnt
(0049) 	  i=bhead;
    00DE 90C00101  LDS	R12,bhead
    00E0 C114      RJMP	0x01F5
(0050) 	  
(0051) 	  while(i!=tbend)
(0052) 	  	{tbend=bcnt;
    00E1 90A00100  LDS	R10,bcnt
(0053) 		if(buff[i]==CMD)
    00E3 E88A      LDI	R24,0x8A
    00E4 E091      LDI	R25,1
    00E5 2DEC      MOV	R30,R12
    00E6 27FF      CLR	R31
    00E7 0FE8      ADD	R30,R24
    00E8 1FF9      ADC	R31,R25
    00E9 8180      LDD	R24,Z+0
    00EA 348F      CPI	R24,0x4F
    00EB F009      BEQ	0x00ED
    00EC C0F6      RJMP	0x01E3
(0054) 			{
(0055) 			f=1;
    00ED E061      LDI	R22,1
(0056) 	
(0057) 			if(bhead<=tbend)
    00EE 90200101  LDS	R2,bhead
    00F0 14A2      CP	R10,R2
    00F1 F0C8      BCS	0x010B
(0058) 				{
(0059) 				if((((i+CMDLEN-1)%BUFFLEN>bhead)&&((i+CMDLEN-1)%BUFFLEN<tbend))) t=1;else t=0;
    00F2 E228      LDI	R18,0x28
    00F3 E030      LDI	R19,0
    00F4 2D0C      MOV	R16,R12
    00F5 2711      CLR	R17
    00F6 5F0B      SUBI	R16,0xFB
    00F7 4F1F      SBCI	R17,0xFF
    00F8 5001      SUBI	R16,1
    00F9 4010      SBCI	R17,0
    00FA 940E02C8  CALL	mod16s
    00FC 90200101  LDS	R2,bhead
    00FE 2433      CLR	R3
    00FF 1620      CP	R2,R16
    0100 0631      CPC	R3,R17
    0101 F43C      BGE	0x0109
    0102 2C2A      MOV	R2,R10
    0103 2433      CLR	R3
    0104 1502      CP	R16,R2
    0105 0513      CPC	R17,R3
    0106 F414      BGE	0x0109
    0107 E041      LDI	R20,1
    0108 C01A      RJMP	0x0123
    0109 2744      CLR	R20
(0060) 				}else {
    010A C018      RJMP	0x0123
(0061) 					  if((((i+CMDLEN-1)%BUFFLEN>bhead)||((i+CMDLEN-1)%BUFFLEN<tbend))) t=1;else t=0;
    010B E228      LDI	R18,0x28
    010C E030      LDI	R19,0
    010D 2D0C      MOV	R16,R12
    010E 2711      CLR	R17
    010F 5F0B      SUBI	R16,0xFB
    0110 4F1F      SBCI	R17,0xFF
    0111 5001      SUBI	R16,1
    0112 4010      SBCI	R17,0
    0113 940E02C8  CALL	mod16s
    0115 90200101  LDS	R2,bhead
    0117 2433      CLR	R3
    0118 1620      CP	R2,R16
    0119 0631      CPC	R3,R17
    011A F02C      BLT	0x0120
    011B 2C2A      MOV	R2,R10
    011C 2433      CLR	R3
    011D 1502      CP	R16,R2
    011E 0513      CPC	R17,R3
    011F F414      BGE	0x0122
    0120 E041      LDI	R20,1
    0121 C001      RJMP	0x0123
    0122 2744      CLR	R20
(0062) 					  }
(0063) 			if(t)
    0123 2344      TST	R20
    0124 F409      BNE	0x0126
    0125 C0CF      RJMP	0x01F5
(0064) 				{
(0065) 				if(buff[(i+CMDLEN-1)%BUFFLEN]==END)
    0126 E228      LDI	R18,0x28
    0127 E030      LDI	R19,0
    0128 2D0C      MOV	R16,R12
    0129 2711      CLR	R17
    012A 5F0B      SUBI	R16,0xFB
    012B 4F1F      SBCI	R17,0xFF
    012C 5001      SUBI	R16,1
    012D 4010      SBCI	R17,0
    012E 940E02C8  CALL	mod16s
    0130 01F8      MOVW	R30,R16
    0131 E88A      LDI	R24,0x8A
    0132 E091      LDI	R25,1
    0133 0FE8      ADD	R30,R24
    0134 1FF9      ADC	R31,R25
    0135 8180      LDD	R24,Z+0
    0136 3485      CPI	R24,0x45
    0137 F009      BEQ	0x0139
    0138 C0A0      RJMP	0x01D9
(0066) 					{
(0067) 					f=0;
    0139 2766      CLR	R22
(0068) 					
(0069) 				 	//Send_Str(" [CMD] A");j++;
(0070) 					//putchar(j+'0');
(0071) 				 
(0072) 				 	ccnt=ccnt+1;buff[i%BUFFLEN]=INVAIL;
    013A 91800103  LDS	R24,ccnt
    013C 5F8F      SUBI	R24,0xFF
    013D 93800103  STS	ccnt,R24
    013F E228      LDI	R18,0x28
    0140 E030      LDI	R19,0
    0141 2D0C      MOV	R16,R12
    0142 2711      CLR	R17
    0143 940E02C8  CALL	mod16s
    0145 01F8      MOVW	R30,R16
    0146 E88A      LDI	R24,0x8A
    0147 E091      LDI	R25,1
    0148 0FE8      ADD	R30,R24
    0149 1FF9      ADC	R31,R25
    014A 2422      CLR	R2
    014B 8220      STD	Z+0,R2
(0073) 				 	cmd_buff[ccnt].cmd =buff[(i+1)%BUFFLEN];buff[(i+1)%BUFFLEN]=INVAIL;
    014C E228      LDI	R18,0x28
    014D E030      LDI	R19,0
    014E 2D0C      MOV	R16,R12
    014F 2711      CLR	R17
    0150 5F0F      SUBI	R16,0xFF
    0151 4F1F      SBCI	R17,0xFF
    0152 940E02C8  CALL	mod16s
    0154 01F8      MOVW	R30,R16
    0155 E88A      LDI	R24,0x8A
    0156 E091      LDI	R25,1
    0157 0FE8      ADD	R30,R24
    0158 1FF9      ADC	R31,R25
    0159 8020      LDD	R2,Z+0
    015A 90300103  LDS	R3,ccnt
    015C E083      LDI	R24,3
    015D 9D83      MUL	R24,R3
    015E 01F0      MOVW	R30,R0
    015F E084      LDI	R24,4
    0160 E091      LDI	R25,1
    0161 0FE8      ADD	R30,R24
    0162 1FF9      ADC	R31,R25
    0163 8220      STD	Z+0,R2
    0164 E228      LDI	R18,0x28
    0165 E030      LDI	R19,0
    0166 2D0C      MOV	R16,R12
    0167 2711      CLR	R17
    0168 5F0F      SUBI	R16,0xFF
    0169 4F1F      SBCI	R17,0xFF
    016A 940E02C8  CALL	mod16s
    016C 01F8      MOVW	R30,R16
    016D E88A      LDI	R24,0x8A
    016E E091      LDI	R25,1
    016F 0FE8      ADD	R30,R24
    0170 1FF9      ADC	R31,R25
    0171 2422      CLR	R2
    0172 8220      STD	Z+0,R2
(0074) 				 	cmd_buff[ccnt].dat1=buff[(i+2)%BUFFLEN];buff[(i+2)%BUFFLEN]=INVAIL;
    0173 E228      LDI	R18,0x28
    0174 E030      LDI	R19,0
    0175 2D0C      MOV	R16,R12
    0176 2711      CLR	R17
    0177 5F0E      SUBI	R16,0xFE
    0178 4F1F      SBCI	R17,0xFF
    0179 940E02C8  CALL	mod16s
    017B 01F8      MOVW	R30,R16
    017C E88A      LDI	R24,0x8A
    017D E091      LDI	R25,1
    017E 0FE8      ADD	R30,R24
    017F 1FF9      ADC	R31,R25
    0180 8020      LDD	R2,Z+0
    0181 90300103  LDS	R3,ccnt
    0183 E083      LDI	R24,3
    0184 9D83      MUL	R24,R3
    0185 01F0      MOVW	R30,R0
    0186 E085      LDI	R24,5
    0187 E091      LDI	R25,1
    0188 0FE8      ADD	R30,R24
    0189 1FF9      ADC	R31,R25
    018A 8220      STD	Z+0,R2
    018B E228      LDI	R18,0x28
    018C E030      LDI	R19,0
    018D 2D0C      MOV	R16,R12
    018E 2711      CLR	R17
    018F 5F0E      SUBI	R16,0xFE
    0190 4F1F      SBCI	R17,0xFF
    0191 940E02C8  CALL	mod16s
    0193 01F8      MOVW	R30,R16
    0194 E88A      LDI	R24,0x8A
    0195 E091      LDI	R25,1
    0196 0FE8      ADD	R30,R24
    0197 1FF9      ADC	R31,R25
    0198 2422      CLR	R2
    0199 8220      STD	Z+0,R2
(0075) 				 	cmd_buff[ccnt].dat2=buff[(i+3)%BUFFLEN];buff[(i+3)%BUFFLEN]=INVAIL;
    019A E228      LDI	R18,0x28
    019B E030      LDI	R19,0
    019C 2D0C      MOV	R16,R12
    019D 2711      CLR	R17
    019E 5F0D      SUBI	R16,0xFD
    019F 4F1F      SBCI	R17,0xFF
    01A0 940E02C8  CALL	mod16s
    01A2 01F8      MOVW	R30,R16
    01A3 E88A      LDI	R24,0x8A
    01A4 E091      LDI	R25,1
    01A5 0FE8      ADD	R30,R24
    01A6 1FF9      ADC	R31,R25
    01A7 8020      LDD	R2,Z+0
    01A8 90300103  LDS	R3,ccnt
    01AA E083      LDI	R24,3
    01AB 9D83      MUL	R24,R3
    01AC 01F0      MOVW	R30,R0
    01AD E086      LDI	R24,6
    01AE E091      LDI	R25,1
    01AF 0FE8      ADD	R30,R24
    01B0 1FF9      ADC	R31,R25
    01B1 8220      STD	Z+0,R2
    01B2 E228      LDI	R18,0x28
    01B3 E030      LDI	R19,0
    01B4 2D0C      MOV	R16,R12
    01B5 2711      CLR	R17
    01B6 5F0D      SUBI	R16,0xFD
    01B7 4F1F      SBCI	R17,0xFF
    01B8 940E02C8  CALL	mod16s
    01BA 01F8      MOVW	R30,R16
    01BB E88A      LDI	R24,0x8A
    01BC E091      LDI	R25,1
    01BD 0FE8      ADD	R30,R24
    01BE 1FF9      ADC	R31,R25
    01BF 2422      CLR	R2
    01C0 8220      STD	Z+0,R2
(0076) 				 	buff[(i+4)%BUFFLEN]=INVAIL;
    01C1 E228      LDI	R18,0x28
    01C2 E030      LDI	R19,0
    01C3 2D0C      MOV	R16,R12
    01C4 2711      CLR	R17
    01C5 5F0C      SUBI	R16,0xFC
    01C6 4F1F      SBCI	R17,0xFF
    01C7 940E02C8  CALL	mod16s
    01C9 01F8      MOVW	R30,R16
    01CA E88A      LDI	R24,0x8A
    01CB E091      LDI	R25,1
    01CC 0FE8      ADD	R30,R24
    01CD 1FF9      ADC	R31,R25
    01CE 2422      CLR	R2
    01CF 8220      STD	Z+0,R2
(0077) 				 
(0078) 				 	bhead=((i+CMDLEN)%(BUFFLEN)); 
    01D0 E218      LDI	R17,0x28
    01D1 2D0C      MOV	R16,R12
    01D2 5F0B      SUBI	R16,0xFB
    01D3 940E0302  CALL	mod8u
    01D5 93000101  STS	bhead,R16
(0079) 				 	i=bhead; 
    01D7 2EC0      MOV	R12,R16
(0080) 					
(0081) 				 	//putchar('[');putchar(i/10+'0');putchar(i%10+'0');putchar(']');
(0082) 				 	//putchar('[');putchar(tbend/10+'0');putchar(tbend%10+'0');putchar(']');
(0083) 					}else {
    01D8 C01C      RJMP	0x01F5
(0084) 						   f=0;buff[i]=INVAIL;
    01D9 2766      CLR	R22
    01DA E88A      LDI	R24,0x8A
    01DB E091      LDI	R25,1
    01DC 2DEC      MOV	R30,R12
    01DD 27FF      CLR	R31
    01DE 0FE8      ADD	R30,R24
    01DF 1FF9      ADC	R31,R25
    01E0 2422      CLR	R2
    01E1 8220      STD	Z+0,R2
(0085) 						  }
(0086) 				}
(0087) 			}else{
    01E2 C012      RJMP	0x01F5
(0088) 				  if(f==0)buff[i]=INVAIL;
    01E3 2366      TST	R22
    01E4 F441      BNE	0x01ED
    01E5 E88A      LDI	R24,0x8A
    01E6 E091      LDI	R25,1
    01E7 2DEC      MOV	R30,R12
    01E8 27FF      CLR	R31
    01E9 0FE8      ADD	R30,R24
    01EA 1FF9      ADC	R31,R25
    01EB 2422      CLR	R2
    01EC 8220      STD	Z+0,R2
(0089) 				  i++;
    01ED 94C3      INC	R12
(0090) 				  i=i%BUFFLEN;bhead=i;
    01EE E218      LDI	R17,0x28
    01EF 2D0C      MOV	R16,R12
    01F0 940E0302  CALL	mod8u
    01F2 2EC0      MOV	R12,R16
    01F3 92C00101  STS	bhead,R12
    01F5 14CA      CP	R12,R10
    01F6 F009      BEQ	0x01F8
    01F7 CEE9      RJMP	0x00E1
    01F8 940E031D  CALL	pop_gset4
    01FA 9508      RET
_Cmd_pro:
  i                    --> R22
    01FB 940E0326  CALL	push_gset2
(0091) 				 }
(0092) 		}
(0093) 	 
(0094) 	 }
(0095) 	 
(0096) void Cmd_pro(void)
(0097) 	 {uchar i;
(0098) 	 
(0099) 	 if(ccnt>0)
    01FD 2422      CLR	R2
    01FE 90300103  LDS	R3,ccnt
    0200 1423      CP	R2,R3
    0201 F008      BCS	0x0203
    0202 C07E      RJMP	0x0281

⌨️ 快捷键说明

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