📄 sio.lis
字号:
00D2 .dbline 134
00D2 L21:
00D2 .dbline 134
00D2 ; while(Com_putchar(*p,RTbuf)==0);//WDR(); //喂狗;
00D2 9B01 movw R18,R22
00D4 FA01 movw R30,R20
00D6 0081 ldd R16,z+0
00D8 D4DF xcall _Com_putchar
00DA 0023 tst R16
00DC D1F3 breq L20
00DE .dbline 135
00DE L18:
00DE .dbline 135
00DE FA01 movw R30,R20
00E0 8191 ld R24,Z+
00E2 AF01 movw R20,R30
00E4 8A30 cpi R24,10
00E6 A9F7 brne L21
00E8 .dbline 136
00E8 L9:
00E8 .dbline -2
00E8 L7:
00E8 0E940000 xcall pop_gset4
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbsym r i 12 c
00EE .dbsym r RTbuf 22 pS[.1]
00EE .dbsym r len 10 c
00EE .dbsym r p 20 pc
00EE .dbend
00EE .dbfunc e Com_getchar _Com_getchar fc
00EE ; RTbuf -> R20,R21
00EE ; mode -> R22
.even
00EE _Com_getchar::
00EE 0E940000 xcall push_gset2
00F2 A901 movw R20,R18
00F4 602F mov R22,R16
00F6 .dbline -1
00F6 .dbline 151
00F6 ; }while(*p++!='\n');
00F6 ; }
00F6 ;
00F6 ; }
00F6 ; /*********************************************************************************************************
00F6 ; ** 函数名称: Com_getchar
00F6 ; ** 功能描述: 从串行口输入一个字符
00F6 ; ** 输 入: mode:0不需等待,在调用函数前检测Com_R_count的值
00F6 ; ** 1 等待数据到来
00F6 ; ** 输出 : 读入的字符
00F6 ; ** 全局变量: 无
00F6 ; ** 调用模块:
00F6 ; ** 说明:
00F6 ; ** 注意:
00F6 ; ********************************************************************************************************/
00F6 ;
00F6 ; unsigned char Com_getchar (unsigned char mode,siocirqueue *RTbuf) {
00F6 L24:
00F6 .dbline 159
00F6 L25:
00F6 .dbline 159
00F6 ; //WDR(); //喂狗
00F6 ; // Delay(Delay_Comget,MaxLimit_Comget_Delay);
00F6 ; // if (mode>0) while(Com_R_count(RTbuf)==0 && !DelayOvf(Delay_Comget))//WDR(); //喂狗;
00F6 ; // if (DelayOvf(Delay_Comget))
00F6 ; // return 0; //时间超时
00F6 ; // else
00F6 ;
00F6 ; while(!Com_R_count(RTbuf));
00F6 8A01 movw R16,R20
00F8 35D0 xcall _Com_R_count
00FA 0023 tst R16
00FC E1F3 breq L24
00FE .dbline 160
00FE ; return (Rbuf_getchar(RTbuf));// 串行口输入正确,返回输入的字符
00FE 8A01 movw R16,R20
0100 A9D0 xcall _Rbuf_getchar
0102 .dbline -2
0102 L23:
0102 0E940000 xcall pop_gset2
0106 .dbline 0 ; func end
0106 0895 ret
0108 .dbsym r RTbuf 20 pS[.1]
0108 .dbsym r mode 22 c
0108 .dbend
0108 .dbfunc e Com_Rbuf_Clear _Com_Rbuf_Clear fV
0108 ; RTbuf -> R20,R21
.even
0108 _Com_Rbuf_Clear::
0108 0E940000 xcall push_gset1
010C A801 movw R20,R16
010E .dbline -1
010E .dbline 165
010E ; }
010E ;
010E ;
010E ;
010E ; void Com_Rbuf_Clear(siocirqueue *RTbuf){
010E .dbline 166
010E ; Rbuf_init(RTbuf);
010E 8A01 movw R16,R20
0110 2CD0 xcall _Rbuf_init
0112 .dbline -2
0112 L27:
0112 0E940000 xcall pop_gset1
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbsym r RTbuf 20 pS[.1]
0118 .dbend
0118 .dbfunc e Com_getstring _Com_getstring fc
0118 ; i -> R20
0118 ; RTbuf -> R22,R23
0118 ; len -> R12
0118 ; p -> R10,R11
.even
0118 _Com_getstring::
0118 0E940000 xcall push_gset4
011C C22E mov R12,R18
011E 5801 movw R10,R16
0120 6885 ldd R22,y+8
0122 7985 ldd R23,y+9
0124 .dbline -1
0124 .dbline 171
0124 ; }
0124 ;
0124 ;
0124 ;
0124 ; unsigned char Com_getstring (unsigned char *p,unsigned char len,siocirqueue *RTbuf) {
0124 .dbline 172
0124 ; unsigned char i=0;
0124 4427 clr R20
0126 .dbline 174
0126 ; //WDR(); //喂狗
0126 ; if (len>0 ){
0126 2224 clr R2
0128 2C14 cp R2,R12
012A 60F4 brsh L29
012C .dbline 174
012C .dbline 175
012C 07C0 xjmp L34
012E L31:
012E .dbline 175
012E .dbline 177
012E 9B01 movw R18,R22
0130 01E0 ldi R16,1
0132 DDDF xcall _Com_getchar
0134 F501 movw R30,R10
0136 0193 st Z+,R16
0138 5F01 movw R10,R30
013A .dbline 178
013A L32:
013A .dbline 175
013A 4395 inc R20
013C L34:
013C .dbline 175
013C ; for(i=0;i<len;i++){
013C 4C15 cp R20,R12
013E B8F3 brlo L31
0140 .dbline 179
0140 ; //WDR(); //喂狗
0140 ; *p++=Com_getchar(1,RTbuf);
0140 ; }
0140 ; return(len);
0140 0C2D mov R16,R12
0142 0DC0 xjmp L28
0144 L29:
0144 .dbline 181
0144 ; }
0144 ; else{
0144 L35:
0144 .dbline 184
0144 ;
0144 ;
0144 ; do{
0144 .dbline 185
0144 ; *p++=Com_getchar(1,RTbuf);
0144 9B01 movw R18,R22
0146 01E0 ldi R16,1
0148 D2DF xcall _Com_getchar
014A F501 movw R30,R10
014C 0193 st Z+,R16
014E 5F01 movw R10,R30
0150 .dbline 186
0150 ; i++;
0150 4395 inc R20
0152 .dbline 188
0152 L36:
0152 .dbline 188
0152 ; //WDR(); //喂狗
0152 ; }while(*(p-1)!='\n');
0152 F501 movw R30,R10
0154 3197 sbiw R30,1
0156 8081 ldd R24,z+0
0158 8A30 cpi R24,10
015A A1F7 brne L35
015C .dbline 191
015C ; // *p++=Com_getchar(1,RTbuf);
015C ; // *(p)=0;
015C ; return(i);
015C 042F mov R16,R20
015E .dbline -2
015E L28:
015E 0E940000 xcall pop_gset4
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r i 20 c
0164 .dbsym r RTbuf 22 pS[.1]
0164 .dbsym r len 12 c
0164 .dbsym r p 10 pc
0164 .dbend
0164 .dbfunc e Com_R_count _Com_R_count fc
0164 ; RTbuf -> R16,R17
.even
0164 _Com_R_count::
0164 .dbline -1
0164 .dbline 207
0164 ; }
0164 ;
0164 ; }
0164 ;
0164 ;
0164 ; /*********************************************************************************************************
0164 ; ** 函数名称: Com_R_count
0164 ; ** 功能描述: 返回接收缓冲区字符个数函数
0164 ; ** 输 入:
0164 ; ** 输出 : 字符个数
0164 ; ** 全局变量: 无
0164 ; ** 调用模块:
0164 ; ** 说明:
0164 ; ** 注意:
0164 ; ********************************************************************************************************/
0164 ; unsigned char Com_R_count(siocirqueue *RTbuf){
0164 .dbline 208
0164 ; return RTbuf->R_count;
0164 F801 movw R30,R16
0166 0281 ldd R16,z+2
0168 .dbline -2
0168 L38:
0168 .dbline 0 ; func end
0168 0895 ret
016A .dbsym r RTbuf 16 pS[.1]
016A .dbend
016A .dbfunc e Rbuf_init _Rbuf_init fV
016A ; RTbuf -> R16,R17
.even
016A _Rbuf_init::
016A .dbline -1
016A .dbline 220
016A ; }
016A ; /*********************************************************************************************************
016A ; ** 函数名称: Rbuf_init
016A ; ** 功能描述: 接收缓冲区初始化
016A ; ** 输 入:
016A ; ** 输出 :
016A ; ** 全局变量: 无
016A ; ** 调用模块:
016A ; ** 说明:
016A ; ** 注意:
016A ; ********************************************************************************************************/
016A ; void Rbuf_init(siocirqueue *RTbuf){
016A .dbline 221
016A ; RTbuf->R_front=0;
016A 2224 clr R2
016C F801 movw R30,R16
016E 2082 std z+0,R2
0170 .dbline 222
0170 ; RTbuf->R_rear=0;
0170 2182 std z+1,R2
0172 .dbline 223
0172 ; RTbuf->R_count=0;
0172 F801 movw R30,R16
0174 2282 std z+2,R2
0176 .dbline 224
0176 ; RTbuf->R_overflow=0;
0176 F801 movw R30,R16
0178 2382 std z+3,R2
017A .dbline -2
017A L39:
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r RTbuf 16 pS[.1]
017C .dbend
017C .dbfunc e Tbuf_init _Tbuf_init fV
017C ; RTbuf -> R16,R17
.even
017C _Tbuf_init::
017C .dbline -1
017C .dbline 236
017C ; }
017C ; /*********************************************************************************************************
017C ; ** 函数名称: Tbuf_init
017C ; ** 功能描述: 发送缓冲区初始化
017C ; ** 输 入:
017C ; ** 输出 :
017C ; ** 全局变量: 无
017C ; ** 调用模块:
017C ; ** 说明:
017C ; ** 注意:
017C ; ********************************************************************************************************/
017C ; void Tbuf_init(siocirqueue *RTbuf){
017C .dbline 237
017C ; RTbuf->T_front=0;
017C 2224 clr R2
017E F801 movw R30,R16
0180 E859 subi R30,152 ; addi 104
0182 FF4F sbci R31,255
0184 2082 std z+0,R2
0186 .dbline 238
0186 ; RTbuf->T_rear=0;
0186 F801 movw R30,R16
0188 E759 subi R30,151 ; addi 105
018A FF4F sbci R31,255
018C 2082 std z+0,R2
018E .dbline 239
018E ; RTbuf->T_count=0;
018E F801 movw R30,R16
0190 E659 subi R30,150 ; addi 106
0192 FF4F sbci R31,255
0194 2082 std z+0,R2
0196 .dbline 240
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -