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\buhuo\main.c .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\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\buhuo\main.c .dbsym e sec _sec c _temp1:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c .dbsym e temp1 _temp1 i _temp2:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c .dbsym e temp2 _temp2 i _count1:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c .dbsym e count1 _count1 c _shang_johu:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c .dbsym e shang_johu _shang_johu c .area text(rom, con, rel) .dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c .dbfunc e port_init _port_init fV .even _port_init:: .dbline -1 .dbline 47 ; ////////////////////////////// ; ////////////////////////////// 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; ; ; unsigned int temp1=0, temp2=0; ; unsigned char count1=0;//0表示一个捕获周期完成,1:准备捕获,2:第一次捕获,3:第二次捕获 ; ; unsigned char shang_johu=0;// ; ; ; void port_init(void) ; { .dbline 48 ; PORTA = 0x00; clr R2 out 0x1b,R2 .dbline 49 ; DDRA = 0x00; out 0x1a,R2 .dbline 50 ; PORTB = 0x00; out 0x18,R2 .dbline 51 ; DDRB = 0x00; out 0x17,R2 .dbline 52 ; PORTC = 0x00; //m103 output only out 0x15,R2 .dbline 53 ; DDRC = 0x00; out 0x14,R2 .dbline 54 ; PORTD = 0x00; out 0x12,R2 .dbline 55 ; DDRD = 0x00; out 0x11,R2 .dbline 56 ; PORTE = 0x00; out 0x3,R2 .dbline 57 ; DDRE = 0x00; out 0x2,R2 .dbline 58 ; PORTF = 0x00; sts 98,R2 .dbline 59 ; DDRF = 0x00; sts 97,R2 .dbline 60 ; PORTG = 0x00; sts 101,R2 .dbline 61 ; 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 69 ; } ; ; //TIMER2 initialize - prescale:64 ; // WGM: Normal ; // desired value: 1mSec ; // actual value: 1.000mSec (0.0%) ; void timer2_init(void) ; { .dbline 70 ; TCCR2 = 0x00; //stop clr R2 out 0x25,R2 .dbline 71 ; TCNT2 = 0x83; //setup ldi R24,131 out 0x24,R24 .dbline 72 ; OCR2 = 0x7D; ldi R24,125 out 0x23,R24 .dbline 73 ; 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\buhuo\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 79 ; } ; ; ; #pragma interrupt_handler timer0_ovf_isr:11 ; void timer0_ovf_isr(void) ; { .dbline 80 ; TCNT0 = 0x83; //reload counter value ldi R24,131 out 0x32,R24 .dbline 81 ; 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 81 .dbline 81 lds R24,_sec subi R24,255 ; addi 1 sts _sec,R24 .dbline 81 clr R2 clr R3 sts _time+1,R3 sts _time,R2 .dbline 81 L4: .dbline 82 ; time++; lds R24,_time lds R25,_time+1 adiw R24,1 sts _time+1,R25 sts _time,R24 .dbline 83 ; 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 84 ; 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 86 ; ///////////////////////////////////////////////////////////////////平均值滤波 1毫秒采样滤波,10毫秒输出 ; if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;} lds R2,_lvbo tst R2 brne L6 X1: .dbline 86 .dbline 86 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 86 lds R24,_lvbo subi R24,255 ; addi 1 sts _lvbo,R24 .dbline 86 xjmp L3 L6: .dbline 87 ; if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;} lds R24,_lvbo cpi R24,10 brsh L8 X2: .dbline 87 .dbline 87 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 87 lds R24,_lvbo subi R24,255 ; addi 1 sts _lvbo,R24 .dbline 87 xjmp L3 L8: .dbline 88 ; else lvbo=0;/**/ clr R2 sts _lvbo,R2 .dbline 90 ; ////////////////////////////////////////////////////////////////////////////// ; 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 91 ; { .dbline 93 ; //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 94 ; } L10: .dbline 95 ; 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 103 ; //ADCjohu==ADCL; ; //PORTD=ADCjohu; ; } ; ; //ADC initialize ; // Conversion time: 3uS ; void adc_init(void) ; { .dbline 104 ; ADCSRA = 0x00; //disable adc clr R2 out 0x6,R2 .dbline 105 ; ADMUX = 0x01; //select adc input 0 ldi R24,1 out 0x7,R24 .dbline 106 ; ACSR = 0x80; ldi R24,128 out 0x8,R24 .dbline 108 ; // 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\buhuo\main.c .dbfunc e adc_isr _adc_isr fV .even _adc_isr:: st -y,R2 in R2,0x3f st -y,R2 .dbline -1 .dbline 113 ; } ; ; #pragma interrupt_handler adc_isr:22 ; void adc_isr(void) ; { .dbline 121 ; //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 127 ; ; } ; ; //call this routine to initialize all peripherals ; void init_devices(void) ; { .dbline 129 ; //stop errant interrupts until set up ; CLI(); //disable all interrupts cli .dbline 130 ; XDIV = 0x00; //xtal divider clr R2 out 0x3c,R2 .dbline 131 ; XMCRA = 0x00; //external memory sts 109,R2 .dbline 132 ; port_init(); xcall _port_init .dbline 133 ; timer2_init(); xcall _timer2_init .dbline 135 ; ; adc_init();uart1_init(); xcall _adc_init .dbline 135 xcall _uart1_init .dbline 137 ; ; MCUCR = 0x00; clr R2 out 0x35,R2 .dbline 138 ; EICRA = 0x00; //extended ext ints sts 106,R2 .dbline 139 ; EICRB = 0x00; //extended ext ints out 0x3a,R2 .dbline 140 ; EIMSK = 0x00; out 0x39,R2 .dbline 141 ; TIMSK = 0x20; //timer interrupt sources ldi R24,32 out 0x37,R24 .dbline 142 ; ETIMSK = 0x00; //extended timer interrupt sources sts 125,R2 .dbline 143 ; 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 153 ; //all peripherals are now initialized ; } ; ; //UART1 initialize ; // desired baud rate:19200 ; // actual baud rate:19200 (0.0%) ; // char size: 8 bit ; // parity: Disabled ; void uart1_init(void) ; { .dbline 154 ; UCSR1B = 0x00; //disable while setting baud rate clr R2 sts 154,R2 .dbline 155 ; UCSR1A = 0x00; sts 155,R2 .dbline 156 ; UCSR1C = 0x06; ldi R24,6 sts 157,R24 .dbline 157 ; UBRR1L = 0x23; //set baud rate lo ldi R24,35 sts 153,R24 .dbline 158 ; UBRR1H = 0x00; //set baud rate hi sts 152,R2 .dbline 159 ; 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\buhuo\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 165 ; } ; ; #pragma interrupt_handler uart1_rx_isr:31 ; //cir+00100 ; void uart1_rx_isr(void) ; { .dbline 167 ; //uart has received a character in UDR ; if (all==CIR) lds R24,_all cpi R24,1 breq X25 xjmp L18 X25: X5: .dbline 168 ; { .dbline 169 ; a=b; lds R2,_b sts _a,R2 .dbline 170 ; b=c; lds R2,_c sts _b,R2 .dbline 171 ; c=d; lds R2,_d sts _c,R2 .dbline 172 ; d=e; lds R2,_e sts _d,R2 .dbline 173 ; e=f; lds R2,_f sts _e,R2 .dbline 174 ; f=UDR1; lds R2,156 sts _f,R2 .dbline 175 ; 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 175 xjmp L17 L20: .dbline 176 ; if (a=='+')//0x2b lds R24,_a cpi R24,43 breq X26 xjmp L23 X26: X8: .dbline 177 ; {jiaodu=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48); .dbline 177 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 178 ; all=0;return;} clr R2 sts _all,R2 .dbline 178 xjmp L17 L23: .dbline 179 ; else if (a=='-')//0x2d lds R24,_a cpi R24,45 breq X27 xjmp L25 X27: X9: .dbline 180 ; {jiaodu=-((b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48)); .dbline 180 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 181 ; all=0;return;} clr R2 sts _all,R2 .dbline 181 xjmp L17 L25: .dbline 182 ; if (a!=0) {all=0;return;} lds R2,_a tst R2 brne X28 xjmp L19 X28: X10: .dbline 182 .dbline 182 clr R2 sts _all,R2 .dbline 182 xjmp L17 L18: .dbline 185 ; //PORTF=jiaodu;//while(1); ; } ; else if (all==LINE) lds R24,_all cpi R24,2 breq X29 xjmp L29 X29: X11: .dbline 186 ; { .dbline 187 ; a=b; lds R2,_b sts _a,R2 .dbline 188 ; b=c; lds R2,_c sts _b,R2 .dbline 189 ; c=d; lds R2,_d sts _c,R2 .dbline 190 ; d=e; lds R2,_e sts _d,R2 .dbline 191 ; e=f; lds R2,_f sts _e,R2 .dbline 192 ; f=UDR1; lds R2,156 sts _f,R2 .dbline 193 ; 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 193 xjmp L17 L31: .dbline 194 ; if (a=='+') lds R24,_a cpi R24,43 breq X30 xjmp L34 X30: X14: .dbline 195 ; {juli=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48); .dbline 195 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 196 ; all=0;return;} clr R2 sts _all,R2 .dbline 196 xjmp L17 L34: .dbline 197 ; else if (a=='-') lds R24,_a cpi R24,45 breq X31 xjmp L36 X31: X15: .dbline 198 ; {juli=-((b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48)); .dbline 198 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 199 ; all=0;return;} clr R2 sts _all,R2 .dbline 199 xjmp L17 L36: .dbline 200 ; if (a!=0) {all=0;return;} lds R2,_a tst R2 brne X32 xjmp L30 X32: X16: .dbline 200 .dbline 200 clr R2 sts _all,R2 .dbline 200 xjmp L17 L29: .dbline 203 ; //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 204 ; { .dbline 205 ; a=b; lds R2,_b sts _a,R2 .dbline 206 ; b=c; lds R2,_c sts _b,R2 .dbline 207 ; c=d; lds R2,_d sts _c,R2 .dbline 208 ; d=UDR1; lds R2,156 sts _d,R2 .dbline 209 ; 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 210 ; { .dbline 211 ; all=CIR; ldi R24,1 sts _all,R24 .dbline 212 ; a=0;b=0;c=0;d=0;e=0;f=0; clr R2 sts _a,R2 .dbline 212 sts _b,R2 .dbline 212 sts _c,R2 .dbline 212 sts _d,R2 .dbline 212 sts _e,R2 .dbline 212 sts _f,R2 .dbline 213 ; return; }//RXlen=4;{johu=3;RXlen=3;return;} xjmp L17 L42: .dbline 214 ; 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 215 ; { .dbline 216 ; all=LINE; ldi R24,2 sts _all,R24 .dbline 217 ; a=0;b=0;c=0;d=0;e=0;f=0; clr R2 sts _a,R2 .dbline 217 sts _b,R2 .dbline 217 sts _c,R2 .dbline 217 sts _d,R2 .dbline 217 sts _e,R2 .dbline 217 sts _f,R2 .dbline 218 ; return; }//RXlen=4;{johu=5;RXlen=3;return;} L44: .dbline 220 ; //////////////////////////////////////////////////////////////////// ; } 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 240 ; } ; ; ; ; /*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 240 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 241 ; if (NUM<0){n=-NUM; while(!(UCSR1A&(1< ; i -> R12 ; n_juli -> R10 ; n_jiaodu -> R10 ; n_sec -> R10 ; pwm_duoji -> R10,R11 .even _main:: sbiw R28,1 .dbline -1 .dbline 416 ; //shang_johu=!shang_johu; ; /* ; count1++; ; switch(count1) ; { ; case 2://第一次捕获,则开始计数 ; { ; ICR1=0; ; temp1 = ICR1; ; ; TCCR1B |= (1< =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 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 ; ; }