www.pudn.com > 图像识别模组源代码eagle_New.rar > lookaround.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 ==================================