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

📄 jidong.s

📁 基于m16的寻迹寻光小车程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.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 + -