📄 uarttest.lst
字号:
__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 + -