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

📄 sio.lis

📁 ATMEGA128的PCF8536驱动程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -