📄 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 ==================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -