📄 m64.lst
字号:
(0309) OCR1BL = 0x20;
(0310) OCR1CH = 0x4E;
(0311) OCR1CL = 0x20;
(0312) ICR1H = 0x4E;
(0313) ICR1L = 0x20;
(0314) TCCR1A = 0x01;
(0315) TCCR1B = 0x12; //start Timer
(0316) }*/
(0317) //TIMER1 initialize - prescale:64
(0318) // WGM: 7) PWM 10bit fast, TOP=0x03FF
(0319) // desired value: 40mSec
(0320) // actual value: 8.192mSec (79.5%)
(0321) void timer1_init(void)
(0322) {
(0323) TCCR1B = 0x00; //stop
_timer1_init:
4E9 2422 CLR R2
4EA BC2E OUT 0x2E,R2
(0324) TCNT1H = 0xFC; //setup
4EB EF8C LDI R24,0xFC
4EC BD8D OUT 0x2D,R24
(0325) TCNT1L = 0x01;
4ED E081 LDI R24,1
4EE BD8C OUT 0x2C,R24
(0326) OCR1AH = 0x03;
4EF E083 LDI R24,3
4F0 BD8B OUT 0x2B,R24
(0327) OCR1AL = 0xFF;
4F1 EF8F LDI R24,0xFF
4F2 BD8A OUT 0x2A,R24
(0328) OCR1BH = 0x03;
4F3 E083 LDI R24,3
4F4 BD89 OUT 0x29,R24
(0329) OCR1BL = 0xFF;
4F5 EF8F LDI R24,0xFF
4F6 BD88 OUT 0x28,R24
(0330) OCR1CH = 0x03;
4F7 E083 LDI R24,3
4F8 9380 0079 STS 0x0079,R24
(0331) OCR1CL = 0xFF;
4FA EF8F LDI R24,0xFF
4FB 9380 0078 STS 0x0078,R24
(0332) ICR1H = 0x03;
4FD E083 LDI R24,3
4FE BD87 OUT 0x27,R24
(0333) ICR1L = 0xFF;
4FF EF8F LDI R24,0xFF
500 BD86 OUT 0x26,R24
(0334) TCCR1A = 0x33;
501 E383 LDI R24,0x33
502 BD8F OUT 0x2F,R24
(0335) TCCR1B = 0x0B; //start Timer
503 E08B LDI R24,0xB
504 BD8E OUT 0x2E,R24
505 9508 RET
_main:
n --> Y,+2
n_juli --> R10
n_jiaodu --> R10
n_sec --> R10
pwm_duoji --> R10
506 9721 SBIW R28,1
(0336) }
(0337)
(0338)
(0339) #define PWM_ON DDRB|= R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1;
(0340) #define PWM_OFF DDRB&= ~(R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1);
(0341) main()
(0342) {int n;
(0343) unsigned char n_jiaodu=0,n_juli=0;
(0344) unsigned char n_sec=0;
(0345) unsigned int pwm_duoji=0;
(0346) init_devices();
507 DCAB RCALL _init_devices
(0347) timer1_init();timer0_init();
508 DFE0 RCALL _timer1_init
509 DFD5 RCALL _timer0_init
(0348) //OCR1AH = 0x00;
(0349) /* OCR1AL = 64;
(0350) //OCR1BH = 0x00;
(0351) OCR1BL = 64;
(0352) //OCR1CH = 0x00;
(0353) OCR1CL = 64;
(0354) OCR0=64;*/
(0355)
(0356)
(0357) //while(1);
(0358) DDRE|=0x38;//while(1);
50A B182 IN R24,0x02
50B 6388 ORI R24,0x38
50C B982 OUT 0x02,R24
(0359) /////////LCD
(0360) /* DDRB = 0xBF; //SI输入,SO,SCK,SS输出
(0361) SPCR = 0x50; //setup SPI
(0362) SPSR = 0x01; //setup SPI*/
(0363) /*while(!(UCSR0A&(1<<UDRE0)));
(0364) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0365) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0366) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0367) UDR0='a';*/
(0368) delay_ms(3000);
50D EB08 LDI R16,0xB8
50E E01B LDI R17,0xB
50F 940E 06EA CALL _delay_ms
(0369) number_uart1(1010,1);
511 E081 LDI R24,1
512 8388 STD Y+0,R24
513 EF02 LDI R16,0xF2
514 E013 LDI R17,3
515 E020 LDI R18,0
516 E030 LDI R19,0
517 DEB0 RCALL _number_uart1
(0370) number_uart1(xx,0);
518 2422 CLR R2
519 8228 STD Y+0,R2
51A 9120 0108 LDS R18,xx+2
51C 9130 0109 LDS R19,xx+3
51E 9100 0106 LDS R16,xx
520 9110 0107 LDS R17,xx+1
522 DEA5 RCALL _number_uart1
(0371) number_uart1(ADCjohu,1);
523 E081 LDI R24,1
524 8388 STD Y+0,R24
525 9120 0102 LDS R18,ADCjohu+2
527 9130 0103 LDS R19,ADCjohu+3
529 9100 0100 LDS R16,ADCjohu
52B 9110 0101 LDS R17,ADCjohu+1
52D DE9A RCALL _number_uart1
(0372) delay_ms(3000);
52E EB08 LDI R16,0xB8
52F E01B LDI R17,0xB
530 940E 06EA CALL _delay_ms
(0373) xx=0;
532 E040 LDI R20,0
533 E050 LDI R21,0
534 E060 LDI R22,0
535 E070 LDI R23,0
536 9350 0107 STS xx+1,R21
538 9340 0106 STS xx,R20
53A 9370 0109 STS xx+3,R23
53C 9360 0108 STS xx+2,R22
(0374) //LCD_Init();
(0375) //LCD_clear();
(0376)
(0377) DDRE &= ~0x7c;//if (!(PORTE & STOP)) if (!(PORTE & VOLDOWN)) if (!(PORTE & VOLUP)) if (!(PORTE & NEXTSONG)) if (!(PORTE & PREVSONG))
53E B182 IN R24,0x02
53F 7883 ANDI R24,0x83
540 B982 OUT 0x02,R24
(0378) PORTE |=0x7c;
541 B183 IN R24,0x03
542 678C ORI R24,0x7C
543 B983 OUT 0x03,R24
(0379)
(0380) PORTD=0x01;
544 E081 LDI R24,1
545 BB82 OUT 0x12,R24
(0381) //number(0,0,4,-999,1);
(0382) /* OCR1AL = pwm_pingjun;
(0383) OCR1BL = pwm_pingjun;
(0384) OCR1CL = pwm_pingjun;
(0385) OCR0=pwm_pingjun;*/
(0386) OCR1BH = 0;
546 2422 CLR R2
547 BC29 OUT 0x29,R2
(0387) OCR1BL = 0;
548 BC28 OUT 0x28,R2
(0388) pwm_duoji=177;
549 EB81 LDI R24,0xB1
54A E090 LDI R25,0
54B 015C MOVW R10,R24
54C C033 RJMP 0x0580
(0389) while(1)
(0390) {
(0391) if (!(PINE & NEXTSONG))
54D 990B SBIC 0x01,3
54E C017 RJMP 0x0566
(0392) {delay_ms(500);
54F EF04 LDI R16,0xF4
550 E011 LDI R17,1
551 940E 06EA CALL _delay_ms
(0393) if (!(PINE & NEXTSONG))
553 990B SBIC 0x01,3
554 C011 RJMP 0x0566
(0394) {
(0395) //CLI();
(0396) if(pwm_duoji<900) pwm_duoji++;//2.5ms
555 01C5 MOVW R24,R10
556 3884 CPI R24,0x84
557 E0E3 LDI R30,3
558 079E CPC R25,R30
559 F410 BCC 0x055C
55A 9601 ADIW R24,1
55B 015C MOVW R10,R24
(0397) OCR1BH = (pwm_duoji>>8)&0x07;
55C 01C5 MOVW R24,R10
55D 2F89 MOV R24,R25
55E 2799 CLR R25
55F 7087 ANDI R24,7
560 7090 ANDI R25,0
561 BD89 OUT 0x29,R24
(0398) OCR1BL = pwm_duoji;
562 BCA8 OUT 0x28,R10
(0399) /*OCR1BH = 0x03;
(0400) OCR1BL = 0xF0;
(0401) OCR1CH = 0x03;
(0402) OCR1CL = 0xF0;
(0403) */
(0404) PWM_ON
563 B387 IN R24,0x17
564 6F80 ORI R24,0xF0
565 BB87 OUT 0x17,R24
(0405) //SEI();
(0406) }
(0407) }
(0408) if (!(PINE & PREVSONG))
566 990A SBIC 0x01,2
567 C018 RJMP 0x0580
(0409) {delay_ms(500);
568 EF04 LDI R16,0xF4
569 E011 LDI R17,1
56A 940E 06EA CALL _delay_ms
(0410) if (!(PINE & PREVSONG))
56C 990A SBIC 0x01,2
56D C012 RJMP 0x0580
(0411) {
(0412) //CLI();
(0413) if(pwm_duoji>200) pwm_duoji--;//0.5ms
56E EC88 LDI R24,0xC8
56F E090 LDI R25,0
570 158A CP R24,R10
571 059B CPC R25,R11
572 F418 BCC 0x0576
573 01C5 MOVW R24,R10
574 9701 SBIW R24,1
575 015C MOVW R10,R24
(0414) OCR1BH = (pwm_duoji>>8)&0x07;
576 01C5 MOVW R24,R10
577 2F89 MOV R24,R25
578 2799 CLR R25
579 7087 ANDI R24,7
57A 7090 ANDI R25,0
57B BD89 OUT 0x29,R24
(0415) OCR1BL = pwm_duoji;
57C BCA8 OUT 0x28,R10
(0416) /*OCR1BH = 0x03;
(0417) OCR1BL = 0xF0;
(0418) OCR1CH = 0x03;
(0419) OCR1CL = 0xF0;
(0420) */
(0421) PWM_ON
57D B387 IN R24,0x17
57E 6F80 ORI R24,0xF0
57F BB87 OUT 0x17,R24
580 CFCC RJMP 0x054D
(0422) //SEI();
(0423) }
(0424) }
(0425)
(0426) }
(0427) while(1)
(0428) { //(unsigned char)jiaodu;
(0429) PORTF=juli;
581 9020 0121 LDS R2,juli
583 9030 0122 LDS R3,juli+1
585 9220 0062 STS 0x0062,R2
(0430) if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
587 990E SBIC 0x01,6
588 C00C RJMP 0x0595
589 E644 LDI R20,0x64
58A E050 LDI R21,0
58B E060 LDI R22,0
58C E070 LDI R23,0
58D 9350 011E STS jiaodu+1,R21
58F 9340 011D STS jiaodu,R20
591 9370 0120 STS jiaodu+3,R23
593 9360 011F STS jiaodu+2,R22
(0431) if (ms==1)
595 9180 0104 LDS R24,ms
597 9190 0105 LDS R25,ms+1
599 3081 CPI R24,1
59A E0A0 LDI R26,0
59B 079A CPC R25,R26
59C F009 BEQ 0x059E
59D C137 RJMP 0x06D5
(0432) { //if (jiaodu!=n_jiaodu)//test
(0433) if (jiaodu!=0)
59E 9040 011F LDS R4,jiaodu+2
5A0 9050 0120 LDS R5,jiaodu+3
5A2 9020 011D LDS R2,jiaodu
5A4 9030 011E LDS R3,jiaodu+1
5A6 9488 BCLR 0
5A7 2022 TST R2
5A8 0432 CPC R3,R2
5A9 0442 CPC R4,R2
5AA 0452 CPC R5,R2
5AB F409 BNE 0x05AD
5AC C060 RJMP 0x060D
(0434) {//PORTF=jiaodu;
(0435) //if (jiaodu<0-20)//test 旋转
(0436) if (ADCjohu<jiaodu-20)
5AD E144 LDI R20,0x14
5AE E050 LDI R21,0
5AF E060 LDI R22,0
5B0 E070 LDI R23,0
5B1 1A24 SUB R2,R20
5B2 0A35 SBC R3,R21
5B3 0A46 SBC R4,R22
5B4 0A57 SBC R5,R23
5B5 9080 0102 LDS R8,ADCjohu+2
5B7 9090 0103 LDS R9,ADCjohu+3
5B9 9060 0100 LDS R6,ADCjohu
5BB 9070 0101 LDS R7,ADCjohu+1
5BD 1462 CP R6,R2
5BE 0473 CPC R7,R3
5BF 0484 CPC R8,R4
5C0 0495 CPC R9,R5
5C1 F4AC BGE 0x05D7
(0437) {DDRB |=(R_pwm1 | L_pwm0);
5C2 B387 IN R24,0x17
5C3 6680 ORI R24,0x60
5C4 BB87 OUT 0x17,R24
(0438) DDRB &=~(R_pwm1 | L_pwm0);
5C5 B387 IN R24,0x17
5C6 798F ANDI R24,0x9F
5C7 BB87 OUT 0x17,R24
(0439) PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
5C8 B388 IN R24,0x18
5C9 708F ANDI R24,0xF
5CA BB88 OUT 0x18,R24
(0440) OCR1AL = pwm_pingjun;
5CB 9020 0111 LDS R2,pwm_pingjun
5CD BC2A OUT 0x2A,R2
(0441) OCR1BL = pwm_pingjun;
5CE BC28 OUT 0x28,R2
(0442) OCR1CL = 0;
5CF 2422 CLR R2
5D0 9220 0078 STS 0x0078,R2
(0443) OCR0=0;
5D2 BE21 OUT 0x31,R2
(0444) PWM_ON
5D3 B387 IN R24,0x17
5D4 6F80 ORI R24,0xF0
5D5 BB87 OUT 0x17,R24
(0445) }
5D6 C034 RJMP 0x060B
(0446) //else if (jiaodu>0+20)//test
(0447) else if (ADCjohu>jiaodu+20)
5D7 E144 LDI R20,0x14
5D8 E050 LDI R21,0
5D9 E060 LDI R22,0
5DA E070 LDI R23,0
5DB 9040 011F LDS R4,jiaodu+2
5DD 9050 0120 LDS R5,jiaodu+3
5DF 9020 011D LDS R2,jiaodu
5E1 9030 011E LDS R3,jiaodu+1
5E3 0E24 ADD R2,R20
5E4 1E35 ADC R3,R21
5E5 1E46 ADC R4,R22
5E6 1E57 ADC R5,R23
5E7 9080 0102 LDS R8,ADCjohu+2
5E9 9090 0103 LDS R9,ADCjohu+3
5EB 9060 0100 LDS R6,ADCjohu
5ED 9070 0101 LDS R7,ADCjohu+1
5EF 1426 CP R2,R6
5F0 0437 CPC R3,R7
5F1 0448 CPC R4,R8
5F2 0459 CPC R5,R9
5F3 F4A4 BGE 0x0608
(0448) {DDRB |=(R_pwm0 | L_pwm1);
5F4 B387 IN R24,0x17
5F5 6980 ORI R24,0x90
5F6 BB87 OUT 0x17,R24
(0449) DDRB &=~(R_pwm0 | L_pwm1);
5F7 B387 IN R24,0x17
5F8 768F ANDI R24,0x6F
5F9 BB87 OUT 0x17,R24
(0450) PORTB =0xf0;
5FA EF80 LDI R24,0xF0
5FB BB88 OUT 0x18,R24
(0451) OCR1AL = 0;
5FC 2422 CLR R2
5FD BC2A OUT 0x2A,R2
(0452) OCR1BL = 0;
5FE BC28 OUT 0x28,R2
(0453) OCR1CL = pwm_pingjun;
5FF 9020 0111 LDS R2,pwm_pingjun
601 9220 0078 STS 0x0078,R2
(0454) OCR0=pwm_pingjun;
603 BE21 OUT 0x31,R2
(0455) PWM_ON
604 B387 IN R24,0x17
605 6F80 ORI R24,0xF0
606 BB87 OUT 0x17,R24
(0456) }
607 C003 RJMP 0x060B
(0457) else PWM_OFF
608 B387 IN R24,0x17
609 708F ANDI R24,0xF
60A BB87 OUT 0x17,R24
(0458) n_jiaodu=jiaodu;
60B 90A0 011D LDS R10,jiaodu
(0459) }
(0460) if (juli!=0)
60D 9040 0123 LDS R4,juli+2
60F 9050 0124 LDS R5,juli+3
611 9020 0121 LDS R2,juli
613 9030 0122 LDS R3,juli+1
615 9488 BCLR 0
616 2022 TST R2
617 0432 CPC R3,R2
618 0442 CPC R4,R2
619 0452 CPC R5,R2
61A F409 BNE 0x061C
61B C089 RJMP 0x06A5
(0461) if (sec!=n_sec)
61C 9020 0127 LDS R2,sec
61E 142A CP R2,R10
61F F409 BNE 0x0621
620 C084 RJMP 0x06A5
(0462) {
(0463) if (juli>0)
621 E040 LDI R20,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -