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

📄 soc_test.lis

📁 atmega128串口通信
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 015E                   .dbline 195
 015E           ;                       else
 015E           ;                       {
 015E                   .dbline 196
 015E           ;                               haveError=0x02;                 //haveError索引(2),开始字出错
 015E 82E0              ldi R24,2
 0160 80930700          sts _haveError,R24
 0164                   .dbline 197
 0164           ;                       }
 0164                   .dbline 198
 0164           ;               }
 0164 6BC0              xjmp L29
 0166           L32:
 0166                   .dbline 199
 0166           ;               else if(1==buf_index && BEGIN_WORD==beginWord)
 0166 80910500          lds R24,_buf_index
 016A 8130              cpi R24,1
 016C C1F4              brne L36
 016E 80910A00          lds R24,_beginWord
 0172 8E37              cpi R24,126
 0174 A1F4              brne L36
 0176                   .dbline 200
 0176           ;               {       //索引为1,且已经起始
 0176                   .dbline 201
 0176           ;                       if(BEGIN_WORD==buffer[1])       //若第二个数据也是起始字,删除一个
 0176 80912000          lds R24,_buffer+1
 017A 8E37              cpi R24,126
 017C 39F4              brne L38
 017E                   .dbline 202
 017E           ;                       {
 017E                   .dbline 203
 017E           ;                               buf_index=0;            //索引变为0
 017E 2224              clr R2
 0180 20920500          sts _buf_index,R2
 0184                   .dbline 204
 0184           ;                               buffer[1]=0x01; //清除第二个接收到的起始字
 0184 81E0              ldi R24,1
 0186 80932000          sts _buffer+1,R24
 018A                   .dbline 205
 018A           ;                       }
 018A 58C0              xjmp L29
 018C           L38:
 018C                   .dbline 207
 018C           ;                       //判断所收命令是否归本片AVR处理
 018C           ;                       else if(ADDRESS_WORD!=buffer[1]) 
 018C 80912000          lds R24,_buffer+1
 0190 8F35              cpi R24,95
 0192 09F4              brne X1
 0194 53C0              xjmp L29
 0196           X1:
 0196                   .dbline 208
 0196           ;                       {
 0196                   .dbline 209
 0196           ;                               haveError=0x03;   //haveError索引(3),地址不对,重新接收
 0196 83E0              ldi R24,3
 0198 80930700          sts _haveError,R24
 019C                   .dbline 210
 019C           ;                       }
 019C                   .dbline 211
 019C           ;               }
 019C 4FC0              xjmp L29
 019E           L36:
 019E                   .dbline 212
 019E           ;               else if(haveSpeWord)    //这里用else,是因为第一个字,第二个字都不可能是转义字符
 019E 20900600          lds R2,_haveSpeWord
 01A2 2220              tst R2
 01A4 09F4              brne X2
 01A6 39C0              xjmp L45
 01A8           X2:
 01A8                   .dbline 213
 01A8           ;               {//含有转义字符,做转义操作,若数据错误,则设置错误标志,重新接收
 01A8                   .dbline 214
 01A8           ;                       haveSpeWord=0x00;                       //清除标志
 01A8 2224              clr R2
 01AA 20920600          sts _haveSpeWord,R2
 01AE                   .dbline 215
 01AE           ;                       if(CHANGE_WORDL1==buffer[buf_index])
 01AE 80E0              ldi R24,<_buffer
 01B0 90E0              ldi R25,>_buffer
 01B2 E0910500          lds R30,_buf_index
 01B6 FF27              clr R31
 01B8 E80F              add R30,R24
 01BA F91F              adc R31,R25
 01BC 8081              ldd R24,z+0
 01BE 8E35              cpi R24,94
 01C0 79F4              brne L47
 01C2                   .dbline 216
 01C2           ;                       {
 01C2                   .dbline 217
 01C2           ;                               buffer[buf_index-1]=0x7E;       //若是7D 5E -> 7E
 01C2 80E0              ldi R24,<_buffer-1
 01C4 90E0              ldi R25,>_buffer-1
 01C6 E0910500          lds R30,_buf_index
 01CA FF27              clr R31
 01CC E80F              add R30,R24
 01CE F91F              adc R31,R25
 01D0 8EE7              ldi R24,126
 01D2 8083              std z+0,R24
 01D4                   .dbline 218
 01D4           ;                               buf_index-=1;                   //buf_index减一
 01D4 80910500          lds R24,_buf_index
 01D8 8150              subi R24,1
 01DA 80930500          sts _buf_index,R24
 01DE                   .dbline 219
 01DE           ;                       }
 01DE 2EC0              xjmp L29
 01E0           L47:
 01E0                   .dbline 220
 01E0           ;                       else if(CHANGE_WORDL2==buffer[buf_index])
 01E0 80E0              ldi R24,<_buffer
 01E2 90E0              ldi R25,>_buffer
 01E4 E0910500          lds R30,_buf_index
 01E8 FF27              clr R31
 01EA E80F              add R30,R24
 01EC F91F              adc R31,R25
 01EE 8081              ldd R24,z+0
 01F0 8D35              cpi R24,93
 01F2 79F4              brne L50
 01F4                   .dbline 221
 01F4           ;                       {
 01F4                   .dbline 222
 01F4           ;                               buffer[buf_index-1]=0x7D;       //若是7D 5D -> 7D
 01F4 80E0              ldi R24,<_buffer-1
 01F6 90E0              ldi R25,>_buffer-1
 01F8 E0910500          lds R30,_buf_index
 01FC FF27              clr R31
 01FE E80F              add R30,R24
 0200 F91F              adc R31,R25
 0202 8DE7              ldi R24,125
 0204 8083              std z+0,R24
 0206                   .dbline 223
 0206           ;                               buf_index-=1;                   //buf_index减一
 0206 80910500          lds R24,_buf_index
 020A 8150              subi R24,1
 020C 80930500          sts _buf_index,R24
 0210                   .dbline 224
 0210           ;                       }
 0210 15C0              xjmp L29
 0212           L50:
 0212                   .dbline 226
 0212           ;                       else
 0212           ;                       {
 0212                   .dbline 227
 0212           ;                               haveError=0x04;         //haveError索引(4),转义字符出错
 0212 84E0              ldi R24,4
 0214 80930700          sts _haveError,R24
 0218                   .dbline 228
 0218           ;                       }
 0218                   .dbline 229
 0218           ;               }
 0218 11C0              xjmp L29
 021A           L45:
 021A                   .dbline 230
 021A           ;               else if(0x7D==buffer[buf_index])
 021A 80E0              ldi R24,<_buffer
 021C 90E0              ldi R25,>_buffer
 021E E0910500          lds R30,_buf_index
 0222 FF27              clr R31
 0224 E80F              add R30,R24
 0226 F91F              adc R31,R25
 0228 8081              ldd R24,z+0
 022A 8D37              cpi R24,125
 022C 39F4              brne L29
 022E                   .dbline 231
 022E           ;               {
 022E                   .dbline 232
 022E           ;                       haveSpeWord=0x01;                       //接收到转义字符
 022E 81E0              ldi R24,1
 0230 80930600          sts _haveSpeWord,R24
 0234                   .dbline 233
 0234           ;               } 
 0234                   .dbline 234
 0234           ;       }
 0234 03C0              xjmp L29
 0236           L28:
 0236                   .dbline 236
 0236           ;       else
 0236           ;       {
 0236                   .dbline 237
 0236           ;               haveError=0x01;         //haveError索引(1),超出了接收长度
 0236 81E0              ldi R24,1
 0238 80930700          sts _haveError,R24
 023C                   .dbline 238
 023C           ;       }
 023C           L29:
 023C                   .dbline 240
 023C           ;       //跳出时做错误判断
 023C           ;       if(haveError!=0)                                //如果发现有错误
 023C 20900700          lds R2,_haveError
 0240 2220              tst R2
 0242 71F0              breq L55
 0244                   .dbline 241
 0244           ;       {       //如果有错误,重新接收
 0244                   .dbline 242
 0244           ;               buffer[0]=0x00;                 //第一个字符清零
 0244 2224              clr R2
 0246 20921F00          sts _buffer,R2
 024A                   .dbline 243
 024A           ;               buf_index=0;                            //buffer索引清零,继续接收
 024A 20920500          sts _buf_index,R2
 024E                   .dbline 244
 024E           ;               beginWord=0x00;                 //为开始做准备
 024E 20920A00          sts _beginWord,R2
 0252                   .dbline 245
 0252           ;               endWord=0x00;                           //结束字还没收到
 0252 20920900          sts _endWord,R2
 0256                   .dbline 246
 0256           ;               haveSpeWord=0;                          //清接收转义字符标志
 0256 20920600          sts _haveSpeWord,R2
 025A                   .dbline 247
 025A           ;               haveError=0;                            //清错误标志
 025A 20920700          sts _haveError,R2
 025E                   .dbline 248
 025E           ;       }
 025E 05C0              xjmp L56
 0260           L55:
 0260                   .dbline 250
 0260                   .dbline 251
 0260 80910500          lds R24,_buf_index
 0264 8F5F              subi R24,255    ; addi 1
 0266 80930500          sts _buf_index,R24
 026A                   .dbline 252
 026A           L56:
 026A                   .dbline -2
 026A                   .dbline 253
 026A           ;       else
 026A           ;       {                                                                               //若没有错误
 026A           ;               buf_index+=1;                                   //buffer索引加1
 026A           ;       }
 026A           ; }//end usart0_receive
 026A           L27:
 026A 2990              ld R2,y+
 026C 2FBE              out 0x3f,R2
 026E F991              ld R31,y+
 0270 E991              ld R30,y+
 0272 9991              ld R25,y+
 0274 8991              ld R24,y+
 0276 0991              ld R16,y+
 0278 2990              ld R2,y+
 027A                   .dbline 0 ; func end
 027A 1895              reti
 027C                   .dbsym r revChar 16 c
 027C                   .dbend
 027C                   .dbfunc e Write_bus_data _Write_bus_data fV
 027C           ;     bus_data_H -> R20
 027C           ;     bus_data_L -> R22
 027C           ;       bus_data -> R22,R23
                        .even
 027C           _Write_bus_data::
 027C 0E940000          xcall push_gset2
 0280 B801              movw R22,R16
 0282                   .dbline -1
 0282                   .dbline 259
 0282           ; 
 0282           ; /*********************************************************
 0282           ; 向命令总线写命令数据
 0282           ; *********************************************************/
 0282           ; void  Write_bus_data(short bus_data)
 0282           ; {unsigned char bus_data_L;
 0282                   .dbline 261
 0282           ;  unsigned char bus_data_H;
 0282           ;  bus_data_H = bus_data/256;
 0282 20E0              ldi R18,256
 0284 31E0              ldi R19,1
 0286 8B01              movw R16,R22
 0288 0E940000          xcall div16s
 028C 402F              mov R20,R16
 028E                   .dbline 262
 028E           ;  bus_data_L = bus_data%256;
 028E 20E0              ldi R18,256
 0290 31E0              ldi R19,1
 0292 8B01              movw R16,R22
 0294 0E940000          xcall mod16s
 0298 602F              mov R22,R16
 029A                   .dbline 263
 029A           ;  INSTRUCT_BYTE_LOW = bus_data_L;
 029A 6093FF11          sts 4607,R22
 029E                   .dbline 264
 029E           ;  INSTRUCT_BYTE_HIG = bus_data_H;
 029E 4093FF12          sts 4863,R20
 02A2                   .dbline -2
 02A2                   .dbline 265
 02A2           ; }//end Write_bus_data
 02A2           L57:
 02A2 0E940000          xcall pop_gset2
 02A6                   .dbline 0 ; func end
 02A6 0895              ret
 02A8                   .dbsym r bus_data_H 20 c
 02A8                   .dbsym r bus_data_L 22 c
 02A8                   .dbsym r bus_data 22 S
 02A8                   .dbend
 02A8                   .dbfunc e Write_bus_add _Write_bus_add fV
 02A8           ;        bus_add -> R16
                        .even
 02A8           _Write_bus_add::
 02A8                   .dbline -1
 02A8                   .dbline 271
 02A8           ; /*********************************************************
 02A8           ; 向命令总线写命令地址
 02A8           ; *********************************************************/
 02A8           ;     
 02A8           ; void  Write_bus_add(unsigned char bus_add)
 02A8           ; {INSTRUCT_ADD = bus_add;
 02A8                   .dbline 271
 02A8 0093FF13          sts 5119,R16
 02AC                   .dbline -2
 02AC                   .dbline 272
 02AC           ; }//end Write_bus_add
 02AC           L58:
 02AC                   .dbline 0 ; func end
 02AC 0895              ret
 02AE                   .dbsym r bus_add 16 c
 02AE                   .dbend
 02AE                   .dbfunc e send_instruct _send_instruct fV
 02AE           ;        address -> R20
 02AE           ;        command -> R22,R23

⌨️ 快捷键说明

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