⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor_main.lis

📁 基于AVRICC开发环境的ATMEL mega16单片机的电机速度控制程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00C4           ; //void timer2_ovf_isr(void)
 00C4           ; //{
 00C4           ; // unsigned char temp;
 00C4           ; // temp=SREG;
 00C4           ; // OCR2=adc_res8;
 00C4           ; // SREG=temp; 
 00C4           ; //}
 00C4           ; 
 00C4           ; //ADC initialize
 00C4           ; // Conversion time: 3uS
 00C4           ; void adc_init(void)
 00C4           ; {ad_mux=0x01;
 00C4                   .dbline 111
 00C4 81E0              ldi R24,1
 00C6 80930400          sts _ad_mux,R24
 00CA                   .dbline 112
 00CA           ;  ADCSR = 0x00; //disable adc
 00CA 2224              clr R2
 00CC 26B8              out 0x6,R2
 00CE                   .dbline 113
 00CE           ;  ADMUX = (1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(ad_mux&0x0f); //select adc input 0
 00CE 8F70              andi R24,15
 00D0 806E              ori R24,224
 00D2 87B9              out 0x7,R24
 00D4                   .dbline 114
 00D4           ;  ACSR  = 0x80;
 00D4 80E8              ldi R24,128
 00D6 88B9              out 0x8,R24
 00D8                   .dbline 115
 00D8           ;  ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
 00D8 8EEC              ldi R24,206
 00DA 86B9              out 0x6,R24
 00DC                   .dbline -2
 00DC           L8:
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbend
 00DE                   .dbfunc e init_devices _init_devices fV
                        .even
 00DE           _init_devices::
 00DE                   .dbline -1
 00DE                   .dbline 133
 00DE           ; }
 00DE           ; 
 00DE           ; //#pragma interrupt_handler adc_isr:15
 00DE           ; //void adc_isr(void)
 00DE           ; //{
 00DE           ; //     unsigned char temp;
 00DE           ; //     temp=SREG;
 00DE           ;       // adc_res8=ADCH;
 00DE           ;        //hex2bcd(adc_res8);
 00DE           ;        //ad_mux=0x01;
 00DE           ;        //ADMUX=(1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(ad_mux&0x0f);
 00DE           ; //     ADCSRA|=(1<<ADSC);//start adc again
 00DE           ; // SREG=temp;
 00DE           ; //}
 00DE           ; 
 00DE           ; //call this routine to initialize all peripherals
 00DE           ; void init_devices(void)
 00DE           ; {
 00DE                   .dbline 135
 00DE           ;  //stop errant interrupts until set up
 00DE           ;  CLI(); //disable all interrupts
 00DE F894              cli
 00E0                   .dbline 136
 00E0           ;  port_init();
 00E0 8FDF              xcall _port_init
 00E2                   .dbline 137
 00E2           ;  timer0_init();
 00E2 9BDF              xcall _timer0_init
 00E4                   .dbline 138
 00E4           ;  timer1_init();
 00E4 D7DF              xcall _timer1_init
 00E6                   .dbline 139
 00E6           ;  timer2_init();
 00E6 E4DF              xcall _timer2_init
 00E8                   .dbline 142
 00E8           ;  //adc_init();
 00E8           ; 
 00E8           ;  MCUCR = 0x00;
 00E8 2224              clr R2
 00EA 25BE              out 0x35,R2
 00EC                   .dbline 143
 00EC           ;  GICR  = 0x00;
 00EC 2BBE              out 0x3b,R2
 00EE                   .dbline 144
 00EE           ;  TIMSK = 0x41; //enable timer0 timer2 interrupt sources
 00EE 81E4              ldi R24,65
 00F0 89BF              out 0x39,R24
 00F2                   .dbline 145
 00F2           ;  SEI(); //re-enable interrupts
 00F2 7894              sei
 00F4                   .dbline -2
 00F4           L9:
 00F4                   .dbline 0 ; func end
 00F4 0895              ret
 00F6                   .dbend
 00F6                   .dbfunc e delay_1ms _delay_1ms fV
 00F6           ;              i -> R16,R17
                        .even
 00F6           _delay_1ms::
 00F6                   .dbline -1
 00F6                   .dbline 149
 00F6           ;  //all peripherals are now initialized
 00F6           ; }
 00F6           ; void delay_1ms(void)
 00F6           ; {
 00F6                   .dbline 151
 00F6           ;  unsigned int i;
 00F6           ;  for (i=0;i<542;i++)
 00F6 0027              clr R16
 00F8 1127              clr R17
 00FA 02C0              xjmp L14
 00FC           L11:
 00FC                   .dbline 152
 00FC           L12:
 00FC                   .dbline 151
 00FC 0F5F              subi R16,255  ; offset = 1
 00FE 1F4F              sbci R17,255
 0100           L14:
 0100                   .dbline 151
 0100 0E31              cpi R16,30
 0102 E2E0              ldi R30,2
 0104 1E07              cpc R17,R30
 0106 D0F3              brlo L11
 0108                   .dbline -2
 0108           L10:
 0108                   .dbline 0 ; func end
 0108 0895              ret
 010A                   .dbsym r i 16 i
 010A                   .dbend
 010A                   .dbfunc e hex2bcd _hex2bcd fV
 010A           ;           temp -> R20
 010A           ;              i -> R22
 010A           ;            cnt -> R10,R11
                        .even
 010A           _hex2bcd::
 010A 0E940000          xcall push_gset3
 010E 5801              movw R10,R16
 0110                   .dbline -1
 0110                   .dbline 155
 0110           ;  ;
 0110           ; }
 0110           ; void hex2bcd(unsigned int cnt)
 0110           ; {
 0110                   .dbline 157
 0110           ;  unsigned char i,temp;
 0110           ;  for (i=0;i<4;i++)
 0110 6627              clr R22
 0112 1BC0              xjmp L19
 0114           L16:
 0114                   .dbline 158
 0114                   .dbline 159
 0114 2AE0              ldi R18,10
 0116 30E0              ldi R19,0
 0118 8501              movw R16,R10
 011A 0E940000          xcall mod16u
 011E 402F              mov R20,R16
 0120                   .dbline 160
 0120 80E0              ldi R24,<_table
 0122 90E0              ldi R25,>_table
 0124 E42F              mov R30,R20
 0126 FF27              clr R31
 0128 E80F              add R30,R24
 012A F91F              adc R31,R25
 012C E491              lpm R30,Z
 012E 80E0              ldi R24,<_ledbuff
 0130 90E0              ldi R25,>_ledbuff
 0132 A62F              mov R26,R22
 0134 BB27              clr R27
 0136 A80F              add R26,R24
 0138 B91F              adc R27,R25
 013A EC93              st x,R30
 013C                   .dbline 161
 013C 2AE0              ldi R18,10
 013E 30E0              ldi R19,0
 0140 8501              movw R16,R10
 0142 0E940000          xcall div16u
 0146 5801              movw R10,R16
 0148                   .dbline 162
 0148           L17:
 0148                   .dbline 157
 0148 6395              inc R22
 014A           L19:
 014A                   .dbline 157
 014A 6430              cpi R22,4
 014C 18F3              brlo L16
 014E                   .dbline -2
 014E           L15:
 014E 0E940000          xcall pop_gset3
 0152                   .dbline 0 ; func end
 0152 0895              ret
 0154                   .dbsym r temp 20 c
 0154                   .dbsym r i 22 c
 0154                   .dbsym r cnt 10 i
 0154                   .dbend
 0154                   .dbfunc e display _display fV
 0154           ;              i -> R20
                        .even
 0154           _display::
 0154 0E940000          xcall push_gset1
 0158                   .dbline -1
 0158                   .dbline 166
 0158           ;        {
 0158           ;         temp=cnt%10;
 0158           ;         ledbuff[i]=table[temp];
 0158           ;         cnt=cnt/10;
 0158           ;        }
 0158           ; }
 0158           ; 
 0158           ; void display(void)
 0158           ; {
 0158                   .dbline 168
 0158           ;        unsigned char i;
 0158           ;        for (i=0;i<4;i++)
 0158 4427              clr R20
 015A 1AC0              xjmp L24
 015C           L21:
 015C                   .dbline 169
 015C                   .dbline 170
 015C 80E0              ldi R24,<_ledbuff
 015E 90E0              ldi R25,>_ledbuff
 0160 E42F              mov R30,R20
 0162 FF27              clr R31
 0164 E80F              add R30,R24
 0166 F91F              adc R31,R25
 0168 2080              ldd R2,z+0
 016A 28BA              out 0x18,R2
 016C                   .dbline 171
 016C 142F              mov R17,R20
 016E 1C5F              subi R17,252    ; addi 4
 0170 01E0              ldi R16,1
 0172 0E940000          xcall lsl8
 0176 202E              mov R2,R16
 0178 2094              com R2
 017A 2BBA              out 0x1b,R2
 017C                   .dbline 172
 017C BCDF              xcall _delay_1ms
 017E                   .dbline 173
 017E 142F              mov R17,R20
 0180 1C5F              subi R17,252    ; addi 4
 0182 01E0              ldi R16,1
 0184 0E940000          xcall lsl8
 0188 2BB2              in R2,0x1b
 018A 202A              or R2,R16
 018C 2BBA              out 0x1b,R2
 018E                   .dbline 174
 018E           L22:
 018E                   .dbline 168
 018E 4395              inc R20
 0190           L24:
 0190                   .dbline 168
 0190 4430              cpi R20,4
 0192 20F3              brlo L21
 0194                   .dbline -2
 0194           L20:
 0194 0E940000          xcall pop_gset1
 0198                   .dbline 0 ; func end
 0198 0895              ret
 019A                   .dbsym r i 20 c
 019A                   .dbend
 019A                   .dbfunc e main _main fI
                        .even
 019A           _main::
 019A                   .dbline -1
 019A                   .dbline 179
 019A           ;        {
 019A           ;         PORTB=ledbuff[i];
 019A           ;         PORTA=~(1<<(4+i));
 019A           ;         delay_1ms();
 019A           ;         PORTA|=(1<<(4+i));
 019A           ;        }
 019A           ; }
 019A           ; 
 019A           ; 
 019A           ; main()
 019A           ; {
 019A                   .dbline 180
 019A           ;         init_devices();
 019A A1DF              xcall _init_devices
 019C                   .dbline 181
 019C           ;         count=0;
 019C 2224              clr R2
 019E 20920500          sts _count,R2
 01A2 06C0              xjmp L27
 01A4           L26:
 01A4                   .dbline 183
 01A4                   .dbline 185
 01A4 00910000          lds R16,_count16
 01A8 10910100          lds R17,_count16+1
 01AC AEDF              xcall _hex2bcd
 01AE                   .dbline 186
 01AE D2DF              xcall _display
 01B0                   .dbline 187
 01B0           L27:
 01B0                   .dbline 182
 01B0 F9CF              xjmp L26
 01B2           X1:
 01B2                   .dbline -2
 01B2           L25:
 01B2                   .dbline 0 ; func end
 01B2 0895              ret
 01B4                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\icc\speedloop\motor_main.c
 0000           _count16::
 0000                   .blkb 2
 0002                   .dbsym e count16 _count16 i
 0002           _adc_res16::
 0002                   .blkb 2
 0004                   .dbsym e adc_res16 _adc_res16 i
 0004           _ad_mux::
 0004                   .blkb 1
 0005                   .dbsym e ad_mux _ad_mux c
 0005           _count::
 0005                   .blkb 1
 0006                   .dbsym e count _count c
 0006           _adc_res8::
 0006                   .blkb 1
 0007                   .dbsym e adc_res8 _adc_res8 c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -