📄 main.s
字号:
; if (P_speed<set_speed) // 如果小于设定速度,则减少触发时间
lds R4,_P_speed+2
lds R5,_P_speed+2+1
lds R2,_P_speed
lds R3,_P_speed+1
st -y,R5
st -y,R4
st -y,R3
st -y,R2
lds R4,_set_speed+2
lds R5,_set_speed+2+1
lds R2,_set_speed
lds R3,_set_speed+1
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall cmp32f
brge L243
.dbline 420
; {
.dbline 421
; if (dj_fangxi==1)
lds R24,_dj_fangxi
cpi R24,1
brne L245
.dbline 422
; {
.dbline 423
; time0_jsq=time0_jsq-tmp;
mov R2,R12
clr R3
sub R10,R2
sbc R11,R3
.dbline 424
; }
xjmp L229
L245:
.dbline 426
; else
; {
.dbline 427
; time0_jsq=time0_jsq-tmp;
mov R2,R12
clr R3
sub R10,R2
sbc R11,R3
.dbline 428
; dj_jibie++;
lds R24,_dj_jibie
subi R24,255 ; addi 1
sts _dj_jibie,R24
.dbline 429
; dj_fangxi=1;
ldi R24,1
sts _dj_fangxi,R24
.dbline 430
; }
.dbline 431
; }
xjmp L229
L243:
.dbline 433
; else //反之,则增大触发时间
; {
.dbline 434
; if (dj_fangxi==1)
lds R24,_dj_fangxi
cpi R24,1
brne L247
.dbline 435
; {
.dbline 436
; time0_jsq=time0_jsq+tmp;
mov R2,R12
clr R3
add R10,R2
adc R11,R3
.dbline 437
; dj_jibie++;
lds R24,_dj_jibie
subi R24,255 ; addi 1
sts _dj_jibie,R24
.dbline 438
; dj_fangxi=0;
clr R2
sts _dj_fangxi,R2
.dbline 439
; }
xjmp L229
L247:
.dbline 441
; else
; {
.dbline 442
; time0_jsq=time0_jsq+tmp;
mov R2,R12
clr R3
add R10,R2
adc R11,R3
.dbline 443
; }
.dbline 444
; }
.dbline 445
; }
xjmp L229
L228:
.dbline 447
; else
; {
.dbline 448
; dj_jibie=0;
clr R2
sts _dj_jibie,R2
.dbline 449
; dj_fangxi=0;
sts _dj_fangxi,R2
.dbline 450
; }
L229:
.dbline 451
; pre_jsq=time0_jsq;
sts _pre_jsq+1,R11
sts _pre_jsq,R10
.dbline 452
; time0_chi=(unsigned char)(time0_jsq/256-1); //计时量计算
movw R24,R10
mov R24,R25
clr R25
sbiw R24,1
sts _time0_chi,R24
.dbline 453
; time0_yu=(unsigned char)(256-time0_jsq % 256);
movw R24,R10
andi R25,0
ldi R30,256
ldi R31,1
sub R30,R24
sbc R31,R25
sts _time0_yu,R30
.dbline 454
; time0_fen=0;
clr R2
sts _time0_fen,R2
.dbline 455
; if (time0_yu>100) //如果余数太小,则从次数中分出一次来,和余数加在一起分担剩余的时间
ldi R24,100
cp R24,R30
brsh L249
.dbline 456
; {
.dbline 457
; time0_chi--;
lds R24,_time0_chi
subi R24,1
sts _time0_chi,R24
.dbline 458
; time0_yu=156;
ldi R24,156
sts _time0_yu,R24
.dbline 459
; time0_fen=time0_yu-156;
subi R24,156
sts _time0_fen,R24
.dbline 460
; }
L249:
.dbline 461
L226:
.dbline -2
L225:
xcall pop_gset4
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r tmp 12 c
.dbsym r time0_jsq 10 i
.dbend
.area vector(rom, abs)
.org 72
jmp _int2_isr
.area text(rom, con, rel)
.dbfile D:\gmj_1\main.c
.dbfunc e int2_isr _int2_isr fV
.even
_int2_isr::
st -y,R2
st -y,R3
in R2,0x3f
st -y,R2
.dbline -1
.dbline 466
; }
; }
;
; #pragma interrupt_handler int2_isr:19
; void int2_isr(void)
; {
.dbline 468
; //external interupt on INT2
; step_num=0;
clr R2
clr R3
sts _step_num+1,R3
sts _step_num,R2
.dbline -2
L251:
ld R2,y+
out 0x3f,R2
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 473
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 475
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 476
; port_init();
xcall _port_init
.dbline 477
; timer0_init();
xcall _timer0_init
.dbline 478
; timer1_init();
xcall _timer1_init
.dbline 479
; timer2_init();
xcall _timer2_init
.dbline 480
; twi_init();
xcall _twi_init
.dbline 481
; adc_init();
xcall _adc_init
.dbline 483
;
; MCUCR = 0x0C;
ldi R24,12
out 0x35,R24
.dbline 484
; GICR = 0xE0;
ldi R24,224
out 0x3b,R24
.dbline 485
; TIMSK = 0x45; //timer interrupt sources
ldi R24,69
out 0x39,R24
.dbline 486
; SEI(); //re-enable interrupts
sei
.dbline -2
L252:
.dbline 0 ; func end
ret
.dbend
.dbfunc e read_eeprom _read_eeprom fV
.even
_read_eeprom::
sbiw R28,2
.dbline -1
.dbline 491
; //all peripherals are now initialized
; }
;
; void read_eeprom(void) //读取eeprom中的关键参数
; {
.dbline 492
; EEPROM_READ(10,set_speed);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_set_speed
ldi R19,>_set_speed
ldi R16,10
ldi R17,0
xcall _EEPROMReadBytes
.dbline 493
; EEPROM_READ(14,dw_speed);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_dw_speed
ldi R19,>_dw_speed
ldi R16,14
ldi R17,0
xcall _EEPROMReadBytes
.dbline 494
; EEPROM_READ(18,juli_jcd);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_juli_jcd
ldi R19,>_juli_jcd
ldi R16,18
ldi R17,0
xcall _EEPROMReadBytes
.dbline 495
; EEPROM_READ(22,longth_guamian);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_longth_guamian
ldi R19,>_longth_guamian
ldi R16,22
ldi R17,0
xcall _EEPROMReadBytes
.dbline 496
; EEPROM_READ(26,ganju);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_ganju
ldi R19,>_ganju
ldi R16,26
ldi R17,0
xcall _EEPROMReadBytes
.dbline 497
; EEPROM_READ(30,longth_zongmian);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_longth_zongmian
ldi R19,>_longth_zongmian
ldi R16,30
ldi R17,0
xcall _EEPROMReadBytes
.dbline 498
; EEPROM_READ(34,caogan_speed);
ldi R24,4
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_caogan_speed
ldi R19,>_caogan_speed
ldi R16,34
ldi R17,0
xcall _EEPROMReadBytes
.dbline 499
; EEPROM_READ(38,max_ganshu);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_max_ganshu
ldi R19,>_max_ganshu
ldi R16,38
ldi R17,0
xcall _EEPROMReadBytes
.dbline -2
L253:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile D:\gmj_1\main.c
_check_gan::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\gmj_1\main.c
.dbsym e check_gan _check_gan c
.area text(rom, con, rel)
.dbfile D:\gmj_1\main.c
.dbfunc e main _main fV
; n -> y+10
; tttt -> y+8
; i -> y+6
; m -> R10,R11
.even
_main::
sbiw R28,14
.dbline -1
.dbline 505
; }
;
; //
; unsigned char check_gan=0;
; void main(void)
; {
.dbline 507
; unsigned int i,m;
; char *tttt="1231231";
ldi R24,<L255
ldi R25,>L255
std y+9,R25
std y+8,R24
.dbline 509
; unsigned int n;
; init_devices();
xcall _init_devices
.dbline 513
;
; //insert your functional code here...
; //开始全局变量的初始化
; read_eeprom();
xcall _read_eeprom
.dbline 515
; //结束全局变量的初始化
; M_state=8;
ldi R24,8
sts _M_state,R24
.dbline 516
; PORTB &=0xef; //亮电源指示灯
in R24,0x18
andi R24,239
out 0x18,R24
.dbline 517
; for (i=0;i<10000;i++)
clr R0
clr R1
std y+7,R1
std y+6,R0
xjmp L259
L256:
.dbline 518
; {
.dbline 519
clr R10
clr R11
xjmp L263
L260:
.dbline 519
L261:
.dbline 519
movw R24,R10
adiw R24,1
movw R10,R24
L263:
.dbline 519
movw R24,R10
cpi R24,244
ldi R30,1
cpc R25,R30
brlo L260
.dbline 520
L257:
.dbline 517
ldd R24,y+6
ldd R25,y+7
adiw R24,1
std y+7,R25
std y+6,R24
L259:
.dbline 517
ldd R24,y+6
ldd R25,y+7
cpi R24,16
ldi R30,39
cpc R25,R30
brlo L256
.dbline 521
; for (m=0;m<500;m++);
; }
; disstring(tttt);
ldd R16,y+8
ldd R17,y+9
xcall _disstring
xjmp L265
L264:
.dbline 523
; while (1)
; {
.dbline 524
; if (PORTD & 0b01000000)
sbis 0x12,6
rjmp L267
.dbline 525
; {
.dbline 526
; check_gan=1;
ldi R24,1
sts _check_gan,R24
.dbline 527
; }
L267:
.dbline 528
; if ((check_gan==1) && ((PORTD & 0x01000000)==0))
lds R24,_check_gan
cpi R24,1
brne L269
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,1
in R2,0x12
clr R3
clr R4
clr R5
and R2,R20
and R3,R21
and R4,R22
and R5,R23
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brne L269
.dbline 529
; {
.dbline 530
; check_gan=0;
clr R2
sts _check_gan,R2
.dbline 531
; jileigan++;
lds R24,_jileigan
subi R24,255 ; addi 1
sts _jileigan,R24
.dbline 532
; }
L269:
.dbline 533
; if ((jileigan>max_ganshu) & (caoshu==0))
lds R2,_max_ganshu
lds R3,_jileigan
cp R2,R3
brsh L273
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L274
L273:
clr R14
clr R15
L274:
lds R2,_caoshu
tst R2
brne L275
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L276
L275:
clr R12
clr R13
L276:
movw R2,R14
and R2,R12
and R3,R13
tst R2
brne X40
tst R3
breq L271
X40:
.dbline 534
; {
.dbline 535
; caoshu=1;
ldi R24,1
sts _caoshu,R24
.dbline 536
; current_speed=set_speed;
lds R4,_set_speed+2
lds R5,_set_speed+2+1
lds R2,_set_speed
lds R3,_set_speed+1
sts _current_speed+1,R3
sts _current_speed,R2
sts _current_speed+2+1,R5
sts _current_speed+2,R4
.dbline 537
; set_speed=caogan_speed;
lds R4,_caogan_speed+2
lds R5,_caogan_speed+2+1
lds R2,_caogan_speed
lds R3,_caogan_speed+1
sts _set_speed+1,R3
sts _set_speed,R2
sts _set_speed+2+1,R5
sts _set_speed+2,R4
.dbline 539
; //亮超速指示灯
; PORTB &=0xbf;
in R24,0x18
andi R24,191
out 0x18,R24
.dbline 540
; }
L271:
.dbline 541
; if ((jileigan<=3) & (caoshu==1))
ldi R24,3
lds R2,_jileigan
cp R24,R2
brlo L279
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L280
L279:
clr R14
clr R15
L280:
lds R24,_caoshu
cpi R24,1
brne L281
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L282
L281:
clr R12
clr R13
L282:
movw R2,R14
and R2,R12
and R3,R13
tst R2
brne X41
tst R3
breq L277
X41:
.dbline 542
; {
.dbline 543
; caoshu=0;
clr R2
sts _caoshu,R2
.dbline 544
; set_speed=current_speed;
lds R4,_current_speed+2
lds R5,_current_speed+2+1
lds R2,_current_speed
lds R3,_current_speed+1
sts _set_speed+1,R3
sts _set_speed,R2
sts _set_speed+2+1,R5
sts _set_speed+2,R4
.dbline 546
; //关超速指示灯
; PORTB |=0x40;
sbi 0x18,6
.dbline 547
; }
L277:
.dbline 548
; if (on_key==1)
lds R24,_on_key
cpi R24,1
breq X46
xjmp L283
X46:
.dbline 549
; {
.dbline 550
; on_key=0;
clr R2
sts _on_key,R2
.dbline 551
; key=ZLG7290_GetKey();
xcall _ZLG7290_GetKey
sts _key,R16
.dbline 552
; if (key>0)
clr R2
mov R3,R16
cp R2,R16
brlo X47
xjmp L285
X47:
.dbline 553
; {
.dbline 554
; if (menu_jb==0)
lds R2,_menu_jb
tst R2
breq X48
xjmp L287
X48:
.dbline 555
; switch (key)
mov R10,R3
clr R11
movw R24,R10
cpi R24,2
ldi R30,0
cpc R25,R30
brne X49
xjmp L293
X49:
cpi R24,3
ldi R30,0
cpc R25,R30
brne X50
xjmp L298
X50:
cpi R24,4
ldi R30,0
cpc R25,R30
brne X51
xjmp L302
X51:
cpi R24,5
ldi R30,0
cpc R25,R30
brne X52
xjmp L303
X52:
cpi R24,6
ldi R30,0
cpc R25,R30
brne X53
xjmp L304
X53:
cpi R24,8
ldi R30,0
cpc R25,R30
breq L292
cpi R24,10
ldi R30,0
cpc R25,R30
brne X54
xjmp L305
X54:
cpi R24,11
ldi R30,0
cpc R25,R30
brne X55
xjmp L306
X55:
cpi R24,12
ldi R30,0
cpc R25,R30
brne X56
xjmp L307
X56:
xjmp L289
X42:
.dbline 556
; {
L292:
.dbline 558
; case START :
; {
.dbline 559
; pidai_yunxing=1;
ldi R24,1
sts _pidai_yunxing,R24
.dbline 560
; guogan=1;
sts _guogan,R24
.dbline 562
; //亮运行指示灯
; disstring(string1);
lds R16,_string1
lds R17,_string1+1
xcall _disstring
.dbline 563
; } break;
.dbline 563
xjmp L290
L293:
.dbline 565
; case INC_SPEED :
; {
.dbline 566
; set_speed=set_speed+50;
lds R4,_set_speed+2
lds R5,_set_speed+2+1
lds R2,_set_speed
lds R3,_set_speed+1
st -y,R5
st -y,R4
st -y,R3
st -y,R2
ldi R16,<L294
ldi R17,>L294
xcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
xcall add32f
sts _set_speed+1,R17
sts _set_speed,R16
sts _set_speed+2+1,R19
sts _set_speed+2,R18
.dbline 567
; if (set_speed>5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -