📄 master.asm
字号:
//===================================================
//函数:F_HighAddr70
//语法:调用
//描述:允许中心控制寄存器使用
//参数:无
//返回:无
//===================================================
.public F_HighAddr70;
F_HighAddr70:
r1 = 0x0f;
[R_AddrBuffer] = r1;
r1 = 0x70;
[R_WriteDataBuffer] = r1;
call F_WriteOper;
retf;
//===================================================
//函数:F_HighAddr74
//语法:调用
//描述:允许特征状态寄存器使用
//参数:无
//返回:无
//===================================================
.public F_HighAddr74;
F_HighAddr74:
r1 = 0x0f;
[R_AddrBuffer] = r1;
r1 = 0x74;
[R_WriteDataBuffer] = r1;
call F_WriteOper;
retf;
//===================================================
//函数:F_HighAddr75
//语法:调用
//描述:允许辩识成熟出寄存器使用
//参数:无
//返回:无
//===================================================
.public F_HighAddr75;
F_HighAddr75:
r1 = 0x0f;
[R_AddrBuffer] = r1;
r1 = 0x75;
[R_WriteDataBuffer] = r1;
call F_WriteOper;
retf;
//======================== 功能子函数结束 =========================================
//======================== 获得数据程序开始 ================================
//===================================================
//函数:F_GetObjNum
//语法:调用
//描述:获得物体的数目
//参数:无
//返回:无
//===================================================
.public F_GetObjNum;
F_GetObjNum:
call F_HighAddr74;
r1 = 0x10;
[R_AddrBuffer] = r1;
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_ObjNum] = r1;
call F_ReadOper; //Get Obj Num
r1 = [R_ReadDataBuffer];
r1 &= 0x0F;
[R_ObjNum] = r1;
r1 = [R_ObjNum];
r1 &= 0x08;
jnz L_Bufferfull; //Num Buffer full
r1 = [R_SeekFlag];
r1 &= 0x7f;
[R_SeekFlag] = r1;
retf;
L_Bufferfull:
r1 = [R_SeekFlag];
r1 |= 0x80;
[R_SeekFlag] = r1;
retf;
//===================================================
//函数:F_GetObj1stData
//语法:调用
//描述:获得数据21-27单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj1stData;
F_GetObj1stData:
call F_HighAddr74;
r1 = 0x21;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0x22;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0x23;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0x24;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0x25;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0x26;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0x27;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj2ndData
//语法:调用
//描述:获得第二数据41-47单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj2ndData;
F_GetObj2ndData:
call F_HighAddr74;
r1 = 0x41;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0x42;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0x43;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0x44;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0x45;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0x46;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0x47;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj3rdData
//语法:调用
//描述:获得第三数据61-67单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj3rdData;
F_GetObj3rdData:
call F_HighAddr74;
r1 = 0x61;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0x62;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0x63;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0x64;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0x65;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0x66;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0x67;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj4thData
//语法:调用
//描述:获得第四个数据81-87单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj4thData;
F_GetObj4thData:
call F_HighAddr74;
r1 = 0x81;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0x82;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0x83;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0x84;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0x85;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0x86;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0x87;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj5thData
//语法:调用
//描述:获得第五个数据A1-A7单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj5thData;
F_GetObj5thData:
call F_HighAddr74;
r1 = 0xa1;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0xa2;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0xa3;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0xa4;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0xa5;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0xa6;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0xa7;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj6thData
//语法:调用
//描述:获得第六个数据C1-C7单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj6thData;
F_GetObj6thData:
call F_HighAddr74;
r1 = 0xc1;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0xc2;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0xc3;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0xc4;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0xc5;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0xc6;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0xc7;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetObj7thData
//语法:调用
//描述:获得第七个数据E1-E7单元的内容
//参数:无
//返回:无
//===================================================
.public F_GetObj7thData;
F_GetObj7thData:
call F_HighAddr74;
r1 = 0xe1;
[R_AddrBuffer] = r1;
call F_GetShapeAndColor;
r1 = 0xe2;
[R_AddrBuffer] = r1;
call F_GetObjStaX;
r1 = 0xe3;
[R_AddrBuffer] =r1;
call F_GetObjStaY;
r1 = 0xe4;
[R_AddrBuffer] =r1;
call F_GetObjEndX;
r1 = 0xe5;
[R_AddrBuffer] =r1;
call F_GetObjEndY;
call F_GetObjACG; //StaX+End = CenterX; StaY+endY = CenterY;
r1 = 0xe6;
[R_AddrBuffer] =r1;
call F_GetAreaL;
r1 = 0xe7;
[R_AddrBuffer] =r1;
call F_GetAreaH;
retf;
//===================================================
//函数:F_GetShapeAndColor
//语法:调用
//描述:获得颜色和外形的内容
//参数:无
//返回:无
//===================================================
.public F_GetShapeAndColor;
F_GetShapeAndColor:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_Color] = r1;
[R_Shape] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
r1 &= 0x07;
cmp r1,0x07;
jne L_NotYellow;
r1 -= 1;
L_NotYellow:
[R_Color] = r1;
r1 = [R_ReadDataBuffer];
r1 &= 0x70;
r1 = r1 lsr 4;
[R_Shape] = r1;
retf;
//===================================================
//函数:F_GetObjStaX
//语法:调用
//描述:获得物体水平方向的近距离的内容
//参数:无
//返回:无
//===================================================
.public F_GetObjStaX;
F_GetObjStaX:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_StaX] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_StaX] = r1;
retf;
//===================================================
//函数:F_GetObjStaY
//语法:调用
//描述:获得物体垂直方向的近距离的内容
//参数:无
//返回:无
//===================================================
.public F_GetObjStaY;
F_GetObjStaY:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_StaY] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_StaY] = r1;
retf;
//===================================================
//函数:F_GetObjEndX
//语法:调用
//描述:获得物体水平方向的远距离的内容
//参数:无
//返回:无
//===================================================
.public F_GetObjEndX;
F_GetObjEndX:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_EndX] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_EndX] = r1;
retf;
//===================================================
//函数:F_GetObjEndY
//语法:调用
//描述:获得物体垂直方向的远距离的内容
//参数:无
//返回:无
//===================================================
.public F_GetObjEndY;
F_GetObjEndY:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_EndY] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_EndY] = r1;
retf;
//===================================================
//函数:F_GetObjACG
//语法:调用
//描述:获得物体垂直方向、水平方向的中心距离和水平、垂直方向物体的实际距离
//参数:无
//返回:无
//===================================================
.public F_GetObjACG;
F_GetObjACG:
r1 = [R_EndX];
r1 += [R_StaX];
r1 = r1 lsr 1;
[R_CenterX] = r1;
r1 = [R_EndY];
r1 += [R_StaY];
r1 = r1 lsr 1;
[R_CenterY] = r1;
r1 = [R_EndX];
r1 -= [R_StaX];
[R_CompX] = r1;
r1 = [R_EndY];
r1 -= [R_StaY];
[R_CompY] = r1;
retf;
//===================================================
//函数:F_GetAreaL
//语法:调用
//描述:获得在空间的近距离
//参数:无
//返回:无
//===================================================
.public F_GetAreaL;
F_GetAreaL:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_AreaL] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_AreaL] = r1;
retf;
//===================================================
//函数:F_GetAreaH
//语法:调用
//描述:获得在空间的远距离
//参数:无
//返回:无
//===================================================
.public F_GetAreaH;
F_GetAreaH:
r1 = 0x00;
[R_ReadDataBuffer] = r1;
[R_AreaH] = r1;
call F_ReadOper;
r1 = [R_ReadDataBuffer];
[R_AreaH] = r1;
retf;
.public F_GetObjDataOne;
F_GetObjDataOne:
r1 = [R_SeekFlag];
r1 &= 0x01;
jnz L_NonGetObjDataOneTemp;
call F_GetObj1stData;
// call F_CheckTheObj;
L_NonGetObjDataOneTemp:
retf;
//========================== 读写程序开始 ============================
//===================================================
//函数:F_WriteOper
//语法:调用
//描述:CPU向SPCA563的写数据
//参数:无
//返回:无
//===================================================
.public F_WriteOper;
F_WriteOper:
r1 = 0x00;
[R_WaitRDYTime] = r1;
call F_Set_SDA_Output;
L_WriteStart:
r1 = [P_IOA_Data];
r1 &= 0x0400;
jnz L_WriteStartRDY;
r1 = [R_WaitRDYTime];
cmp r1,11;
jb L_WriteStart;
call F_ResetEagle3Again;
retf;
L_WriteStartRDY:
r1 = [P_IOA_Buffer];
r1 |= 0x0100;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 |= 0x0200;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 &= 0xfeff;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 &= 0xfdff;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 |= 0x0100;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 &= 0xfdff;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 &= 0xfeff;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 |= 0x0100;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 &= 0xfdff;
[P_IOA_Buffer] = r1;
r1 = [R_AddrBuffer];
[R_WriteBuffer] = r1;
call F_WriteOneByte;
r1 = [R_WriteDataBuffer];
[R_WriteBuffer] = r1;
call F_WriteOneByte;
r1 = [P_IOA_Buffer];
r1 &= 0xfeff;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 |= 0x0200;
[P_IOA_Buffer] = r1;
r1 = [P_IOA_Buffer];
r1 |= 0x0100;
[P_IOA_Buffer] = r1;
r1 = 0x00;
[R_WaitRDYTime] = r1;
L_WWaitISRInt:
r1 = [P_IOA_Data];
r1 &= 0x0400;
jnz L_NonWaitRDYAgain;
r1 = [R_WaitRDYTime];
cmp r1,11;
jb L_WWaitISRInt;
call F_ResetEagle3Again;
L_NonWaitRDYAgain:
retf;
//===================================================
//函数:F_ReadOper
//语法:调用
//描述:CPU向SPCA563的读数据
//参数:无
//返回:无
//===================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -