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

📄 lookaround.asm

📁 用C编写基于凌阳SPCE061A芯片的图象识别模块可实现(1)获得数据并处理。(2)控制按扭KEY1
💻 ASM
字号:
//================================================================== 
//描述:
//				获得物体颜色、形状、中心水平值X、中心垂直Y、尺寸远近
//			
//日期:	
//				2001.08.08		 ;编写
//				2003.12.01		 ;修改
//================================================================== 
.include	hardware.inc;
.include	a2000.inc;
.include	eagle3.inc;

.external	_VR_OverFlag;							// 程序结束标志		
.external	_VR_PrevResult_Color;					// 存校正后的颜色
.external	_VR_PrevResult_Shape;					// 存校正后的形状
.external	_VR_PrevResult_CenterX;					// 存校正后的中心X
.external	_VR_PrevResult_CenterY;					// 存校正后的中心Y
.external	_VR_PrevResult_AreaH;					// 存校正后的尺寸高位数据

.CODE			
//================================================
// 函数名称:	LookAround_Initial
// 功能描述:	初始化LookAround 
// 入口参数:			 
// 出口参数:
// 破坏寄存器:					
//=================================================
.public	_LookAround_Initial;
.public	F_LookAround_Initial;
_LookAround_Initial:	.proc
F_LookAround_Initial:	
					r1 = 0x0000;					// 清各变量
					[R_Flag] = r1;					
					[R_SeekFlag] = r1;					
					[R_Color] = r1;
					[R_Shape] = r1;									
					[R_PreColor] = r1;
					[R_PreShape] = r1;
					[R_PreAreaH] = r1;
					[R_Temp1] = r1;
					[R_Temp2] = r1;
					[R_AreaH] =	r1;
					[R_CenterX] = r1;
					[R_CenterY] = r1;					
					[_VR_PrevResult_Color] = r1;
					r1 = 0x01;						// 程序入口偏移量
					[R_Offset] = r1;
					retf;
					.endp
//================================================
// 函数名称:	T_JumpTable
// 功能描述:	程序入口
// 入口参数:			 
// 出口参数:
// 破坏寄存器:					
//=================================================
.public	T_JumpTable;
T_JumpTable:
				.dw	L_LookAroundStoped;				// 0
				.dw	L_ResetEngine;					// 1
				.dw	L_BeingDelay1stTime;            // 2
				.dw	L_BeingDelay2ndTime;			// 3
				.dw	L_BeingDelay3rdTime;			// 4
				.dw	L_BeingDelay4thTime;			// 5
				.dw	L_BeingDelay5thTime;			// 6
				.dw	L_BeingDelay6thTime;			// 7
				.dw	L_AssigneColorAgain;			// 8
				.dw	L_BeingDelay7thTime;			// 9
				.dw	L_BeingDelay9thTime;			// A
			
L_LookAroundStoped:
				retf;
//================================================
// 函数名称:	LookAround
// 功能描述:	获得物体颜色、形状、X、Y、Size
// 入口参数:			 
// 出口参数:
// 破坏寄存器:					
//=================================================											
.public	_LookAround;
.public	F_LookAround;
_LookAround:	.proc
F_LookAround:
				r1 = [R_Flag];						// R_Flag = 0 初始化
				r1 &= 0x0004;
				jnz	L_Restart;
 
				r1 = T_JumpTable;
				r1 += [R_Offset];				
				r1 = [r1];
				pc = r1;
L_Restart:
				call	F_LookAround_Initial;			
																
L_ResetEngine:
				r1 = 0x02;
				[R_Offset] = r1;
				r1 = 0x00;
				[R_DelayTime] = r1;
				retf;

L_BeingDelay1stTime:
				call	F_Delay55ms;				// 延时55MS
				r1 = [R_Flag];
				r1 &= 0x8000;
				jnz	L_HaveDelay1stTime;				// 判断时间到否
				retf;

L_HaveDelay1stTime:						
L_BeingDelay2ndTime:
L_BeingDelay3rdTime:				
L_BeingDelay4thTime:				

				call	F_NormalOperMode;			// 写0F到高地址75
				call	F_OperMode;					// 写00到低地址00;允许75E0、75E8使用
				r1 = 0x06;
				[R_Offset] = r1;
				r1 = 0x00;
				[R_DelayTime] = r1;
				retf;
				
L_BeingDelay5thTime:				
				call	F_Delay66ms;				// 延时66MS 
				r1 = [R_Flag];
				r1 &= 0x8000;
				jnz	L_HaveDelay5thTime;
				retf;

L_HaveDelay5thTime:
				call	F_ShapeAnaly;				// 写0F到高地址70;写08到低地址E0
				call	F_Clear70E8;				// 写0F到高地址70;写00到低地址E8;设置模式
L_FeatureEagine:
				call	F_FeatureEngine;			// 写0F到高地址74,			
				r1 = 0x07;
				[R_Offset] = r1;
				r1 = 0x00;
				[R_DelayTime] = r1;
				retf;
				
L_BeingDelay6thTime:				
				call	F_Delay66ms;				// 延时66MS
				r1 = [R_Flag];
				r1 &= 0x8000;
				jnz	L_HaveDelay6thTime;
				retf;

L_HaveDelay6thTime:

//---------------------- ResetEngine End -------------------------

L_AssigneColorAgain:
L_AssigneColor:							
				call	F_LookAssigneColor;          // 写需要分辨别的颜色到7405的低地址05中    
				r1 = 0x09;
				[R_Offset] = r1;
				r1 = 0x00;
				[R_DelayTime] = r1;
				retf;
				
L_BeingDelay7thTime:				
				call	F_Delay66ms;				// 延时66MS
				r1 = [R_Flag];
				r1 &= 0x8000;
				jnz	L_HaveDelay7thTime;
				retf;

L_HaveDelay7thTime:			
				r1 = 0x0A;
				[R_Offset] = r1;
				r1 = 0x00;
				[R_DelayTime] = r1;
				retf;
				
L_BeingDelay9thTime:				
				call	F_Delay5ms;					// 延时5MS	
				r1 = [R_Flag];
				r1 &= 0x8000;
				jnz	L_HaveDelay9thTime;
				retf;

L_HaveDelay9thTime:

				call	F_GetObjNum;				// 读7410单元中的内容
				r1 = [R_SeekFlag];					// 判断标志位
				r1 &= 0x80;
				jnz 	L_LookObjBufferFull1;		// 目标数>8,则转				
				r1 = [R_SeekFlag];					
				r1 &= 0xfe;
				[R_SeekFlag] = r1;					// 目标数<8 ,清寄存器和标志
				r1 = 0x00;
				[R_PreAreaH] = r1;
				[R_PreColor] = r1;
				[R_PreShape] = r1;
				jmp		L_LookGetObjData;			
L_LookObjBufferFull1:
				call	L_LookObjBufferFull	
L_LookGetObjData:			
				call	F_LookGetObjData;			// 读取颜色、形状、X、Y、SIZE的值		
				r1 = [R_SeekFlag];
				r1 &= 0x01;							// 是否获得数值标志
				jz L_LookNonGetObj;					
//				r1 = [R_PreShape];					// 是否获得形状
//				cmp	r1,0x00;
//				je	L_LookNonGetObj;				// 相等则转
				r1 = [R_PreColor];					 
				cmp	r1,[R_Temp1];
				jne	L_NotTheSameObj;				// 不相等则转	
				r1 = [R_PreShape];
				cmp	r1,[R_Temp2];
				je	L_LookNonGetObj;				// 相等则转
L_NotTheSameObj:				
				r1 = [R_PreColor];					// 获得颜色
				[R_Temp1] = r1;
				[_VR_PrevResult_Color] = r1;
				
				r1 = [R_PreShape];					// 获得形状
				[R_Temp2] = r1;
				[_VR_PrevResult_Shape] = r1;

				r1 = [R_CenterX]					// 获得物体的中心水平值X
				[_VR_PrevResult_CenterX] = r1
				
				r1 = [R_CenterY]					// 获得物体的中心垂直值Y
				[_VR_PrevResult_CenterY] = r1

				r1 = [R_AreaH]						// 获得物体尺寸高位数据
				[_VR_PrevResult_AreaH] = r1

				r1 = 0x0001;
				[_VR_OverFlag] = r1;				// 置结束标志
				retf;
			
L_LookObjBufferFull:
L_LookNonGetObj:				
				r1 = 0x08;							// 重新读数据
				[R_Offset] = r1;
				retf;
				.endp
//================================ 结束 LookAround.asm ==================================
		

⌨️ 快捷键说明

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