📄 m8pwm.lis
字号:
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 + -