📄 jidong.lis
字号:
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 + -