📄 main.s
字号:
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 271
; ASSR = 0x00; //set async mode
out 0x30,R2
.dbline 272
; TCNT0 = 0x01; //set count
ldi R24,1
out 0x32,R24
.dbline 273
; OCR0 = 0x0f;
ldi R24,15
out 0x31,R24
.dbline 274
; TCCR0 = 0x6C; //start timer
ldi R24,108
out 0x33,R24
.dbline -2
L84:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 322
; }
;
; //TIMER1 initialize - prescale:64
; // WGM: 5) PWM 8bit fast, TOP=0x00FF
; // desired value: 1KHz
; // actual value: 0.488KHz (104.8%)
; /*void timer1_init(void)
; {
; TCCR1B = 0x00; //stop
; TCNT1H = 0xFF; //setup
; TCNT1L = 0x01;
; OCR1AH = 0x00;
; OCR1AL = 0x0f;
; OCR1BH = 0x00;
; OCR1BL = 0x0f;
; OCR1CH = 0x00;
; OCR1CL = 0x0f;
; ICR1H = 0x00;
; ICR1L = 0xFF;
; TCCR1A = 0xA9;
; TCCR1B = 0x0B; //start Timer
; }*/
; //TIMER1 initialize - prescale:8
; // WGM: 9) PWM phz freq correct, TOP=OCRnA
; // desired value: 40mSec
; // actual value: 40.000mSec (0.0%)
; /*void timer1_init(void)
; {
; TCCR1B = 0x00; //stop
; TCNT1H = 0xB1; //setup
; TCNT1L = 0xE0;
; OCR1AH = 0x4E;
; OCR1AL = 0x20;
; OCR1BH = 0x4E;
; OCR1BL = 0x20;
; OCR1CH = 0x4E;
; OCR1CL = 0x20;
; ICR1H = 0x4E;
; ICR1L = 0x20;
; TCCR1A = 0x01;
; TCCR1B = 0x12; //start Timer
; }*/
; //TIMER1 initialize - prescale:64
; // WGM: 7) PWM 10bit fast, TOP=0x03FF
; // desired value: 40mSec
; // actual value: 8.192mSec (79.5%)
; void timer1_init(void)
; {
.dbline 323
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 324
; TCNT1H = 0xFC; //setup
ldi R24,252
out 0x2d,R24
.dbline 325
; TCNT1L = 0x01;
ldi R24,1
out 0x2c,R24
.dbline 326
; OCR1AH = 0x03;
ldi R24,3
out 0x2b,R24
.dbline 327
; OCR1AL = 0xFF;
ldi R24,255
out 0x2a,R24
.dbline 328
; OCR1BH = 0x03;
ldi R24,3
out 0x29,R24
.dbline 329
; OCR1BL = 0xFF;
ldi R24,255
out 0x28,R24
.dbline 330
; OCR1CH = 0x03;
ldi R24,3
sts 121,R24
.dbline 331
; OCR1CL = 0xFF;
ldi R24,255
sts 120,R24
.dbline 332
; ICR1H = 0x03;
ldi R24,3
out 0x27,R24
.dbline 333
; ICR1L = 0xFF;
ldi R24,255
out 0x26,R24
.dbline 334
; TCCR1A = 0x33;
ldi R24,51
out 0x2f,R24
.dbline 335
; TCCR1B = 0x0B; //start Timer
ldi R24,11
out 0x2e,R24
.dbline -2
L85:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fI
; n -> <dead>
; n_juli -> R10
; n_jiaodu -> R10
; n_sec -> R10
; pwm_duoji -> R10,R11
.even
_main::
sbiw R28,1
.dbline -1
.dbline 342
; }
;
;
; #define PWM_ON DDRB|= R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1;
; #define PWM_OFF DDRB&= ~(R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1);
; main()
; {int n;
.dbline 343
; unsigned char n_jiaodu=0,n_juli=0;
.dbline 343
.dbline 344
; unsigned char n_sec=0;
.dbline 345
; unsigned int pwm_duoji=0;
.dbline 346
; init_devices();
xcall _init_devices
.dbline 347
; timer1_init();timer0_init();
xcall _timer1_init
.dbline 347
xcall _timer0_init
.dbline 358
; //OCR1AH = 0x00;
; /* OCR1AL = 64;
; //OCR1BH = 0x00;
; OCR1BL = 64;
; //OCR1CH = 0x00;
; OCR1CL = 64;
; OCR0=64;*/
;
;
; //while(1);
; DDRE|=0x38;//while(1);
in R24,0x2
ori R24,56
out 0x2,R24
.dbline 368
; /////////LCD
; /* DDRB = 0xBF; //SI输入,SO,SCK,SS输出
; SPCR = 0x50; //setup SPI
; SPSR = 0x01; //setup SPI*/
; /*while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';*/
; delay_ms(3000);
ldi R16,3000
ldi R17,11
xcall _delay_ms
.dbline 369
; number_uart1(1010,1);
ldi R24,1
std y+0,R24
ldi R16,242
ldi R17,3
ldi R18,0
ldi R19,0
xcall _number_uart1
.dbline 370
; 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 371
; 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 372
; delay_ms(3000);
ldi R16,3000
ldi R17,11
xcall _delay_ms
.dbline 373
; xx=0;
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
.dbline 377
; //LCD_Init();
; //LCD_clear();
;
; DDRE &= ~0x7c;//if (!(PORTE & STOP)) if (!(PORTE & VOLDOWN)) if (!(PORTE & VOLUP)) if (!(PORTE & NEXTSONG)) if (!(PORTE & PREVSONG))
in R24,0x2
andi R24,131
out 0x2,R24
.dbline 378
; PORTE |=0x7c;
in R24,0x3
ori R24,124
out 0x3,R24
.dbline 380
;
; PORTD=0x01;
ldi R24,1
out 0x12,R24
.dbline 386
; //number(0,0,4,-999,1);
; /* OCR1AL = pwm_pingjun;
; OCR1BL = pwm_pingjun;
; OCR1CL = pwm_pingjun;
; OCR0=pwm_pingjun;*/
; OCR1BH = 0;
clr R2
out 0x29,R2
.dbline 387
; OCR1BL = 0;
out 0x28,R2
.dbline 388
; pwm_duoji=177;
ldi R24,177
ldi R25,0
movw R10,R24
xjmp L88
L87:
.dbline 390
; while(1)
; {
.dbline 391
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L90
X47:
.dbline 392
; {delay_ms(500);
.dbline 392
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 393
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L92
X48:
.dbline 394
; {
.dbline 396
; //CLI();
; if(pwm_duoji<900) pwm_duoji++;//2.5ms
movw R24,R10
cpi R24,132
ldi R30,3
cpc R25,R30
brsh L94
X49:
.dbline 396
adiw R24,1
movw R10,R24
L94:
.dbline 397
; OCR1BH = (pwm_duoji>>8)&0x07;
movw R24,R10
mov R24,R25
clr R25
andi R24,7
andi R25,0
out 0x29,R24
.dbline 398
; OCR1BL = pwm_duoji;
out 0x28,R10
.dbline 404
; /*OCR1BH = 0x03;
; OCR1BL = 0xF0;
; OCR1CH = 0x03;
; OCR1CL = 0xF0;
; */
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 406
; //SEI();
; }
L92:
.dbline 407
; }
L90:
.dbline 408
; if (!(PINE & PREVSONG))
sbic 0x1,2
rjmp L96
X50:
.dbline 409
; {delay_ms(500);
.dbline 409
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 410
; if (!(PINE & PREVSONG))
sbic 0x1,2
rjmp L98
X51:
.dbline 411
; {
.dbline 413
; //CLI();
; if(pwm_duoji>200) pwm_duoji--;//0.5ms
ldi R24,200
ldi R25,0
cp R24,R10
cpc R25,R11
brsh L100
X52:
.dbline 413
movw R24,R10
sbiw R24,1
movw R10,R24
L100:
.dbline 414
; OCR1BH = (pwm_duoji>>8)&0x07;
movw R24,R10
mov R24,R25
clr R25
andi R24,7
andi R25,0
out 0x29,R24
.dbline 415
; OCR1BL = pwm_duoji;
out 0x28,R10
.dbline 421
; /*OCR1BH = 0x03;
; OCR1BL = 0xF0;
; OCR1CH = 0x03;
; OCR1CL = 0xF0;
; */
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 423
; //SEI();
; }
L98:
.dbline 424
; }
L96:
.dbline 426
;
; }
L88:
.dbline 389
xjmp L87
L102:
.dbline 428
; while(1)
; { //(unsigned char)jiaodu;
.dbline 429
; PORTF=juli;
lds R2,_juli
lds R3,_juli+1
sts 98,R2
.dbline 430
; if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
sbic 0x1,6
rjmp L105
X53:
.dbline 430
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
L105:
.dbline 431
; if (ms==1)
lds R24,_ms
lds R25,_ms+1
cpi R24,1
ldi R26,0
cpc R25,R26
breq X65
xjmp L107
X65:
X54:
.dbline 432
; { //if (jiaodu!=n_jiaodu)//test
.dbline 433
; 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 X66
xjmp L109
X66:
X55:
.dbline 434
; {//PORTF=jiaodu;
.dbline 436
; //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 L111
X56:
.dbline 437
; {DDRB |=(R_pwm1 | L_pwm0);
.dbline 437
in R24,0x17
ori R24,96
out 0x17,R24
.dbline 438
; DDRB &=~(R_pwm1 | L_pwm0);
in R24,0x17
andi R24,159
out 0x17,R24
.dbline 439
; PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
in R24,0x18
andi R24,15
out 0x18,R24
.dbline 440
; OCR1AL = pwm_pingjun;
lds R2,_pwm_pingjun
out 0x2a,R2
.dbline 441
; OCR1BL = pwm_pingjun;
out 0x28,R2
.dbline 442
; OCR1CL = 0;
clr R2
sts 120,R2
.dbline 443
; OCR0=0;
out 0x31,R2
.dbline 444
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 445
; }
xjmp L112
L111:
.dbline 447
; //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 L113
X57:
.dbline 448
; {DDRB |=(R_pwm0 | L_pwm1);
.dbline 448
in R24,0x17
ori R24,144
out 0x17,R24
.dbline 449
; DDRB &=~(R_pwm0 | L_pwm1);
in R24,0x17
andi R24,111
out 0x17,R24
.dbline 450
; PORTB =0xf0;
ldi R24,240
out 0x18,R24
.dbline 451
; OCR1AL = 0;
clr R2
out 0x2a,R2
.dbline 452
; OCR1BL = 0;
out 0x28,R2
.dbline 453
; OCR1CL = pwm_pingjun;
lds R2,_pwm_pingjun
sts 120,R2
.dbline 454
; OCR0=pwm_pingjun;
out 0x31,R2
.dbline 455
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 456
; }
xjmp L114
L113:
.dbline 457
; else PWM_OFF
in R24,0x17
andi R24,15
out 0x17,R24
L114:
L112:
.dbline 458
; n_jiaodu=jiaodu;
lds R10,_jiaodu
.dbline 459
; }
L109:
.dbline 460
; 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 X67
xjmp L115
X67:
X58:
.dbline 461
; if (sec!=n_sec)
lds R2,_sec
cp R2,R10
brne X68
xjmp L117
X68:
X59:
.dbline 462
; {
.dbline 463
; 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 L119
X60:
.dbline 464
; {DDRB |=(R_pwm1 | L_pwm1);
.dbline 464
in R24,0x17
ori R24,160
out 0x17,R24
.dbline 465
; DDRB &=~(R_pwm1 | L_pwm1);
in R24,0x17
andi R24,95
out 0x17,R24
.dbline 466
; OCR1AL = 0;
clr R2
out 0x2a,R2
.dbline 467
; OCR1BL = pwm_pingjun+Rpwm0;
lds R2,_Rpwm0
lds R3,_pwm_pingjun
add R3,R2
out 0x28,R3
.dbline 468
; OCR1CL = 0;
clr R2
sts 120,R2
.dbline 469
; OCR0=pwm_pingjun;
lds R2,_pwm_pingjun
out 0x31,R2
.dbline 470
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 471
; 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 472
; }
xjmp L120
L119:
.dbline 473
; 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 L121
X61:
.dbline 474
; {DDRB |=(R_pwm0 | L_pwm0);
.dbline 474
in R24,0x17
ori R24,80
out 0x17,R24
.dbline 475
; DDRB &=~(R_pwm0 | L_pwm0);
in R24,0x17
andi R24,175
out 0x17,R24
.dbline 476
; OCR1AL = pwm_pingjun;
lds R2,_pwm_pingjun
out 0x2a,R2
.dbline 477
; OCR1BL = 0;
clr R2
out 0x28,R2
.dbline 478
; OCR1CL = pwm_pingjun;
lds R2,_pwm_pingjun
sts 120,R2
.dbline 479
; OCR0=0;
clr R2
out 0x31,R2
.dbline 480
; PWM_ON
in R24,0x17
ori R24,240
out 0x17,R24
.dbline 481
; 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 482
; }/**/
xjmp L122
L121:
.dbline 483
; else PWM_OFF
in R24,0x17
andi R24,15
out 0x17,R24
L122:
L120:
.dbline 484
; n_sec=sec;
lds R10,_sec
.dbline 485
; }
L117:
L115:
.dbline 489
;
; //number(0,2,5,xx,1);
; //number(0,4,5,ADCjohu,1);
; if (!(PINE & PREVSONG))xx=0;
sbic 0x1,2
rjmp L123
X62:
.dbline 489
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
L123:
.dbline 490
; if (!(PINE & NEXTSONG))
sbic 0x1,3
rjmp L125
X63:
.dbline 491
; {
.dbline 493
; //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 494
; 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 495
; delay_ms(20);
ldi R16,20
ldi R17,0
xcall _delay_ms
.dbline 497
; //SEI();
; }
L125:
.dbline 498
; ms=0;
clr R2
clr R3
sts _ms+1,R3
sts _ms,R2
.dbline 499
; }
L107:
.dbline 500
; }
L103:
.dbline 427
xjmp L102
X64:
.dbline -2
L86:
.dbline 0 ; func end
adiw R28,1
ret
.dbsym l n 2 I
.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 + -