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

📄 jidong.lis

📁 基于m16的寻迹寻光小车程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02A8                   .dbline 110
 02A8           ;        case 4: turn_r();   break;                      
 02A8 C4DE              xcall _turn_r
 02AA                   .dbline 110
 02AA           L32:
 02AA           L33:
 02AA                   .dbline -2
 02AA           L31:
 02AA                   .dbline 0 ; func end
 02AA 0C940000          xjmp pop_xgset300C
 02AE                   .dbsym r s_flag 10 c
 02AE                   .dbend
 02AE                   .dbfunc e ADC_start _ADC_start fV
                        .even
 02AE           _ADC_start::
 02AE                   .dbline -1
 02AE                   .dbline 116
 02AE           ;        }
 02AE           ; }             
 02AE           ; 
 02AE           ; //使用ADC
 02AE           ; void ADC_start( void )
 02AE           ; {
 02AE                   .dbline 117
 02AE           ;     ADCSRA |= ( 1 << ADEN ) | ( 1 << ADIE ) | ( 1 << ADSC ) ;  //ADC使能位, 中断位置位
 02AE 86B1              in R24,0x6
 02B0 886C              ori R24,200
 02B2 86B9              out 0x6,R24
 02B4                   .dbline -2
 02B4           L40:
 02B4                   .dbline 0 ; func end
 02B4 0895              ret
 02B6                   .dbend
 02B6                   .dbfunc e ADC_stop _ADC_stop fV
                        .even
 02B6           _ADC_stop::
 02B6                   .dbline -1
 02B6                   .dbline 122
 02B6           ; }
 02B6           ; 
 02B6           ; //禁用ADC
 02B6           ; void ADC_stop( void )
 02B6           ; {
 02B6                   .dbline 123
 02B6           ;     ADCSRA &=~ ( 1 << ADEN ) | ( 1 << ADIE ) | ( 1 << ADSC ) ; //ADC使能位, 中断位清零
 02B6 3798              cbi 0x6,7
 02B8                   .dbline -2
 02B8           L41:
 02B8                   .dbline 0 ; func end
 02B8 0895              ret
 02BA                   .dbend
 02BA                   .dbfunc e ADC_port_init _ADC_port_init fV
                        .even
 02BA           _ADC_port_init::
 02BA                   .dbline -1
 02BA                   .dbline 128
 02BA           ; }
 02BA           ; 
 02BA           ; //ADC采样端口初始化
 02BA           ; void ADC_port_init( void )
 02BA           ; {
 02BA                   .dbline 129
 02BA           ;     ADC0_in;     //定义PAD0为输入,高阻态
 02BA                   .dbline 129
 02BA 8AB3              in R24,0x1a
 02BC 8E7F              andi R24,254
 02BE 8ABB              out 0x1a,R24
 02C0                   .dbline 129
 02C0 D89A              sbi 0x1b,0
 02C2                   .dbline 129
 02C2                   .dbline 129
 02C2                   .dbline 130
 02C2           ;       ADC1_in;
 02C2                   .dbline 130
 02C2 8AB3              in R24,0x1a
 02C4 8D7F              andi R24,253
 02C6 8ABB              out 0x1a,R24
 02C8                   .dbline 130
 02C8 D99A              sbi 0x1b,1
 02CA                   .dbline 130
 02CA                   .dbline 130
 02CA                   .dbline 131
 02CA           ;       ADC2_in;
 02CA                   .dbline 131
 02CA 8AB3              in R24,0x1a
 02CC 8B7F              andi R24,251
 02CE 8ABB              out 0x1a,R24
 02D0                   .dbline 131
 02D0 DA9A              sbi 0x1b,2
 02D2                   .dbline 131
 02D2                   .dbline 131
 02D2                   .dbline 132
 02D2           ;       ADC3_in;
 02D2                   .dbline 132
 02D2 8AB3              in R24,0x1a
 02D4 877F              andi R24,247
 02D6 8ABB              out 0x1a,R24
 02D8                   .dbline 132
 02D8 DB9A              sbi 0x1b,3
 02DA                   .dbline 132
 02DA                   .dbline 132
 02DA                   .dbline 133
 02DA           ;       ADC4_in;
 02DA                   .dbline 133
 02DA 8AB3              in R24,0x1a
 02DC 8F7E              andi R24,239
 02DE 8ABB              out 0x1a,R24
 02E0                   .dbline 133
 02E0 DC9A              sbi 0x1b,4
 02E2                   .dbline 133
 02E2                   .dbline 133
 02E2                   .dbline -2
 02E2           L42:
 02E2                   .dbline 0 ; func end
 02E2 0895              ret
 02E4                   .dbend
 02E4                   .dbfunc e ADC_REG_init _ADC_REG_init fV
                        .even
 02E4           _ADC_REG_init::
 02E4                   .dbline -1
 02E4                   .dbline 138
 02E4           ; }
 02E4           ; 
 02E4           ; //ADC寄存器初始化
 02E4           ; void ADC_REG_init( void )
 02E4           ; {
 02E4                   .dbline 139
 02E4           ;     ADCSRA = 0X00;         //ADC控制器清零,不启动ADC转换
 02E4 2224              clr R2
 02E6 26B8              out 0x6,R2
 02E8                   .dbline 140
 02E8           ;       AD_mux( ad_m );        //选择内部电压,初始时使用ADC0通道做为单通道输入
 02E8                   .dbline 140
 02E8 80910800          lds R24,_ad_m
 02EC 806C              ori R24,192
 02EE 87B9              out 0x7,R24
 02F0                   .dbline 140
 02F0                   .dbline 140
 02F0                   .dbline 141
 02F0           ;     SFIOR = 0X00;          //定义为连续自由转换
 02F0 20BE              out 0x30,R2
 02F2                   .dbline 142
 02F2           ;     ADCSRA = 0B11101101;   //启动ADC转换1110 1101, 开启ADC中断允许, 32分频(比较合适)
 02F2 8DEE              ldi R24,237
 02F4 86B9              out 0x6,R24
 02F6                   .dbline -2
 02F6           L43:
 02F6                   .dbline 0 ; func end
 02F6 0895              ret
 02F8                   .dbend
 02F8                   .dbfunc e ADC_convert _ADC_convert fD
                        .even
 02F8           _ADC_convert::
 02F8                   .dbline -1
 02F8                   .dbline 147
 02F8           ; }
 02F8           ; 
 02F8           ; //ADC采样, 不利用中断完成的采样
 02F8           ; float ADC_convert( void )
 02F8           ; {
 02F8           L45:
 02F8                   .dbline 148
 02F8           ;     while( !ADIF );                                            //等待ADC转换完成 ,ADC转换完成后,ADIF = 1
 02F8           L46:
 02F8                   .dbline 148
 02F8                   .dbline 149
 02F8           ;     adcl = ( uint )ADCL;                                       //定义的为右对齐, 取ADCL的值
 02F8 24B0              in R2,0x4
 02FA 3324              clr R3
 02FC 30920300          sts _adcl+1,R3
 0300 20920200          sts _adcl,R2
 0304                   .dbline 150
 0304           ;     adch = ( uint )ADCH;                                       //取ADCH的值
 0304 25B0              in R2,0x5
 0306 3324              clr R3
 0308 30920500          sts _adch+1,R3
 030C 20920400          sts _adch,R2
 0310                   .dbline 151
 0310           ;     adcvalue = adcl + ( adch << 8 );         //取10位ADC的值
 0310 322C              mov R3,R2
 0312 2224              clr R2
 0314 40900200          lds R4,_adcl
 0318 50900300          lds R5,_adcl+1
 031C 420C              add R4,R2
 031E 531C              adc R5,R3
 0320 50920700          sts _adcvalue+1,R5
 0324 40920600          sts _adcvalue,R4
 0328                   .dbline 152
 0328           ;     return adcvalue * Vref / 1024;           //将ADC的值比较Vref转化为浮点数
 0328 00E0              ldi R16,<L48
 032A 10E0              ldi R17,>L48
 032C 0E940000          xcall lpm32
 0330 1801              movw R2,R16
 0332 2901              movw R4,R18
 0334 00910600          lds R16,_adcvalue
 0338 10910700          lds R17,_adcvalue+1
 033C 0E940000          xcall uint2fp
 0340 3A93              st -y,R19
 0342 2A93              st -y,R18
 0344 1A93              st -y,R17
 0346 0A93              st -y,R16
 0348 8101              movw R16,R2
 034A 9201              movw R18,R4
 034C 0E940000          xcall fpmule2
 0350 1801              movw R2,R16
 0352 2901              movw R4,R18
 0354 00E0              ldi R16,<L49
 0356 10E0              ldi R17,>L49
 0358 0E940000          xcall lpm32
 035C 3A93              st -y,R19
 035E 2A93              st -y,R18
 0360 1A93              st -y,R17
 0362 0A93              st -y,R16
 0364 8101              movw R16,R2
 0366 9201              movw R18,R4
 0368 0E940000          xcall fpdiv2
 036C                   .dbline -2
 036C           L44:
 036C                   .dbline 0 ; func end
 036C 0895              ret
 036E                   .dbend
                        .area vector(rom, abs)
                        .org 56
 0038 0C94B701          jmp _adc_isr
                        .area text(rom, con, rel)
 036E                   .dbfile C:\DOCUME~1\Administrator\桌面\复件自~1\自动充电小车\298\jidong.c
 036E                   .dbfunc e adc_isr _adc_isr fV
                        .even
 036E           _adc_isr::
 036E 0A92              st -y,R0
 0370 1A92              st -y,R1
 0372 2A92              st -y,R2
 0374 3A92              st -y,R3
 0376 4A92              st -y,R4
 0378 5A92              st -y,R5
 037A 6A92              st -y,R6
 037C 7A92              st -y,R7
 037E 8A92              st -y,R8
 0380 9A92              st -y,R9
 0382 0A93              st -y,R16
 0384 1A93              st -y,R17
 0386 2A93              st -y,R18
 0388 3A93              st -y,R19
 038A 8A93              st -y,R24
 038C 9A93              st -y,R25
 038E AA93              st -y,R26
 0390 BA93              st -y,R27
 0392 EA93              st -y,R30
 0394 FA93              st -y,R31
 0396 0FB6              in R0,0x3f
 0398 0A92              st -y,R0
 039A 0E940000          xcall push_xgset300C
 039E 6097              sbiw R28,16
 03A0                   .dbline -1
 03A0                   .dbline 158
 03A0           ; }
 03A0           ; 
 03A0           ; //ADC值转换完成初始化
 03A0           ; #pragma interrupt_handler adc_isr:iv_ADC
 03A0           ; void adc_isr(void)
 03A0           ; {
 03A0                   .dbline 162
 03A0           ;  //conversion complete, read value (int) using...
 03A0           ;  // value=ADCL;            //Read 8 low bits first (important)
 03A0           ;  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
 03A0           ;        ADCSRA &=~ ( 1 << ADIE ) | ( 1 << ADIF );       //禁止转换中断
 03A0 3398              cbi 0x6,3
 03A2                   .dbline 164
 03A2           ;        
 03A2           ;        switch( ad_m )
 03A2 40910800          lds R20,_ad_m
 03A6 5527              clr R21
 03A8 4030              cpi R20,0
 03AA 4507              cpc R20,R21
 03AC 89F0              breq L54
 03AE           X16:
 03AE 4130              cpi R20,1
 03B0 E0E0              ldi R30,0
 03B2 5E07              cpc R21,R30
 03B4 D1F0              breq L55
 03B6           X17:
 03B6 4230              cpi R20,2
 03B8 E0E0              ldi R30,0
 03BA 5E07              cpc R21,R30
 03BC 19F1              breq L56
 03BE           X18:
 03BE 4330              cpi R20,3
 03C0 E0E0              ldi R30,0
 03C2 5E07              cpc R21,R30
 03C4 61F1              breq L57
 03C6           X19:
 03C6 4430              cpi R20,4
 03C8 E0E0              ldi R30,0
 03CA 5E07              cpc R21,R30
 03CC A9F1              breq L58
 03CE           X20:
 03CE 7AC0              xjmp L51
 03D0           L54:
 03D0                   .dbline 167
 03D0           ;        {
 03D0           ;                 case 0:
 03D0           ;             {
 03D0                   .dbline 168
 03D0           ;                          ad0_tmp = ADC_convert();
 03D0 93DF              xcall _ADC_convert
 03D2 10930A00          sts _ad0_tmp+1,R17
 03D6 00930900          sts _ad0_tmp,R16
 03DA 30930C00          sts _ad0_tmp+2+1,R19
 03DE 20930B00          sts _ad0_tmp+2,R18
 03E2                   .dbline 169
 03E2           ;                          ad_m = 1;            //转换通道      
 03E2 81E0              ldi R24,1
 03E4 80930800          sts _ad_m,R24
 03E8                   .dbline 170
 03E8           ;                 }break;
 03E8                   .dbline 170
 03E8 6DC0              xjmp L52
 03EA           L55:
 03EA                   .dbline 173
 03EA           ; 
 03EA           ;                 case 1:
 03EA           ;                 {
 03EA                   .dbline 174
 03EA           ;                         ad1_tmp = ADC_convert();
 03EA 86DF              xcall _ADC_convert
 03EC 10930E00          sts _ad1_tmp+1,R17
 03F0 00930D00          sts _ad1_tmp,R16
 03F4 30931000          sts _ad1_tmp+2+1,R19
 03F8 20930F00          sts _ad1_tmp+2,R18
 03FC                   .dbline 175
 03FC           ;                         ad_m = 2;         //转换通道
 03FC 82E0              ldi R24,2
 03FE 80930800          sts _ad_m,R24

⌨️ 快捷键说明

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