📄 main.s
字号:
cbi 0x11,4
.dbline 474
; //初始化TC1
; /* TCCR1A = 0x00;
; TCNT1 = 0x00;
; TCCR1B |= (1<<ICES1);//(1<<ICNC1)|打开输入捕捉噪声抑制器 |上升沿触发捕捉,噪声捕捉器需打开,否则会导致上升沿/下降沿捕捉不准确,出来的结果会相差一半
; TCCR1B |= (1<<CS11);//8分频,8M时钟时正好1us
; SEI();
; TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10));*/
;
; TCCR1B = 0x00;//停止定时器
clr R2
out 0x2e,R2
.dbline 475
; TIMSK |= 0x20;//中断允许
in R24,0x37
ori R24,32
out 0x37,R24
.dbline 476
; ICR1H = 0xFF;
ldi R24,255
out 0x27,R24
.dbline 477
; ICR1L = 0xFF;//输入捕捉匹配值
out 0x26,R24
.dbline 478
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 479
; TCCR1B = 0x83;//启动定时器
ldi R24,131
out 0x2e,R24
.dbline 480
; TCCR1B |= (1<<ICES1)|(1<<ICNC1)|(1<<CS11);//|(1<<CS10)8分频,8M时钟时正好1us
in R24,0x2e
ori R24,194
out 0x2e,R24
.dbline 481
; TCCR1B |= (1<<ICES1);
in R24,0x2e
ori R24,64
out 0x2e,R24
xjmp L91
L90:
.dbline 498
; //方法一:采用直接测频率的方法,PROTEUS仿真通过
; /*while(1)
; {
; for(i=0; i<50; i++)delay_ms(10);
; TCNT1 =0;
; TCCR1B = ((1<<CS12)|(1<<CS11)|(1<<CS10));
; for(i=0; i<100; i++)delay_ms(10);//此处用简单的延时函数,精度有限,更高精度可以用timer来尝试
; TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10));
; //printf("TCNT1=%8u 频率=%8uHz\r\n", TCNT1, TCNT1);
; number_uart1(TCNT1,0);
; number_uart1(TCNT1,1);
;
; }*/
;
; //方法二:采用测量周期的方法
; while(1)
; {
.dbline 499
; count1=1;
ldi R24,1
sts _count1,R24
.dbline 501
; //for(i=0; i<250; i++)
; delay_ms(2);
ldi R16,2
ldi R17,0
xcall _delay_ms
.dbline 502
; TIMSK |= (1<<TICIE1);//打开输入捕捉器中断使能
in R24,0x37
ori R24,32
out 0x37,R24
L93:
.dbline 504
;
; while(count1);//count1循环,等待捕获中断处理完成,
L94:
.dbline 504
lds R2,_count1
tst R2
brne L93
X48:
.dbline 506
; //printf("temp1:%6u temp2:%6u width:%6lu\r\n", temp1, temp2, (temp2>=temp1)?(temp2-temp1):(65536-temp1+temp2));
; number_uart1(temp1,0);
clr R2
std y+0,R2
lds R16,_temp1
lds R17,_temp1+1
clr R18
clr R19
xcall _number_uart1
.dbline 507
; number_uart1(temp2,0);
clr R2
std y+0,R2
lds R16,_temp2
lds R17,_temp2+1
clr R18
clr R19
xcall _number_uart1
.dbline 512
;
; //if (temp2>temp1)
; // { pwm_duoji=(temp2-temp1); number_uart1(pwm_duoji ,1 );}
; //else
; { pwm_duoji=(temp1-temp2); number_uart1(pwm_duoji ,1 );}
.dbline 512
lds R2,_temp2
lds R3,_temp2+1
lds R10,_temp1
lds R11,_temp1+1
sub R10,R2
sbc R11,R3
.dbline 512
ldi R24,1
std y+0,R24
movw R16,R10
movw R18,R12
clr R18
clr R19
xcall _number_uart1
.dbline 512
.dbline 515
;
;
; }
L91:
.dbline 497
xjmp L90
L96:
.dbline 518
;
; while(1)
; {
.dbline 519
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L99
X49:
.dbline 520
; {delay_ms(50);
.dbline 520
ldi R16,50
ldi R17,0
xcall _delay_ms
.dbline 521
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L101
X50:
.dbline 522
; {
.dbline 524
; //CLI();
; if(pwm_duoji<0x3ff) pwm_duoji++;
movw R24,R10
cpi R24,255
ldi R30,3
cpc R25,R30
brsh L103
X51:
.dbline 524
adiw R24,1
movw R10,R24
L103:
.dbline 525
; OCR1BH = (pwm_duoji>>8)&0x07;
movw R24,R10
mov R24,R25
clr R25
andi R24,7
andi R25,0
out 0x29,R24
.dbline 526
; OCR1BL = pwm_duoji;
out 0x28,R10
.dbline 532
; /*OCR1BH = 0x03;
; OCR1BL = 0xF0;
; OCR1CH = 0x03;
; OCR1CL = 0xF0;
; */
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 534
; //SEI();
; }
L101:
.dbline 535
; }
L99:
.dbline 536
; if (!(PINE & PREVSONG))
sbic 0x1,2
rjmp L105
X52:
.dbline 537
; {delay_ms(50);
.dbline 537
ldi R16,50
ldi R17,0
xcall _delay_ms
.dbline 538
; if (!(PINE & PREVSONG))
sbic 0x1,2
rjmp L107
X53:
.dbline 539
; {
.dbline 541
; //CLI();
; if(pwm_duoji>0) pwm_duoji--;
tst R10
brne X54
tst R11
breq L109
X54:
.dbline 541
movw R24,R10
sbiw R24,1
movw R10,R24
L109:
.dbline 542
; OCR1BH = (pwm_duoji>>8)&0x07;
movw R24,R10
mov R24,R25
clr R25
andi R24,7
andi R25,0
out 0x29,R24
.dbline 543
; OCR1BL = pwm_duoji;
out 0x28,R10
.dbline 549
; /*OCR1BH = 0x03;
; OCR1BL = 0xF0;
; OCR1CH = 0x03;
; OCR1CL = 0xF0;
; */
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 551
; //SEI();
; }
L107:
.dbline 552
; }
L105:
.dbline 554
;
; }
L97:
.dbline 517
xjmp L96
L111:
.dbline 556
; while(1)
; { //(unsigned char)jiaodu;
.dbline 557
; PORTF=juli;
lds R2,_juli
lds R3,_juli+1
sts 98,R2
.dbline 558
; if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
sbic 0x1,6
rjmp L114
X55:
.dbline 558
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
sts _jiaodu+1,R21
sts _jiaodu,R20
sts _jiaodu+2+1,R23
sts _jiaodu+2,R22
L114:
.dbline 559
; if (ms==1)
lds R24,_ms
lds R25,_ms+1
cpi R24,1
ldi R26,0
cpc R25,R26
breq X67
xjmp L116
X67:
X56:
.dbline 560
; { //if (jiaodu!=n_jiaodu)//test
.dbline 561
; if (jiaodu!=0)
lds R4,_jiaodu+2
lds R5,_jiaodu+2+1
lds R2,_jiaodu
lds R3,_jiaodu+1
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
brne X68
xjmp L118
X68:
X57:
.dbline 562
; {//PORTF=jiaodu;
.dbline 564
; //if (jiaodu<0-20)//test 旋转
; if (ADCjohu<jiaodu-20)
ldi R20,20
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
lds R8,_ADCjohu+2
lds R9,_ADCjohu+2+1
lds R6,_ADCjohu
lds R7,_ADCjohu+1
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brge L120
X58:
.dbline 565
; {DDRB |=(R_pwm1 | L_pwm0);
.dbline 565
in R24,0x17
ori R24,96
out 0x17,R24
.dbline 566
; DDRB &=~(R_pwm1 | L_pwm0);
in R24,0x17
andi R24,159
out 0x17,R24
.dbline 567
; PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
in R24,0x18
andi R24,15
out 0x18,R24
.dbline 568
; OCR1AL = pwm_pingjun;
lds R2,_pwm_pingjun
out 0x2a,R2
.dbline 569
; OCR1BL = pwm_pingjun;
out 0x28,R2
.dbline 570
; OCR1CL = 0;
clr R2
sts 120,R2
.dbline 571
; OCR0=0;
out 0x31,R2
.dbline 572
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 573
; }
xjmp L121
L120:
.dbline 575
; //else if (jiaodu>0+20)//test
; else if (ADCjohu>jiaodu+20)
ldi R20,20
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_jiaodu+2
lds R5,_jiaodu+2+1
lds R2,_jiaodu
lds R3,_jiaodu+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
lds R8,_ADCjohu+2
lds R9,_ADCjohu+2+1
lds R6,_ADCjohu
lds R7,_ADCjohu+1
cp R2,R6
cpc R3,R7
cpc R4,R8
cpc R5,R9
brge L122
X59:
.dbline 576
; {DDRB |=(R_pwm0 | L_pwm1);
.dbline 576
in R24,0x17
ori R24,144
out 0x17,R24
.dbline 577
; DDRB &=~(R_pwm0 | L_pwm1);
in R24,0x17
andi R24,111
out 0x17,R24
.dbline 578
; PORTB =0xf0;
ldi R24,240
out 0x18,R24
.dbline 579
; OCR1AL = 0;
clr R2
out 0x2a,R2
.dbline 580
; OCR1BL = 0;
out 0x28,R2
.dbline 581
; OCR1CL = pwm_pingjun;
lds R2,_pwm_pingjun
sts 120,R2
.dbline 582
; OCR0=pwm_pingjun;
out 0x31,R2
.dbline 583
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 584
; }
xjmp L123
L122:
.dbline 585
; else PWM_OFF
in R24,0x17
andi R24,15
out 0x17,R24
L123:
L121:
.dbline 586
; n_jiaodu=jiaodu;
lds R10,_jiaodu
.dbline 587
; }
L118:
.dbline 588
; if (juli!=0)
lds R4,_juli+2
lds R5,_juli+2+1
lds R2,_juli
lds R3,_juli+1
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
brne X69
xjmp L124
X69:
X60:
.dbline 589
; if (sec!=n_sec)
lds R2,_sec
cp R2,R10
brne X70
xjmp L126
X70:
X61:
.dbline 590
; {
.dbline 591
; if (juli>0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_juli+2
lds R5,_juli+2+1
lds R2,_juli
lds R3,_juli+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brge L128
X62:
.dbline 592
; {DDRB |=(R_pwm1 | L_pwm1);
.dbline 592
in R24,0x17
ori R24,160
out 0x17,R24
.dbline 593
; DDRB &=~(R_pwm1 | L_pwm1);
in R24,0x17
andi R24,95
out 0x17,R24
.dbline 594
; OCR1AL = 0;
clr R2
out 0x2a,R2
.dbline 595
; OCR1BL = pwm_pingjun+Rpwm0;
lds R2,_Rpwm0
lds R3,_pwm_pingjun
add R3,R2
out 0x28,R3
.dbline 596
; OCR1CL = 0;
clr R2
sts 120,R2
.dbline 597
; OCR0=pwm_pingjun;
lds R2,_pwm_pingjun
out 0x31,R2
.dbline 598
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 599
; juli--;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_juli+2
lds R5,_juli+2+1
lds R2,_juli
lds R3,_juli+1
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
sts _juli+1,R3
sts _juli,R2
sts _juli+2+1,R5
sts _juli+2,R4
.dbline 600
; }
xjmp L129
L128:
.dbline 601
; else if (juli<0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_juli+2
lds R5,_juli+2+1
lds R2,_juli
lds R3,_juli+1
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L130
X63:
.dbline 602
; {DDRB |=(R_pwm0 | L_pwm0);
.dbline 602
in R24,0x17
ori R24,80
out 0x17,R24
.dbline 603
; DDRB &=~(R_pwm0 | L_pwm0);
in R24,0x17
andi R24,175
out 0x17,R24
.dbline 604
; OCR1AL = pwm_pingjun;
lds R2,_pwm_pingjun
out 0x2a,R2
.dbline 605
; OCR1BL = 0;
clr R2
out 0x28,R2
.dbline 606
; OCR1CL = pwm_pingjun;
lds R2,_pwm_pingjun
sts 120,R2
.dbline 607
; OCR0=0;
clr R2
out 0x31,R2
.dbline 608
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 609
; juli++;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_juli+2
lds R5,_juli+2+1
lds R2,_juli
lds R3,_juli+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _juli+1,R3
sts _juli,R2
sts _juli+2+1,R5
sts _juli+2,R4
.dbline 610
; }/**/
xjmp L131
L130:
.dbline 611
; else PWM_OFF
in R24,0x17
andi R24,15
out 0x17,R24
L131:
L129:
.dbline 612
; n_sec=sec;
lds R10,_sec
.dbline 613
; }
L126:
L124:
.dbline 617
;
; //number(0,2,5,xx,1);
; //number(0,4,5,ADCjohu,1);
; if (!(PINE & PREVSONG))xx=0;
sbic 0x1,2
rjmp L132
X64:
.dbline 617
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _xx+1,R21
sts _xx,R20
sts _xx+2+1,R23
sts _xx+2,R22
L132:
.dbline 618
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L134
X65:
.dbline 619
; {
.dbline 621
; //CLI();
; number_uart1(xx,0);
clr R2
std y+0,R2
lds R18,_xx+2
lds R19,_xx+2+1
lds R16,_xx
lds R17,_xx+1
xcall _number_uart1
.dbline 622
; number_uart1(ADCjohu,1);
ldi R24,1
std y+0,R24
lds R18,_ADCjohu+2
lds R19,_ADCjohu+2+1
lds R16,_ADCjohu
lds R17,_ADCjohu+1
xcall _number_uart1
.dbline 623
; delay_ms(20);
ldi R16,20
ldi R17,0
xcall _delay_ms
.dbline 625
; //SEI();
; }
L134:
.dbline 626
; ms=0;
clr R2
clr R3
sts _ms+1,R3
sts _ms,R2
.dbline 627
; }
L116:
.dbline 628
; }
L112:
.dbline 555
xjmp L111
X66:
.dbline -2
L89:
.dbline 0 ; func end
adiw R28,1
ret
.dbsym l n 2 I
.dbsym r i 12 c
.dbsym r n_juli 10 c
.dbsym r n_jiaodu 10 c
.dbsym r n_sec 10 c
.dbsym r pwm_duoji 10 i
.dbend
;
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -