📄 serial.lis
字号:
00E2 ; if (*com_status.send_cur_ptr==0 || com_status.send_cur_ptr==send_buf+SEND_BUFLEN){
00E2 2080 ldd R2,z+0
00E4 2220 tst R2
00E6 29F0 breq L30
00E8 X5:
00E8 80E0 ldi R24,<_send_buf+50
00EA 90E0 ldi R25,>_send_buf+50
00EC E817 cp R30,R24
00EE F907 cpc R31,R25
00F0 21F4 brne L25
00F2 X6:
00F2 L30:
00F2 .dbline 54
00F2 .dbline 55
00F2 ; UCSRB&=~0x20;
00F2 5598 cbi 0xa,5
00F4 .dbline 56
00F4 ; com_status.sending=0;
00F4 2224 clr R2
00F6 20926C00 sts _com_status+8,R2
00FA .dbline 57
00FA ; }
00FA L25:
00FA .dbline -2
00FA L23:
00FA .dbline 0 ; func end
00FA 2990 ld R2,y+
00FC 2FBE out 0x3f,R2
00FE F991 ld R31,y+
0100 E991 ld R30,y+
0102 9991 ld R25,y+
0104 8991 ld R24,y+
0106 2990 ld R2,y+
0108 1895 reti
010A .dbend
010A .dbfunc e serial_send _serial_send fV
010A ; buf -> R10,R11
.even
010A _serial_send::
010A AA92 st -y,R10
010C BA92 st -y,R11
010E 5801 movw R10,R16
0110 .dbline -1
0110 .dbline 60
0110 ; }
0110 ; void serial_send(char *buf)
0110 ; {
0110 .dbline 61
0110 ; if (*buf==0) return;
0110 F501 movw R30,R10
0112 2080 ldd R2,z+0
0114 2220 tst R2
0116 09F4 brne L36
0118 X7:
0118 .dbline 61
0118 12C0 rjmp L32
011A L35:
011A .dbline 62
011A ; while (com_status.sending);
011A L36:
011A .dbline 62
011A 20906C00 lds R2,_com_status+8
011E 2220 tst R2
0120 E1F7 brne L35
0122 X8:
0122 .dbline 63
0122 ; strcpy(send_buf,buf);
0122 9501 movw R18,R10
0124 00E0 ldi R16,<_send_buf
0126 10E0 ldi R17,>_send_buf
0128 00D0 rcall _strcpy
012A .dbline 64
012A ; com_status.send_cur_ptr=send_buf;
012A 80E0 ldi R24,<_send_buf
012C 90E0 ldi R25,>_send_buf
012E 90936B00 sts _com_status+6+1,R25
0132 80936A00 sts _com_status+6,R24
0136 .dbline 65
0136 ; com_status.sending=-1;
0136 8FEF ldi R24,255
0138 80936C00 sts _com_status+8,R24
013C .dbline 66
013C ; UCSRB|=0x20;
013C 559A sbi 0xa,5
013E .dbline -2
013E L32:
013E .dbline 0 ; func end
013E B990 ld R11,y+
0140 A990 ld R10,y+
0142 0895 ret
0144 .dbsym r buf 10 pc
0144 .dbend
0144 .dbfunc e serial_recv _serial_recv fi
0144 ; len -> R20,R21
0144 ; buflen -> R18,R19
0144 ; buf -> R16,R17
.even
0144 _serial_recv::
0144 4A93 st -y,R20
0146 5A93 st -y,R21
0148 .dbline -1
0148 .dbline 69
0148 ; }
0148 ; unsigned int serial_recv(char *buf,unsigned int buflen)
0148 ; {
0148 .dbline 70
0148 ; unsigned int len=0;
0148 4427 clr R20
014A 5527 clr R21
014C .dbline 71
014C ; if (com_status.read_start_ptr==com_status.read_end_ptr) return 0;
014C 20906600 lds R2,_com_status+2
0150 30906700 lds R3,_com_status+2+1
0154 40906400 lds R4,_com_status
0158 50906500 lds R5,_com_status+1
015C 4214 cp R4,R2
015E 5304 cpc R5,R3
0160 01F5 brne L46
0162 X9:
0162 .dbline 71
0162 0027 clr R16
0164 1127 clr R17
0166 36C0 rjmp L41
0168 L45:
0168 .dbline 72
0168 ; while(com_status.read_start_ptr!=com_status.read_end_ptr && len<buflen-1){
0168 .dbline 73
0168 ; *buf++=*com_status.read_start_ptr++;
0168 E0916400 lds R30,_com_status
016C F0916500 lds R31,_com_status+1
0170 D801 movw R26,R16
0172 0190 ld R0,Z+
0174 F0936500 sts _com_status+1,R31
0178 E0936400 sts _com_status,R30
017C 0D92 st X+,R0
017E 8D01 movw R16,R26
0180 .dbline 74
0180 ; len++;
0180 4F5F subi R20,255 ; offset = 1
0182 5F4F sbci R21,255
0184 .dbline 75
0184 ; if (com_status.read_start_ptr==recv_buf+RECV_BUFLEN)
0184 80E0 ldi R24,<_recv_buf+50
0186 90E0 ldi R25,>_recv_buf+50
0188 20906400 lds R2,_com_status
018C 30906500 lds R3,_com_status+1
0190 2816 cp R2,R24
0192 3906 cpc R3,R25
0194 31F4 brne L49
0196 X10:
0196 .dbline 76
0196 ; com_status.read_start_ptr=recv_buf;
0196 80E0 ldi R24,<_recv_buf
0198 90E0 ldi R25,>_recv_buf
019A 90936500 sts _com_status+1,R25
019E 80936400 sts _com_status,R24
01A2 L49:
01A2 .dbline 77
01A2 ; }
01A2 L46:
01A2 .dbline 72
01A2 20906600 lds R2,_com_status+2
01A6 30906700 lds R3,_com_status+2+1
01AA 40906400 lds R4,_com_status
01AE 50906500 lds R5,_com_status+1
01B2 4214 cp R4,R2
01B4 5304 cpc R5,R3
01B6 29F0 breq L52
01B8 X11:
01B8 C901 movw R24,R18
01BA 0197 sbiw R24,1
01BC 4817 cp R20,R24
01BE 5907 cpc R21,R25
01C0 98F2 brlo L45
01C2 X12:
01C2 L52:
01C2 .dbline 78
01C2 ; *(--buf)=0;
01C2 C801 movw R24,R16
01C4 0197 sbiw R24,1
01C6 2224 clr R2
01C8 FC01 movw R30,R24
01CA 2082 std z+0,R2
01CC .dbline 79
01CC ; return --len;
01CC CA01 movw R24,R20
01CE 0197 sbiw R24,1
01D0 AC01 movw R20,R24
01D2 8C01 movw R16,R24
01D4 .dbline -2
01D4 L41:
01D4 .dbline 0 ; func end
01D4 5991 ld R21,y+
01D6 4991 ld R20,y+
01D8 0895 ret
01DA .dbsym r len 20 i
01DA .dbsym r buflen 18 i
01DA .dbsym r buf 16 pc
01DA .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\Shuaihu\AVR\8880\serial.c
0000 _send_buf::
0000 .blkb 50
0032 .dbsym e send_buf _send_buf A[50:50]c
0032 _recv_buf::
0032 .blkb 50
0064 .dbsym e recv_buf _recv_buf A[50:50]c
0064 _com_status::
0064 .blkb 9
006D .dbstruct 0 9 tagSERIAL_PORT_STATUS
006D .dbfield 0 read_start_ptr pc
006D .dbfield 2 read_end_ptr pc
006D .dbfield 4 recv_cur_ptr pc
006D .dbfield 6 send_cur_ptr pc
006D .dbfield 8 sending c
006D .dbend
006D .dbsym e com_status _com_status S[tagSERIAL_PORT_STATUS]
006D ; }
006D ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -