?? jidong.s
字號:
.module jidong.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbfunc e L298_port_init _L298_port_init fV
.even
_L298_port_init::
.dbline -1
.dbline 17
; #include <iom16v.h>
; #include <macros.h>
; //#include "lcd.h"
; #include "delay.h"
;
; #define uchar unsigned char
; #define uint unsigned int
;
; ////////////////////////////////////////////////////////////////////
; //部分函數聲明
; void time0_start( void );
; void time0_stop( void );
; ///////////////////////////////////////////////////////////////////
;
; ///////////////////////////////////////L298驅動/////////////////////////////////////
; void L298_port_init( void )
; {
.dbline 18
; DDRC |= 0b11111100;
in R24,0x14
ori R24,252
out 0x14,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e go_ahead _go_ahead fV
.even
_go_ahead::
.dbline -1
.dbline 22
; }
;
; void go_ahead( void )
; {
.dbline 23
; PORTC &=~ 0B11111100;
in R24,0x15
andi R24,3
out 0x15,R24
.dbline 24
; PORTC |= 0b11010100;
in R24,0x15
ori R24,212
out 0x15,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e go_back _go_back fV
.even
_go_back::
.dbline -1
.dbline 28
; }
;
; void go_back( void )
; {
.dbline 29
; PORTC &=~ 0B11111100;
in R24,0x15
andi R24,3
out 0x15,R24
.dbline 30
; PORTC |= 0b11101000;
in R24,0x15
ori R24,232
out 0x15,R24
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_l _turn_l fV
.even
_turn_l::
.dbline -1
.dbline 34
; }
;
; void turn_l( void )
; {
.dbline 35
; PORTC &=~ 0B11111100;
in R24,0x15
andi R24,3
out 0x15,R24
.dbline 36
; PORTC |= 0b11011000;
in R24,0x15
ori R24,216
out 0x15,R24
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e turn_r _turn_r fV
.even
_turn_r::
.dbline -1
.dbline 40
; }
;
; void turn_r( void )
; {
.dbline 41
; PORTC &=~ 0B11111100;
in R24,0x15
andi R24,3
out 0x15,R24
.dbline 42
; PORTC |= 0b11100100;
in R24,0x15
ori R24,228
out 0x15,R24
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e car_stop _car_stop fV
.even
_car_stop::
.dbline -1
.dbline 46
; }
;
; void car_stop( void )
; {
.dbline 47
; PORTC &=~ 0B11111100;
in R24,0x15
andi R24,3
out 0x15,R24
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
_small_flag::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e small_flag _small_flag i
_adcl::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e adcl _adcl i
_adch::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e adch _adch i
_adcvalue::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e adcvalue _adcvalue i
_ad_m::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad_m _ad_m c
_ad0_tmp::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad0_tmp _ad0_tmp D
_ad1_tmp::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad1_tmp _ad1_tmp D
_ad2_tmp::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad2_tmp _ad2_tmp D
_ad3_tmp::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad3_tmp _ad3_tmp D
_ad4_tmp::
.blkb 4
.area idata
.word 0x0,0x0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbsym e ad4_tmp _ad4_tmp D
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\復件自~1\自動充電小車\298\jidong.c
.dbfunc e get_5small _get_5small fc
; small_tmp -> y+4
; k -> y+0
; e -> y+48
; d -> y+44
; c -> y+40
; b -> y+36
; a -> y+32
.even
_get_5small::
xcall push_arg4
sbiw R28,32
.dbline -1
.dbline 86
; }
;
; ///////////////////////////////////////L298驅動部分結束/////////////////////////////////
;
;
; ///////////////////////////////////////小車尋光部分/////////////////////////////////////
; #define Vref 2.56 //定義基準電壓值
; //#define Vref 1.00
;
; //通道選擇宏定義
; #define AD_mux(n) { ADMUX = ( 0xC0 | n ); } //內部基準 0xC0,
;
; //輸入通道端口配置
; #define ADC0_in { DDRA &= 0XFE; PORTA |= 0X01; } //輸入,高阻態
; #define ADC1_in { DDRA &= 0XFD; PORTA |= 0X02; }
; #define ADC2_in { DDRA &= 0XFB; PORTA |= 0X04; }
; #define ADC3_in { DDRA &= 0XF7; PORTA |= 0X08; }
; #define ADC4_in { DDRA &= 0XEF; PORTA |= 0X10; }
; //#define ADC5_in { DDRA &= 0XDF; PORTA |= 0X20; }
; //#define ADC6_in { DDRA &= 0XBF; PORTA |= 0X40; }
; //#define ADC7_in { DDRA &= 0X7F; PORTA |= 0X80; }
;
; //全局變量
; uint small_flag = 0; //取最小光敏代號存入該變量
;
; uint adcl = 0; //定義暫存低字節
; uint adch = 0; //高字節
; uint adcvalue = 0; //低+高
; uchar ad_m = 0; //初始化通道為0通道
;
; float ad0_tmp = 0.0; //轉換完成后暫存值
; float ad1_tmp = 0.0;
; float ad2_tmp = 0.0;
; float ad3_tmp = 0.0;
; float ad4_tmp = 0.0;
;
; //取三個數中的最小值
; char get_5small( float a, float b, float c, float d, float e ) //ad0_tmp, ad1_tmp, ad2_tmp, ad3_tmp, ad4_tmp
; {
.dbline 87
; float small_tmp = 0.0;
ldi R16,<L8
ldi R17,>L8
xcall lpm32
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
.dbline 88
; float k = 0.0;
ldi R16,<L8
ldi R17,>L8
xcall lpm32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 90
;
; k = ( ( a < b ? a : b ) < c ) ? ( a < b ? a : b ) : c;
ldd R16,y+32
ldd R17,y+33
ldd R18,y+34
ldd R19,y+35
movw R24,R28
adiw R24,36
st -y,R25
st -y,R24
xcall fpcmp1
brge L11
X0:
ldd R2,y+32
ldd R3,y+33
ldd R4,y+34
ldd R5,y+35
std y+12,R2
std y+13,R3
std y+14,R4
std y+15,R5
xjmp L12
L11:
ldd R2,y+36
ldd R3,y+37
ldd R4,y+38
ldd R5,y+39
std y+12,R2
std y+13,R3
std y+14,R4
std y+15,R5
L12:
ldd R16,y+12
ldd R17,y+13
ldd R18,y+14
ldd R19,y+15
movw R24,R28
adiw R24,40
st -y,R25
st -y,R24
xcall fpcmp1
brge L9
X1:
ldd R16,y+32
ldd R17,y+33
ldd R18,y+34
ldd R19,y+35
movw R24,R28
adiw R24,36
st -y,R25
st -y,R24
xcall fpcmp1
brge L13
X2:
ldd R2,y+32
ldd R3,y+33
ldd R4,y+34
ldd R5,y+35
std y+16,R2
std y+17,R3
std y+18,R4
std y+19,R5
xjmp L14
L13:
ldd R2,y+36
ldd R3,y+37
ldd R4,y+38
ldd R5,y+39
std y+16,R2
std y+17,R3
std y+18,R4
std y+19,R5
L14:
ldd R2,y+16
ldd R3,y+17
ldd R4,y+18
ldd R5,y+19
std y+8,R2
std y+9,R3
std y+10,R4
std y+11,R5
xjmp L10
L9:
ldd R2,y+40
ldd R3,y+41
ldd R4,y+42
ldd R5,y+43
std y+8,R2
std y+9,R3
std y+10,R4
std y+11,R5
L10:
ldd R2,y+8
ldd R3,y+9
ldd R4,y+10
ldd R5,y+11
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 91
; small_tmp = ( ( k < d ? k : d ) < e ) ? ( k < d ? k : d ) : e;
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
movw R24,R28
adiw R24,44
st -y,R25
st -y,R24
xcall fpcmp1
brge L17
X3:
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+24,R2
std y+25,R3
std y+26,R4
std y+27,R5
xjmp L18
L17:
ldd R2,y+44
ldd R3,y+45
ldd R4,y+46
ldd R5,y+47
std y+24,R2
std y+25,R3
std y+26,R4
std y+27,R5
L18:
ldd R16,y+24
ldd R17,y+25
ldd R18,y+26
ldd R19,y+27
movw R24,R28
adiw R24,48
st -y,R25
st -y,R24
xcall fpcmp1
brge L15
X4:
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
movw R24,R28
adiw R24,44
st -y,R25
st -y,R24
xcall fpcmp1
brge L19
X5:
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
std y+28,R2
std y+29,R3
std y+30,R4
std y+31,R5
xjmp L20
L19:
ldd R2,y+44
ldd R3,y+45
ldd R4,y+46
ldd R5,y+47
std y+28,R2
std y+29,R3
std y+30,R4
std y+31,R5
L20:
ldd R2,y+28
ldd R3,y+29
ldd R4,y+30
ldd R5,y+31
std y+20,R2
std y+21,R3
std y+22,R4
std y+23,R5
xjmp L16
L15:
ldd R2,y+48
ldd R3,y+49
ldd R4,y+50
ldd R5,y+51
std y+20,R2
std y+21,R3
std y+22,R4
std y+23,R5
L16:
ldd R2,y+20
ldd R3,y+21
ldd R4,y+22
ldd R5,y+23
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
.dbline 93
;
; if( small_tmp == a ) return 0;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
adiw R24,32
st -y,R25
st -y,R24
xcall fpcmp1
brne L21
X6:
.dbline 93
clr R16
xjmp L7
L21:
.dbline 94
; else if( small_tmp == b ) return 1;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
adiw R24,36
st -y,R25
st -y,R24
xcall fpcmp1
brne L23
X7:
.dbline 94
ldi R16,1
xjmp L7
L23:
.dbline 95
; else if( small_tmp == c ) return 2;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
adiw R24,40
st -y,R25
st -y,R24
xcall fpcmp1
brne L25
X8:
.dbline 95
ldi R16,2
xjmp L7
L25:
.dbline 96
; else if( small_tmp == d ) return 3;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
adiw R24,44
st -y,R25
st -y,R24
xcall fpcmp1
brne L27
X9:
.dbline 96
ldi R16,3
xjmp L7
L27:
.dbline 97
; else if( small_tmp == e ) return 4;
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
movw R24,R28
adiw R24,48
st -y,R25
st -y,R24
xcall fpcmp1
brne L29
X10:
.dbline 97
ldi R16,4
xjmp L7
L29:
.dbline 98
; else return 1;
ldi R16,1
.dbline -2
L7:
.dbline 0 ; func end
adiw R28,36
ret
.dbsym l small_tmp 4 D
.dbsym l k 0 D
.dbsym l e 48 D
.dbsym l d 44 D
.dbsym l c 40 D
.dbsym l b 36 D
.dbsym l a 32 D
.dbend
.dbfunc e car_xunguang _car_xunguang fV
; s_flag -> R10
.even
_car_xunguang::
xcall push_xgset300C
mov R10,R16
.dbline -1
.dbline 103
; }
;
; //完成相應動作
; void car_xunguang( uchar s_flag )
; {
.dbline 104
; switch( s_flag )
mov R20,R10
clr R21
cpi R20,0
cpc R20,R21
breq L35
X11:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L36
X12:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L37
X13:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L38
X14:
cpi R20,4
ldi R30,0
cpc R21,R30
breq L39
X15:
xjmp L32
L35:
.dbline 106
; {
; case 0: turn_l(); break;
xcall _turn_l
.dbline 106
xjmp L33
L36:
.dbline 107
; case 1: go_ahead(); break;
xcall _go_ahead
.dbline 107
xjmp L33
L37:
.dbline 108
; case 2: turn_r(); break;
xcall _turn_r
.dbline 108
xjmp L33
L38:
.dbline 109
; case 3: turn_l(); break;
xcall _turn_l
.dbline 109
xjmp L33
L39:
.dbline 110
; case 4: turn_r(); break;
xcall _turn_r
.dbline 110
L32:
L33:
.dbline -2
L31:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r s_flag 10 c
.dbend
.dbfunc e ADC_start _ADC_start fV
.even
_ADC_start::
.dbline -1
.dbline 116
; }
; }
;
; //使用ADC
; void ADC_start( void )
; {
.dbline 117
; ADCSRA |= ( 1 << ADEN ) | ( 1 << ADIE ) | ( 1 << ADSC ) ; //ADC使能位, 中斷位置位
in R24,0x6
ori R24,200
out 0x6,R24
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ADC_stop _ADC_stop fV
.even
_ADC_stop::
.dbline -1
.dbline 122
; }
;
; //禁用ADC
; void ADC_stop( void )
; {
.dbline 123
; ADCSRA &=~ ( 1 << ADEN ) | ( 1 << ADIE ) | ( 1 << ADSC ) ; //ADC使能位, 中斷位清零
cbi 0x6,7
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ADC_port_init _ADC_port_init fV
.even
_ADC_port_init::
.dbline -1
.dbline 128
; }
;
; //ADC采樣端口初始化
; void ADC_port_init( void )
; {
.dbline 129
; ADC0_in; //定義PAD0為輸入,高阻態
.dbline 129
in R24,0x1a
andi R24,254
out 0x1a,R24
.dbline 129
sbi 0x1b,0
.dbline 129
.dbline 129
.dbline 130
; ADC1_in;
.dbline 130
in R24,0x1a
andi R24,253
out 0x1a,R24
.dbline 130
sbi 0x1b,1
.dbline 130
.dbline 130
.dbline 131
; ADC2_in;
.dbline 131
in R24,0x1a
andi R24,251
out 0x1a,R24
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -