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 ==================================