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

📄 m8pwm.lis

📁 电动车控制器
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 032A 10F4              brsh L41
 032C                   .dbline 257
 032C 0FEF              ldi R16,255
 032E 10E0              ldi R17,0
 0330           L41:
 0330                   .dbline 258
 0330           ;       if( UartBuf[1]>tmp1 )
 0330 20900100          lds R2,_UartBuf+1
 0334 3324              clr R3
 0336 0215              cp R16,R2
 0338 1305              cpc R17,R3
 033A 20F4              brsh L43
 033C                   .dbline 259
 033C           ;       {
 033C                   .dbline 260
 033C           ;           OCR2 = (tmp1&0x00ff);//速度控制信息
 033C C801              movw R24,R16
 033E 9070              andi R25,0
 0340 83BD              out 0x23,R24
 0342                   .dbline 261
 0342           ;       }       
 0342 03C0              rjmp L44
 0344           L43:
 0344                   .dbline 262
 0344 20900100          lds R2,_UartBuf+1
 0348 23BC              out 0x23,R2
 034A           L44:
 034A                   .dbline -2
 034A           L40:
 034A                   .dbline 0 ; func end
 034A 0895              ret
 034C                   .dbsym l tmp2 1 i
 034C                   .dbsym r tmp1 16 i
 034C                   .dbend
 034C                   .dbfunc e EepromRead _EepromRead fc
 034C           ;    eeprom_flag -> R10
 034C           ;    eeprom_data -> R20
 034C           ;    eeprom_temp -> y+0
 034C           ;              k -> R20
 034C           ;        Address -> R22
                        .even
 034C           _EepromRead::
 034C 00D0              rcall push_gset4
 034E 602F              mov R22,R16
 0350 2397              sbiw R28,3
 0352                   .dbline -1
 0352                   .dbline 267
 0352           ;       else OCR2 = UartBuf[1];
 0352           ;       //OCR2 = UartBuf[1];
 0352           ; }
 0352           ; /*EEPROM读*/
 0352           ; uchar EepromRead(uchar Address)  
 0352           ; {     
 0352                   .dbline 269
 0352           ;       uchar eeprom_temp[3];
 0352           ;       uchar eeprom_data,k,eeprom_flag=0;
 0352 AA24              clr R10
 0354                   .dbline 270
 0354           ;       for(k=0;k<3;k++)
 0354 4427              clr R20
 0356 13C0              rjmp L51
 0358           X0:
 0358                   .dbline 271
 0358           ;       {
 0358           L52:
 0358                   .dbline 272
 0358           L53:
 0358                   .dbline 272
 0358 E199              sbic 0x1c,1
 035A FECF              rjmp L52
 035C                   .dbline 273
 035C 8AEA              ldi R24,170
 035E 849F              mul R24,R20
 0360 262E              mov R2,R22
 0362 3324              clr R3
 0364 200C              add R2,R0
 0366 311C              adc R3,R1
 0368 3FBA              out 0x1f,R3
 036A 2EBA              out 0x1e,R2
 036C                   .dbline 274
 036C E09A              sbi 0x1c,0
 036E                   .dbline 275
 036E CE01              movw R24,R28
 0370 E42F              mov R30,R20
 0372 FF27              clr R31
 0374 E80F              add R30,R24
 0376 F91F              adc R31,R25
 0378 2DB2              in R2,0x1d
 037A 2082              std z+0,R2
 037C                   .dbline 276
 037C           L49:
 037C                   .dbline 270
 037C 4395              inc R20
 037E           L51:
 037E                   .dbline 270
 037E 4330              cpi R20,3
 0380 58F3              brlo L53
 0382                   .dbline 278
 0382           ;           while(EECR & (1<<EEWE));  
 0382           ;               EEAR = Address+k*EEP_RANG;       //一次读出三个单元的内容然后判断,
 0382           ;               EECR |= (1<<EERE);  
 0382           ;               eeprom_temp[k]=EEDR;
 0382           ;       }
 0382           ;       /*判断读取的数据是否正确*/
 0382           ;       if( (eeprom_temp[0]==eeprom_temp[1]) & (eeprom_temp[1]==eeprom_temp[2]) )
 0382 2980              ldd R2,y+1
 0384 3880              ldd R3,y+0
 0386 3214              cp R3,R2
 0388 21F4              brne L60
 038A 81E0              ldi R24,1
 038C 90E0              ldi R25,0
 038E 6C01              movw R12,R24
 0390 02C0              rjmp L61
 0392           L60:
 0392 CC24              clr R12
 0394 DD24              clr R13
 0396           L61:
 0396 2A80              ldd R2,y+2
 0398 3980              ldd R3,y+1
 039A 3214              cp R3,R2
 039C 19F4              brne L62
 039E 41E0              ldi R20,1
 03A0 50E0              ldi R21,0
 03A2 02C0              rjmp L63
 03A4           L62:
 03A4 4427              clr R20
 03A6 5527              clr R21
 03A8           L63:
 03A8 1601              movw R2,R12
 03AA 2422              and R2,R20
 03AC 3522              and R3,R21
 03AE 2220              tst R2
 03B0 11F4              brne X1
 03B2 3320              tst R3
 03B4 11F0              breq L55
 03B6           X1:
 03B6                   .dbline 279
 03B6           ;               eeprom_data=EEDR;
 03B6 4DB3              in R20,0x1d
 03B8 1BC0              rjmp L56
 03BA           L55:
 03BA                   .dbline 281
 03BA           ;       /*判断发生错误的单元,少数服从多数原则*/
 03BA           ;       else if(eeprom_temp[0]==eeprom_temp[1])
 03BA 2980              ldd R2,y+1
 03BC 3880              ldd R3,y+0
 03BE 3214              cp R3,R2
 03C0 21F4              brne L64
 03C2                   .dbline 282
 03C2           ;                {
 03C2                   .dbline 284
 03C2           ;                /*第三单元出错*/
 03C2           ;                    eeprom_data = eeprom_temp[0];
 03C2 432D              mov R20,R3
 03C4                   .dbline 285
 03C4           ;                    eeprom_flag=0xff;
 03C4 8FEF              ldi R24,255
 03C6 A82E              mov R10,R24
 03C8                   .dbline 286
 03C8           ;                }
 03C8 13C0              rjmp L65
 03CA           L64:
 03CA                   .dbline 287
 03CA           ;       else if(eeprom_temp[1]==eeprom_temp[2])
 03CA 2A80              ldd R2,y+2
 03CC 3980              ldd R3,y+1
 03CE 3214              cp R3,R2
 03D0 21F4              brne L67
 03D2                   .dbline 288
 03D2           ;                {
 03D2                   .dbline 290
 03D2           ;                /*第一单元出错*/
 03D2           ;                    eeprom_data = eeprom_temp[1];
 03D2 432D              mov R20,R3
 03D4                   .dbline 291
 03D4           ;                    eeprom_flag=0xff;
 03D4 8FEF              ldi R24,255
 03D6 A82E              mov R10,R24
 03D8                   .dbline 292
 03D8           ;                }
 03D8 0BC0              rjmp L68
 03DA           L67:
 03DA                   .dbline 293
 03DA           ;       else if(eeprom_temp[0]==eeprom_temp[2])
 03DA 2A80              ldd R2,y+2
 03DC 3880              ldd R3,y+0
 03DE 3214              cp R3,R2
 03E0 21F4              brne L72
 03E2                   .dbline 294
 03E2           ;                {
 03E2                   .dbline 296
 03E2           ;                /*第二单元出错*/
 03E2           ;                    eeprom_data = eeprom_temp[0];
 03E2 432D              mov R20,R3
 03E4                   .dbline 297
 03E4           ;                    eeprom_flag=0xff;
 03E4 8FEF              ldi R24,255
 03E6 A82E              mov R10,R24
 03E8                   .dbline 298
 03E8           ;                }
 03E8 03C0              rjmp L73
 03EA           L72:
 03EA                   .dbline 300
 03EA           ;       else
 03EA           ;            {//三个单元都不相等,则将数据填为0xff
 03EA                   .dbline 301
 03EA           ;                   eeprom_data = 0xff;
 03EA 4FEF              ldi R20,255
 03EC                   .dbline 302
 03EC           ;                       eeprom_flag=0xff;
 03EC 8FEF              ldi R24,255
 03EE A82E              mov R10,R24
 03F0                   .dbline 303
 03F0           ;                }
 03F0           L73:
 03F0           L68:
 03F0           L65:
 03F0           L56:
 03F0                   .dbline 304
 03F0           ;       if(eeprom_flag)EepromWrite(Address,eeprom_data);//发生错误,则将数据重新写入    
 03F0 AA20              tst R10
 03F2 19F0              breq L75
 03F4                   .dbline 304
 03F4 242F              mov R18,R20
 03F6 062F              mov R16,R22
 03F8 04D0              rcall _EepromWrite
 03FA           L75:
 03FA                   .dbline 305
 03FA           ; return eeprom_data;    
 03FA 042F              mov R16,R20
 03FC                   .dbline -2
 03FC           L47:
 03FC 2396              adiw R28,3
 03FE 00D0              rcall pop_gset4
 0400                   .dbline 0 ; func end
 0400 0895              ret
 0402                   .dbsym r eeprom_flag 10 c
 0402                   .dbsym r eeprom_data 20 c
 0402                   .dbsym l eeprom_temp 0 A[3:3]c
 0402                   .dbsym r k 20 c
 0402                   .dbsym r Address 22 c
 0402                   .dbend
 0402                   .dbfunc e EepromWrite _EepromWrite fV
 0402           ;      tmpeeprom -> R20
 0402           ;              k -> R22
 0402           ;           Data -> R18
 0402           ;        Address -> R16
                        .even
 0402           _EepromWrite::
 0402 00D0              rcall push_gset2
 0404                   .dbline -1
 0404                   .dbline 310
 0404           ; }  
 0404           ; ///////////////////////////////////////////////////////////////////////////////
 0404           ; //*EEPROM写,一次写三单元,作为备份*/
 0404           ; void EepromWrite(uchar Address, uchar Data)  
 0404           ; {  
 0404                   .dbline 312
 0404           ;       char tmpeeprom,k;
 0404           ;       tmpeeprom=SREG;                          // 保存当前设置,以便恢复
 0404 4FB7              in R20,0x3f
 0406                   .dbline 313
 0406           ;       CLI();                                   // 关闭中断
 0406 F894              cli
 0408                   .dbline 314
 0408           ;       if(Address >EEP_RANG)Address=EEP_RANG;
 0408 8AEA              ldi R24,170
 040A 8017              cp R24,R16
 040C 08F4              brsh L78
 040E                   .dbline 314
 040E 0AEA              ldi R16,170
 0410           L78:
 0410                   .dbline 315
 0410           ;       for(k=0;k<3;k++)
 0410 6627              clr R22
 0412 12C0              rjmp L83
 0414           X2:
 0414                   .dbline 316
 0414           ;       {
 0414           L84:
 0414                   .dbline 317
 0414           L85:
 0414                   .dbline 317
 0414 E199              sbic 0x1c,1
 0416 FECF              rjmp L84
 0418                   .dbline 318
 0418 8AEA              ldi R24,170
 041A 869F              mul R24,R22
 041C 202E              mov R2,R16
 041E 3324              clr R3
 0420 200C              add R2,R0
 0422 311C              adc R3,R1
 0424 3FBA              out 0x1f,R3
 0426 2EBA              out 0x1e,R2
 0428                   .dbline 319
 0428 2DBB              out 0x1d,R18
 042A                   .dbline 320
 042A E29A              sbi 0x1c,2
 042C                   .dbline 321
 042C E19A              sbi 0x1c,1
 042E                   .dbline 322
 042E 2224              clr R2
 0430 3324              clr R3
 0432 3FBA              out 0x1f,R3
 0434 2EBA              out 0x1e,R2
 0436                   .dbline 323
 0436           L81:
 0436                   .dbline 315
 0436 6395              inc R22
 0438           L83:
 0438                   .dbline 315
 0438 6330              cpi R22,3

⌨️ 快捷键说明

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