📄 main.s
字号:
.dbline 463
; mode ++;
lds R24,_mode
subi R24,255 ; addi 1
sts _mode,R24
.dbline 465
;
; if(mode==1||mode==2)
cpi R24,1
breq L151
cpi R24,2
brne L149
L151:
.dbline 466
; {
.dbline 467
; DDRD = 0xFF;
ldi R24,255
out 0xa,R24
.dbline 468
; TIMSK1 = 0x01; // 开T1中断
ldi R24,1
sts 111,R24
.dbline 469
; EIMSK = 0x00;
clr R2
out 0x1d,R2
.dbline 470
; out_time = 150;
ldi R24,150
sts _out_time,R24
.dbline 471
; dp = 0x00;
sts _dp,R2
.dbline 473
;
; }
rjmp L146
L149:
.dbline 474
; else if(mode==3)
lds R24,_mode
cpi R24,3
brne L152
.dbline 475
; {
.dbline 476
; DDRD = 0xFB;
ldi R24,251
out 0xa,R24
.dbline 477
; TIMSK1 = 0x00; // 开T1中断
clr R2
sts 111,R2
.dbline 478
; EICRA = 0x03; //extended ext ints
ldi R24,3
sts 105,R24
.dbline 479
; EIMSK = 0x01;
ldi R24,1
out 0x1d,R24
.dbline 480
; dp = 0x00;
sts _dp,R2
.dbline 481
; }
rjmp L146
L152:
.dbline 482
; else if(mode>=4)
lds R24,_mode
cpi R24,4
brlo L146
.dbline 483
; {
.dbline 484
; TIMSK1 = 0x00; // 关T1中断
clr R2
sts 111,R2
.dbline 485
; EIMSK = 0x00;
out 0x1d,R2
.dbline 486
; mode = 0;
sts _mode,R2
.dbline 487
; dp = 0x02;
ldi R24,2
sts _dp,R24
.dbline 488
; }
.dbline 489
; }
.dbline 490
; }
rjmp L146
L145:
.dbline 491
; else key = 0 ;
clr R2
clr R3
sts _key+1,R3
sts _key,R2
L146:
.dbline 493
;
; if(temp==0x08&&mode==1) // k1
cpi R16,8
brne L156
lds R24,_mode
cpi R24,1
brne L156
.dbline 494
; {
.dbline 495
; if(key1<500)
lds R24,_key1
lds R25,_key1+1
cpi R24,244
ldi R30,1
cpc R25,R30
brsh L158
.dbline 496
; {
.dbline 497
; key1 ++;
adiw R24,1
sts _key1+1,R25
sts _key1,R24
.dbline 498
; if(key1==5) // 短按
cpi R24,5
ldi R30,0
cpc R25,R30
brne L157
.dbline 499
; {
.dbline 500
; if(out_time<210) out_time ++;
lds R24,_out_time
cpi R24,210
brsh L157
.dbline 500
subi R24,255 ; addi 1
sts _out_time,R24
.dbline 501
; }
.dbline 502
; }
rjmp L157
L158:
.dbline 504
; else // 长按
; {
.dbline 505
; key1 = 490;
ldi R24,490
ldi R25,1
sts _key1+1,R25
sts _key1,R24
.dbline 506
; if(out_time<210) out_time ++;
lds R24,_out_time
cpi R24,210
brsh L157
.dbline 506
subi R24,255 ; addi 1
sts _out_time,R24
.dbline 507
; }
.dbline 508
; }
rjmp L157
L156:
.dbline 509
; else key1 = 0;
clr R2
clr R3
sts _key1+1,R3
sts _key1,R2
L157:
.dbline 511
;
; if(temp==0x04&&mode==1) // k2
cpi R16,4
brne L166
lds R24,_mode
cpi R24,1
brne L166
.dbline 512
; {
.dbline 513
; if(key2<500)
lds R24,_key2
lds R25,_key2+1
cpi R24,244
ldi R30,1
cpc R25,R30
brsh L168
.dbline 514
; {
.dbline 515
; key2 ++;
adiw R24,1
sts _key2+1,R25
sts _key2,R24
.dbline 516
; if(key2==5) // 短按
cpi R24,5
ldi R30,0
cpc R25,R30
brne L167
.dbline 517
; {
.dbline 518
; if(out_time>90) out_time --;
ldi R24,90
lds R2,_out_time
cp R24,R2
brsh L167
.dbline 518
mov R24,R2
subi R24,1
sts _out_time,R24
.dbline 519
; }
.dbline 520
; }
rjmp L167
L168:
.dbline 522
; else // 长按
; {
.dbline 523
; key2 = 490;
ldi R24,490
ldi R25,1
sts _key2+1,R25
sts _key2,R24
.dbline 524
; if(out_time>90) out_time --;
ldi R24,90
lds R2,_out_time
cp R24,R2
brsh L167
.dbline 524
mov R24,R2
subi R24,1
sts _out_time,R24
.dbline 525
; }
.dbline 526
; }
rjmp L167
L166:
.dbline 527
clr R2
clr R3
sts _key2+1,R3
sts _key2,R2
L167:
.dbline -2
L144:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 537
; else key2 = 0;
; }
;
;
;
; /*---------------------------------------------------------------
; main
; ----------------------------------------------------------------*/
;
; void main(void)
; {
.dbline 538
; init_devices();
rcall _init_devices
.dbline 540
;
; batt_test();
rcall _batt_test
rjmp L178
L177:
.dbline 543
;
; while(1)
; {
.dbline 544
; asm("WDR");
WDR
.dbline 545
; if(flag_2ms)
lds R2,_flag_2ms
tst R2
breq L180
.dbline 546
; {
.dbline 547
; flag_2ms = 0;
clr R2
sts _flag_2ms,R2
.dbline 549
;
; led_time ++;
lds R24,_led_time
subi R24,255 ; addi 1
sts _led_time,R24
.dbline 550
; if(led_time>=200) led_time = 0;
cpi R24,200
brlo L182
.dbline 550
sts _led_time,R2
L182:
.dbline 552
;
; ADC_count();
rcall _ADC_count
.dbline 553
; LED_display();
rcall _LED_display
.dbline 554
; key_scan();
rcall _key_scan
.dbline 556
;
; }
L180:
.dbline 557
L178:
.dbline 542
rjmp L177
X9:
.dbline -2
L176:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 32
rjmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 567
; }
; }
;
;
; /*---------------------------------------------------------------
; timer0 2ms 中断
; ----------------------------------------------------------------*/
;
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
.dbline 568
; TCNT0 = 0x04; // reload counter value
ldi R24,4
out 0x26,R24
.dbline 570
;
; flag_2ms = 1;
ldi R24,1
sts _flag_2ms,R24
.dbline 572
;
; batt_num ++;
lds R24,_batt_num
lds R25,_batt_num+1
adiw R24,1
sts _batt_num+1,R25
sts _batt_num,R24
.dbline 573
; if(batt==2)
lds R24,_batt
cpi R24,2
brne L185
.dbline 574
; {
.dbline 575
; if(batt_num>=2000) batt_num = 0;
lds R24,_batt_num
lds R25,_batt_num+1
cpi R24,208
ldi R30,7
cpc R25,R30
brlo L186
.dbline 575
clr R2
clr R3
sts _batt_num+1,R3
sts _batt_num,R2
.dbline 576
; }
rjmp L186
L185:
.dbline 577
; else if(batt==3)
lds R24,_batt
cpi R24,3
brne L189
.dbline 578
; {
.dbline 579
; if(batt_num>=3000) batt_num = 0;
lds R24,_batt_num
lds R25,_batt_num+1
cpi R24,184
ldi R30,11
cpc R25,R30
brlo L190
.dbline 579
clr R2
clr R3
sts _batt_num+1,R3
sts _batt_num,R2
.dbline 580
; }
rjmp L190
L189:
.dbline 581
; else if(batt==4)
lds R24,_batt
cpi R24,4
brne L193
.dbline 582
; {
.dbline 583
; if(batt_num>=4000) batt_num = 0;
lds R24,_batt_num
lds R25,_batt_num+1
cpi R24,160
ldi R30,15
cpc R25,R30
brlo L195
.dbline 583
clr R2
clr R3
sts _batt_num+1,R3
sts _batt_num,R2
L195:
.dbline 584
; }
L193:
L190:
L186:
.dbline 586
;
; if(mode==1||mode==2)
lds R24,_mode
cpi R24,1
breq L199
cpi R24,2
breq X10
rjmp L197
X10:
L199:
.dbline 587
; {
.dbline 588
; flag_20ms ++;
lds R24,_flag_20ms
subi R24,255 ; addi 1
sts _flag_20ms,R24
.dbline 589
; if(flag_20ms>=10)
cpi R24,10
brsh X11
rjmp L200
X11:
.dbline 590
; {
.dbline 591
; flag_20ms = 0;
clr R2
sts _flag_20ms,R2
.dbline 593
;
; TCNT1 = 0xFD00; //预留512条指令时间
ldi R24,64768
ldi R25,253
sts 132+1,R25
sts 132,R24
.dbline 594
; TCCR1B = 0x01; //启动time1产生脉冲串
ldi R24,1
sts 129,R24
.dbline 595
; pulse = 0;
sts _pulse,R2
.dbline 597
;
; if(delay<100) delay ++;
lds R24,_delay
cpi R24,100
brsh L202
.dbline 597
subi R24,255 ; addi 1
sts _delay,R24
L202:
.dbline 599
;
; if(mode==2)
lds R24,_mode
cpi R24,2
brne L204
.dbline 600
; {
.dbline 601
; if(!down)
lds R2,_down
tst R2
brne L206
.dbline 602
; {
.dbline 603
; if(out_time<210)
lds R24,_out_time
cpi R24,210
brsh L208
.dbline 604
; {
.dbline 605
; if(delay>30) out_time ++;
ldi R24,30
lds R2,_delay
cp R24,R2
brsh L207
.dbline 605
lds R24,_out_time
subi R24,255 ; addi 1
sts _out_time,R24
.dbline 606
; }
rjmp L207
L208:
.dbline 608
; else
; {
.dbline 609
; down = 1;
ldi R24,1
sts _down,R24
.dbline 610
; delay = 0;
clr R2
sts _delay,R2
.dbline 611
; }
.dbline 612
; }
rjmp L207
L206:
.dbline 614
; else
; {
.dbline 615
; if(out_time>90)
ldi R24,90
lds R2,_out_time
cp R24,R2
brsh L212
.dbline 616
; {
.dbline 617
; if(delay>30) out_time --;
ldi R24,30
lds R2,_delay
cp R24,R2
brsh L213
.dbline 617
lds R24,_out_time
subi R24,1
sts _out_time,R24
.dbline 618
; }
rjmp L213
L212:
.dbline 620
; else
; {
.dbline 621
; down = 0;
clr R2
sts _down,R2
.dbline 622
; delay = 0;
sts _delay,R2
.dbline 623
; }
L213:
.dbline 624
; }
L207:
.dbline 625
; }
L204:
.dbline 626
; }
L200:
.dbline 627
L197:
.dbline -2
L184:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 26
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R24
st -y,R25
in R0,0x3f
st -y,R0
.dbline -1
.dbline 636
; }
; }
;
; /*---------------------------------------------------------------
; T1 产生各通道的脉宽
; ----------------------------------------------------------------*/
;
; #pragma interrupt_handler timer1_ovf_isr:14
; void timer1_ovf_isr(void)
; {
.dbline 637
; if(!pulse)
lds R2,_pulse
tst R2
brne L217
.dbline 638
; {
.dbline 639
; pulse = 1;
ldi R24,1
sts _pulse,R24
.dbline 640
; TCNT1 = 0xffff - out_time*80;
lds R2,_out_time
ldi R24,80
mul R24,R2
ldi R24,65535
ldi R25,255
sub R24,R0
sbc R25,R1
sts 132+1,R25
sts 132,R24
.dbline 641
; SET_OUT;
sbi 0xb,2
.dbline 642
; }
rjmp L218
L217:
.dbline 644
.dbline 645
cbi 0xb,2
.dbline 646
clr R2
sts 129,R2
.dbline 647
L218:
.dbline -2
L216:
ld R0,y+
out 0x3f,R0
ld R25,y+
ld R24,y+
ld R2,y+
ld R1,y+
ld R0,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
st -y,R2
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 656
; else
; {
; CLR_OUT;
; TCCR1B = 0; // STOP T1
; }
; }
;
; /****************************************************************
; INT0 interrupt
; /****************************************************************/
;
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 657
; if(EICRA==0x03)
lds R24,105
cpi R24,3
brne L220
.dbline 658
; {
.dbline 659
; TCNT1H = 0x00;
clr R2
sts 133,R2
.dbline 660
; TCNT1L = 0x00;
sts 132,R2
.dbline 661
; TCCR1B = 0x02; //start Timer1
ldi R24,2
sts 129,R24
.dbline 663
;
; EICRA = 0x02;
sts 105,R24
.dbline 664
; }
rjmp L221
L220:
.dbline 665
; else if(EICRA==0x02)
lds R24,105
cpi R24,2
brne L222
.dbline 666
; {
.dbline 667
; CH.data[0] = TCNT1L;
lds R2,132
sts _CH,R2
.dbline 668
; CH.data[1] = TCNT1H;
lds R2,133
sts _CH+1,R2
.dbline 670
;
; TCCR1B = 0x00; //start Timer1
clr R2
sts 129,R2
.dbline 671
; EICRA = 0x03;
ldi R24,3
sts 105,R24
.dbline 672
; }
L222:
L221:
.dbline -2
L219:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.area bss(ram, con, rel)
.dbfile E:\CHIYUA~1\LI_POT~1\main.c
_flas4::
.blkb 1
.dbsym e flas4 _flas4 c
_flas3::
.blkb 1
.dbsym e flas3 _flas3 c
_flas2::
.blkb 1
.dbsym e flas2 _flas2 c
_flas1::
.blkb 1
.dbsym e flas1 _flas1 c
_led_flag::
.blkb 1
.dbsym e led_flag _led_flag c
_led_time::
.blkb 1
.dbsym e led_time _led_time c
_delay::
.blkb 1
.dbsym e delay _delay c
_down::
.blkb 1
.dbsym e down _down c
_pulse::
.blkb 1
.dbsym e pulse _pulse c
_key2::
.blkb 2
.dbsym e key2 _key2 i
_key1::
.blkb 2
.dbsym e key1 _key1 i
_key::
.blkb 2
.dbsym e key _key i
_out_time::
.blkb 1
.dbsym e out_time _out_time c
_mode::
.blkb 1
.dbsym e mode _mode c
_batt_num::
.blkb 2
.dbsym e batt_num _batt_num i
_dip_bit::
.blkb 1
.dbsym e dip_bit _dip_bit c
_batt::
.blkb 1
.dbsym e batt _batt c
_adc_num::
.blkb 1
.dbsym e adc_num _adc_num c
_ad_temp::
.blkb 2
.dbsym e ad_temp _ad_temp i
_flag_20ms::
.blkb 1
.dbsym e flag_20ms _flag_20ms c
_flag_2ms::
.blkb 1
.dbsym e flag_2ms _flag_2ms c
_V::
.blkb 8
.dbsym e V _V A[8:4]i
_CH::
.blkb 2
.dbunion 0 2 .13
.dbfield 0 temp i
.dbfield 0 data A[2:2]c
.dbend
.dbsym e CH _CH S[.13]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -