www.pudn.com > digital_duoji.rar > main.s
.module main.c .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c _ADCjohu:: .blkb 4 .area idata .word 0,0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e ADCjohu _ADCjohu L _ms:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e ms _ms I _xx:: .blkb 4 .area idata .word 0,0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e xx _xx L _adc:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e adc _adc I _lvbo:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e lvbo _lvbo c _lvbo_num:: .blkb 4 .area idata .word 0,0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e lvbo_num _lvbo_num L _pwm_pingjun:: .blkb 1 .area idata .byte 100 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e pwm_pingjun _pwm_pingjun c _Rpwm0:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e Rpwm0 _Rpwm0 c _Rpwm1:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e Rpwm1 _Rpwm1 c _Lpwm0:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e Lpwm0 _Lpwm0 c _Lpwm1:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e Lpwm1 _Lpwm1 c _all:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e all _all c _a:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e a _a c _b:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e b _b c _c:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e c _c c _d:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e d _d c _e:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e e _e c _f:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e f _f c _jiaodu:: .blkb 4 .area idata .word 0,0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e jiaodu _jiaodu L _juli:: .blkb 4 .area idata .word 0,0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e juli _juli L _time:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e time _time I _sec:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbsym e sec _sec c .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbfunc e port_init _port_init fV .even _port_init:: .dbline -1 .dbline 43 ; ////////////////////////////// ; ////////////////////////////// 61493为近似180度 ; ; #include; #include ; ; #define PREVSONG BIT(2) ; #define NEXTSONG BIT(3) ; #define VOLDOWN BIT(4) ; #define VOLUP BIT(5) ; #define STOP BIT(6) ; ; #define R_pwm0 BIT(4) ; #define R_pwm1 BIT(5) ; #define L_pwm0 BIT(6) ; #define L_pwm1 BIT(7) ; ; ; long ADCjohu=0; ; int ms=0; ; long xx=0; ; int adc=0; ; ; #define REF 483 ; unsigned char lvbo=0; ; long lvbo_num=0; ; ; unsigned char pwm_pingjun=100;//平均速度 ; unsigned char Rpwm0=0; ; unsigned char Rpwm1=0; ; unsigned char Lpwm0=0; ; unsigned char Lpwm1=0; ; unsigned char all=0, a=0,b=0,c=0,d=0,e=0,f=0; ; #define CIR 1 ; #define LINE 2 ; long jiaodu=0,juli=0; ; int time=0; ; unsigned char sec=0; ; ; ; ; void port_init(void) ; { .dbline 44 ; PORTA = 0x00; clr R2 out 0x1b,R2 .dbline 45 ; DDRA = 0x00; out 0x1a,R2 .dbline 46 ; PORTB = 0x00; out 0x18,R2 .dbline 47 ; DDRB = 0x00; out 0x17,R2 .dbline 48 ; PORTC = 0x00; //m103 output only out 0x15,R2 .dbline 49 ; DDRC = 0x00; out 0x14,R2 .dbline 50 ; PORTD = 0x00; out 0x12,R2 .dbline 51 ; DDRD = 0x00; out 0x11,R2 .dbline 52 ; PORTE = 0x00; out 0x3,R2 .dbline 53 ; DDRE = 0x00; out 0x2,R2 .dbline 54 ; PORTF = 0x00; sts 98,R2 .dbline 55 ; DDRF = 0x00; sts 97,R2 .dbline 56 ; PORTG = 0x00; sts 101,R2 .dbline 57 ; DDRG = 0x00; sts 100,R2 .dbline -2 L1: .dbline 0 ; func end ret .dbend .dbfunc e timer2_init _timer2_init fV .even _timer2_init:: .dbline -1 .dbline 65 ; } ; ; //TIMER2 initialize - prescale:64 ; // WGM: Normal ; // desired value: 1mSec ; // actual value: 1.000mSec (0.0%) ; void timer2_init(void) ; { .dbline 66 ; TCCR2 = 0x00; //stop clr R2 out 0x25,R2 .dbline 67 ; TCNT2 = 0x83; //setup ldi R24,131 out 0x24,R24 .dbline 68 ; OCR2 = 0x7D; ldi R24,125 out 0x23,R24 .dbline 69 ; TCCR2 = 0x03; //start ldi R24,3 out 0x25,R24 .dbline -2 L2: .dbline 0 ; func end ret .dbend .area vector(rom, abs) .org 40 jmp _timer0_ovf_isr .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV .even _timer0_ovf_isr:: st -y,R0 st -y,R1 st -y,R2 st -y,R3 st -y,R4 st -y,R5 st -y,R6 st -y,R7 st -y,R8 st -y,R9 st -y,R16 st -y,R17 st -y,R18 st -y,R19 st -y,R24 st -y,R25 in R0,0x3f st -y,R0 xcall push_xgsetF00C .dbline -1 .dbline 75 ; } ; ; ; #pragma interrupt_handler timer0_ovf_isr:11 ; void timer0_ovf_isr(void) ; { .dbline 76 ; TCNT0 = 0x83; //reload counter value ldi R24,131 out 0x32,R24 .dbline 77 ; if (time>500){sec++;time=0;} ldi R24,500 ldi R25,1 lds R2,_time lds R3,_time+1 cp R24,R2 cpc R25,R3 brge L4 X0: .dbline 77 .dbline 77 lds R24,_sec subi R24,255 ; addi 1 sts _sec,R24 .dbline 77 clr R2 clr R3 sts _time+1,R3 sts _time,R2 .dbline 77 L4: .dbline 78 ; time++; lds R24,_time lds R25,_time+1 adiw R24,1 sts _time+1,R25 sts _time,R24 .dbline 79 ; ADCjohu=ADCL; in R2,0x4 clr R3 clr R4 clr R5 sts _ADCjohu+1,R3 sts _ADCjohu,R2 sts _ADCjohu+2+1,R5 sts _ADCjohu+2,R4 .dbline 80 ; ADCjohu|=ADCH << 8; in R2,0x5 clr R3 mov R3,R2 clr R2 clr R4 sbrc R3,7 com R4 clr R5 sbrc R4,7 com R5 lds R8,_ADCjohu+2 lds R9,_ADCjohu+2+1 lds R6,_ADCjohu lds R7,_ADCjohu+1 or R6,R2 or R7,R3 or R8,R4 or R9,R5 sts _ADCjohu+1,R7 sts _ADCjohu,R6 sts _ADCjohu+2+1,R9 sts _ADCjohu+2,R8 .dbline 82 ; ///////////////////////////////////////////////////////////////////平均值滤波 1毫秒采样滤波,10毫秒输出 ; if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;} lds R2,_lvbo tst R2 brne L6 X1: .dbline 82 .dbline 82 ldi R20,2 ldi R21,0 ldi R22,0 ldi R23,0 movw R16,R6 movw R18,R8 st -y,R23 st -y,R22 st -y,R21 st -y,R20 xcall div32s sts _lvbo_num+1,R17 sts _lvbo_num,R16 sts _lvbo_num+2+1,R19 sts _lvbo_num+2,R18 .dbline 82 lds R24,_lvbo subi R24,255 ; addi 1 sts _lvbo,R24 .dbline 82 xjmp L3 L6: .dbline 83 ; if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;} lds R24,_lvbo cpi R24,10 brsh L8 X2: .dbline 83 .dbline 83 ldi R20,2 ldi R21,0 ldi R22,0 ldi R23,0 lds R18,_ADCjohu+2 lds R19,_ADCjohu+2+1 lds R16,_ADCjohu lds R17,_ADCjohu+1 st -y,R23 st -y,R22 st -y,R21 st -y,R20 xcall div32s lds R4,_lvbo_num+2 lds R5,_lvbo_num+2+1 lds R2,_lvbo_num lds R3,_lvbo_num+1 add R2,R16 adc R3,R17 adc R4,R18 adc R5,R19 sts _lvbo_num+1,R3 sts _lvbo_num,R2 sts _lvbo_num+2+1,R5 sts _lvbo_num+2,R4 .dbline 83 lds R24,_lvbo subi R24,255 ; addi 1 sts _lvbo,R24 .dbline 83 xjmp L3 L8: .dbline 84 ; else lvbo=0;/**/ clr R2 sts _lvbo,R2 .dbline 86 ; ////////////////////////////////////////////////////////////////////////////// ; if ( (ADCjohu REF+6)) ldi R20,221 ldi R21,1 ldi R22,0 ldi R23,0 lds R4,_ADCjohu+2 lds R5,_ADCjohu+2+1 lds R2,_ADCjohu lds R3,_ADCjohu+1 cp R2,R20 cpc R3,R21 cpc R4,R22 cpc R5,R23 brlt L12 X3: ldi R20,233 ldi R21,1 ldi R22,0 ldi R23,0 cp R20,R2 cpc R21,R3 cpc R22,R4 cpc R23,R5 brge L10 X4: L12: .dbline 87 ; { .dbline 89 ; //ADCjohu-=511-10;//-511+31-3.27371 -10 ; xx=xx+ADCjohu-REF;// lds R4,_ADCjohu+2 lds R5,_ADCjohu+2+1 lds R2,_ADCjohu lds R3,_ADCjohu+1 lds R8,_xx+2 lds R9,_xx+2+1 lds R6,_xx lds R7,_xx+1 add R6,R2 adc R7,R3 adc R8,R4 adc R9,R5 ldi R20,227 ldi R21,1 ldi R22,0 ldi R23,0 sub R6,R20 sbc R7,R21 sbc R8,R22 sbc R9,R23 sts _xx+1,R7 sts _xx,R6 sts _xx+2+1,R9 sts _xx+2,R8 .dbline 90 ; } L10: .dbline 91 ; ms=1; ldi R24,1 ldi R25,0 sts _ms+1,R25 sts _ms,R24 .dbline -2 L3: .dbline 0 ; func end xcall pop_xgsetF00C ld R0,y+ out 0x3f,R0 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 R7,y+ ld R6,y+ ld R5,y+ ld R4,y+ ld R3,y+ ld R2,y+ ld R1,y+ ld R0,y+ reti .dbend .dbfunc e adc_init _adc_init fV .even _adc_init:: .dbline -1 .dbline 99 ; //ADCjohu==ADCL; ; //PORTD=ADCjohu; ; } ; ; //ADC initialize ; // Conversion time: 3uS ; void adc_init(void) ; { .dbline 100 ; ADCSRA = 0x00; //disable adc clr R2 out 0x6,R2 .dbline 101 ; ADMUX = 0x01; //select adc input 0 ldi R24,1 out 0x7,R24 .dbline 102 ; ACSR = 0x80; ldi R24,128 out 0x8,R24 .dbline 104 ; // ADCSRB = 0x00; ; ADCSRA = 0xEf; ldi R24,239 out 0x6,R24 .dbline -2 L13: .dbline 0 ; func end ret .dbend .area vector(rom, abs) .org 84 jmp _adc_isr .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbfunc e adc_isr _adc_isr fV .even _adc_isr:: st -y,R2 in R2,0x3f st -y,R2 .dbline -1 .dbline 109 ; } ; ; #pragma interrupt_handler adc_isr:22 ; void adc_isr(void) ; { .dbline 117 ; //conversion complete, read value (int) using... ; // value=ADCL; //Read 8 low bits first (important) ; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte ; //ADCjohu==ADCL; ; //ADCjohu|=(int)ADCH << 8; ; //PORTD=ADCjohu; ; //adc=1; ; PORTA=ADCL; in R2,0x4 out 0x1b,R2 .dbline -2 L14: .dbline 0 ; func end ld R2,y+ out 0x3f,R2 ld R2,y+ reti .dbend .dbfunc e init_devices _init_devices fV .even _init_devices:: .dbline -1 .dbline 123 ; ; } ; ; //call this routine to initialize all peripherals ; void init_devices(void) ; { .dbline 125 ; //stop errant interrupts until set up ; CLI(); //disable all interrupts cli .dbline 126 ; XDIV = 0x00; //xtal divider clr R2 out 0x3c,R2 .dbline 127 ; XMCRA = 0x00; //external memory sts 109,R2 .dbline 128 ; port_init(); xcall _port_init .dbline 129 ; timer2_init(); xcall _timer2_init .dbline 131 ; ; adc_init();uart1_init(); xcall _adc_init .dbline 131 xcall _uart1_init .dbline 133 ; ; MCUCR = 0x00; clr R2 out 0x35,R2 .dbline 134 ; EICRA = 0x00; //extended ext ints sts 106,R2 .dbline 135 ; EICRB = 0x00; //extended ext ints out 0x3a,R2 .dbline 136 ; EIMSK = 0x00; out 0x39,R2 .dbline 137 ; TIMSK = 0x40; //timer interrupt sources ldi R24,64 out 0x37,R24 .dbline 138 ; ETIMSK = 0x00; //extended timer interrupt sources sts 125,R2 .dbline 139 ; SEI(); //re-enable interrupts sei .dbline -2 L15: .dbline 0 ; func end ret .dbend .dbfunc e uart1_init _uart1_init fV .even _uart1_init:: .dbline -1 .dbline 146 ; //all peripherals are now initialized ; } ; //UART1 initialize ; // desired baud rate:9600 ; // actual baud rate:9615 (0.2%) ; void uart1_init(void) ; { .dbline 147 ; UCSR1B = 0x00; //disable while setting baud rate clr R2 sts 154,R2 .dbline 148 ; UCSR1A = 0x00; sts 155,R2 .dbline 149 ; UCSR1C = 0x06; ldi R24,6 sts 157,R24 .dbline 150 ; UBRR1L = 0x33; //set baud rate lo ldi R24,51 sts 153,R24 .dbline 151 ; UBRR1H = 0x00; //set baud rate hi sts 152,R2 .dbline 152 ; UCSR1B = 0x98; ldi R24,152 sts 154,R24 .dbline -2 L16: .dbline 0 ; func end ret .dbend .area vector(rom, abs) .org 120 jmp _uart1_rx_isr .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c .dbfunc e uart1_rx_isr _uart1_rx_isr fV .even _uart1_rx_isr:: st -y,R0 st -y,R1 st -y,R2 st -y,R3 st -y,R4 st -y,R5 st -y,R16 st -y,R17 st -y,R18 st -y,R19 st -y,R24 st -y,R25 st -y,R30 st -y,R31 in R0,0x3f st -y,R0 .dbline -1 .dbline 158 ; } ; ; #pragma interrupt_handler uart1_rx_isr:31 ; //cir+00100 ; void uart1_rx_isr(void) ; { .dbline 160 ; //uart has received a character in UDR ; if (all==CIR) lds R24,_all cpi R24,1 breq X25 xjmp L18 X25: X5: .dbline 161 ; { .dbline 162 ; a=b; lds R2,_b sts _a,R2 .dbline 163 ; b=c; lds R2,_c sts _b,R2 .dbline 164 ; c=d; lds R2,_d sts _c,R2 .dbline 165 ; d=e; lds R2,_e sts _d,R2 .dbline 166 ; e=f; lds R2,_f sts _e,R2 .dbline 167 ; f=UDR1; lds R2,156 sts _f,R2 .dbline 168 ; if ((f<'0')||(f>'9'))return; mov R24,R2 cpi R24,48 brlo L22 X6: ldi R24,57 cp R24,R2 brsh L20 X7: L22: .dbline 168 xjmp L17 L20: .dbline 169 ; if (a=='+')//0x2b lds R24,_a cpi R24,43 breq X26 xjmp L23 X26: X8: .dbline 170 ; {jiaodu=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48); .dbline 170 lds R18,_c clr R19 ldi R16,1000 ldi R17,3 xcall empy16s movw R24,R16 subi R24,128 sbci R25,187 lds R18,_b clr R19 ldi R16,10000 ldi R17,39 xcall empy16s movw R30,R16 subi R30,0 sbci R31,83 add R30,R24 adc R31,R25 lds R2,_d ldi R24,100 mul R24,R2 movw R24,R0 subi R24,192 sbci R25,18 add R30,R24 adc R31,R25 lds R2,_e ldi R24,10 mul R24,R2 movw R24,R0 subi R24,224 sbci R25,1 add R30,R24 adc R31,R25 lds R24,_f clr R25 sbiw R24,48 add R30,R24 adc R31,R25 movw R2,R30 clr R4 sbrc R3,7 com R4 clr R5 sbrc R4,7 com R5 sts _jiaodu+1,R3 sts _jiaodu,R2 sts _jiaodu+2+1,R5 sts _jiaodu+2,R4 .dbline 171 ; all=0;return;} clr R2 sts _all,R2 .dbline 171 xjmp L17 L23: .dbline 172 ; else if (a=='-')//0x2d lds R24,_a cpi R24,45 breq X27 xjmp L25 X27: X9: .dbline 173 ; {jiaodu=-((b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48)); .dbline 173 lds R18,_c clr R19 ldi R16,1000 ldi R17,3 xcall empy16s movw R24,R16 subi R24,128 sbci R25,187 lds R18,_b clr R19 ldi R16,10000 ldi R17,39 xcall empy16s movw R30,R16 subi R30,0 sbci R31,83 add R30,R24 adc R31,R25 lds R2,_d ldi R24,100 mul R24,R2 movw R24,R0 subi R24,192 sbci R25,18 add R30,R24 adc R31,R25 lds R2,_e ldi R24,10 mul R24,R2 movw R24,R0 subi R24,224 sbci R25,1 add R30,R24 adc R31,R25 lds R24,_f clr R25 sbiw R24,48 add R30,R24 adc R31,R25 movw R24,R30 com R24 com R25 subi R24,0xFF sbci R25,0xFF movw R2,R24 clr R4 sbrc R3,7 com R4 clr R5 sbrc R4,7 com R5 sts _jiaodu+1,R3 sts _jiaodu,R2 sts _jiaodu+2+1,R5 sts _jiaodu+2,R4 .dbline 174 ; all=0;return;} clr R2 sts _all,R2 .dbline 174 xjmp L17 L25: .dbline 175 ; if (a!=0) {all=0;return;} lds R2,_a tst R2 brne X28 xjmp L19 X28: X10: .dbline 175 .dbline 175 clr R2 sts _all,R2 .dbline 175 xjmp L17 L18: .dbline 178 ; //PORTF=jiaodu;//while(1); ; } ; else if (all==LINE) lds R24,_all cpi R24,2 breq X29 xjmp L29 X29: X11: .dbline 179 ; { .dbline 180 ; a=b; lds R2,_b sts _a,R2 .dbline 181 ; b=c; lds R2,_c sts _b,R2 .dbline 182 ; c=d; lds R2,_d sts _c,R2 .dbline 183 ; d=e; lds R2,_e sts _d,R2 .dbline 184 ; e=f; lds R2,_f sts _e,R2 .dbline 185 ; f=UDR1; lds R2,156 sts _f,R2 .dbline 186 ; if ((f<'0')||(f>'9'))return; mov R24,R2 cpi R24,48 brlo L33 X12: ldi R24,57 cp R24,R2 brsh L31 X13: L33: .dbline 186 xjmp L17 L31: .dbline 187 ; if (a=='+') lds R24,_a cpi R24,43 breq X30 xjmp L34 X30: X14: .dbline 188 ; {juli=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48); .dbline 188 lds R18,_c clr R19 ldi R16,1000 ldi R17,3 xcall empy16s movw R24,R16 subi R24,128 sbci R25,187 lds R18,_b clr R19 ldi R16,10000 ldi R17,39 xcall empy16s movw R30,R16 subi R30,0 sbci R31,83 add R30,R24 adc R31,R25 lds R2,_d ldi R24,100 mul R24,R2 movw R24,R0 subi R24,192 sbci R25,18 add R30,R24 adc R31,R25 lds R2,_e ldi R24,10 mul R24,R2 movw R24,R0 subi R24,224 sbci R25,1 add R30,R24 adc R31,R25 lds R24,_f clr R25 sbiw R24,48 add R30,R24 adc R31,R25 movw R2,R30 clr R4 sbrc R3,7 com R4 clr R5 sbrc R4,7 com R5 sts _juli+1,R3 sts _juli,R2 sts _juli+2+1,R5 sts _juli+2,R4 .dbline 189 ; all=0;return;} clr R2 sts _all,R2 .dbline 189 xjmp L17 L34: .dbline 190 ; else if (a=='-') lds R24,_a cpi R24,45 breq X31 xjmp L36 X31: X15: .dbline 191 ; {juli=-((b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48)); .dbline 191 lds R18,_c clr R19 ldi R16,1000 ldi R17,3 xcall empy16s movw R24,R16 subi R24,128 sbci R25,187 lds R18,_b clr R19 ldi R16,10000 ldi R17,39 xcall empy16s movw R30,R16 subi R30,0 sbci R31,83 add R30,R24 adc R31,R25 lds R2,_d ldi R24,100 mul R24,R2 movw R24,R0 subi R24,192 sbci R25,18 add R30,R24 adc R31,R25 lds R2,_e ldi R24,10 mul R24,R2 movw R24,R0 subi R24,224 sbci R25,1 add R30,R24 adc R31,R25 lds R24,_f clr R25 sbiw R24,48 add R30,R24 adc R31,R25 movw R24,R30 com R24 com R25 subi R24,0xFF sbci R25,0xFF movw R2,R24 clr R4 sbrc R3,7 com R4 clr R5 sbrc R4,7 com R5 sts _juli+1,R3 sts _juli,R2 sts _juli+2+1,R5 sts _juli+2,R4 .dbline 192 ; all=0;return;} clr R2 sts _all,R2 .dbline 192 xjmp L17 L36: .dbline 193 ; if (a!=0) {all=0;return;} lds R2,_a tst R2 brne X32 xjmp L30 X32: X16: .dbline 193 .dbline 193 clr R2 sts _all,R2 .dbline 193 xjmp L17 L29: .dbline 196 ; //PORTF=a; ; } ; else if (all==0)//(johu!=3)&&(johu!=5) //5:7-bit 3:8-bit lds R2,_all tst R2 breq X33 xjmp L40 X33: X17: .dbline 197 ; { .dbline 198 ; a=b; lds R2,_b sts _a,R2 .dbline 199 ; b=c; lds R2,_c sts _b,R2 .dbline 200 ; c=d; lds R2,_d sts _c,R2 .dbline 201 ; d=UDR1; lds R2,156 sts _d,R2 .dbline 202 ; if ((a=='c')&&(b=='i')&&(c=='r')) lds R24,_a cpi R24,99 brne L42 X18: lds R24,_b cpi R24,105 brne L42 X19: lds R24,_c cpi R24,114 brne L42 X20: .dbline 203 ; { .dbline 204 ; all=CIR; ldi R24,1 sts _all,R24 .dbline 205 ; a=0;b=0;c=0;d=0;e=0;f=0; clr R2 sts _a,R2 .dbline 205 sts _b,R2 .dbline 205 sts _c,R2 .dbline 205 sts _d,R2 .dbline 205 sts _e,R2 .dbline 205 sts _f,R2 .dbline 206 ; return; }//RXlen=4;{johu=3;RXlen=3;return;} xjmp L17 L42: .dbline 207 ; else if ((a=='l')&&(b=='i')&&(c=='n')&&(d=='e')) lds R24,_a cpi R24,108 brne L44 X21: lds R24,_b cpi R24,105 brne L44 X22: lds R24,_c cpi R24,110 brne L44 X23: lds R24,_d cpi R24,101 brne L44 X24: .dbline 208 ; { .dbline 209 ; all=LINE; ldi R24,2 sts _all,R24 .dbline 210 ; a=0;b=0;c=0;d=0;e=0;f=0; clr R2 sts _a,R2 .dbline 210 sts _b,R2 .dbline 210 sts _c,R2 .dbline 210 sts _d,R2 .dbline 210 sts _e,R2 .dbline 210 sts _f,R2 .dbline 211 ; return; }//RXlen=4;{johu=5;RXlen=3;return;} L44: .dbline 213 ; //////////////////////////////////////////////////////////////////// ; } L40: L30: L19: .dbline -2 L17: .dbline 0 ; func end ld R0,y+ out 0x3f,R0 ld R31,y+ ld R30,y+ ld R25,y+ ld R24,y+ ld R19,y+ ld R18,y+ ld R17,y+ ld R16,y+ ld R5,y+ ld R4,y+ ld R3,y+ ld R2,y+ ld R1,y+ ld R0,y+ reti .dbend .dbfunc e number_uart1 _number_uart1 fV ; n -> y+0 ; huanhang -> y+8 ; NUM -> y+4 .even _number_uart1:: xcall push_arg4 sbiw R28,4 .dbline -1 .dbline 233 ; } ; ; ; ; /*void number(unsigned char X,unsigned char Y,unsigned char LEN,int NUM,unsigned char BLACK) ; { ; char code[]={'0','1','2','3','4','5','6','7','8','9',}; ; if (NUM<0) ; {LCD_write_String1(X,Y,"-");NUM=-NUM;} ; else ; {LCD_write_String1(X,Y,"+");} ; X=X+6; ; while(LEN--) ; { ; LCD_write_String1(X+LEN*6,Y,& code[NUM%10]); ; NUM=NUM/10; ; } ; }*/ ; void number_uart1(long NUM,char huanhang) ; {long n=0; .dbline 233 ldi R24,0 ldi R25,0 ldi R26,0 ldi R27,0 std y+0,R24 std y+1,R25 std y+2,R26 std y+3,R27 .dbline 234 ; if (NUM<0){n=-NUM; while(!(UCSR1A&(1< ; 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< >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 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 ; ; }