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

📄 master.asm

📁 基于16位单片机的c编程
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.public F_ReadOper;
F_ReadOper:
				r1 = 0x00;
				[R_WaitRDYTime] = r1;
				call	F_Set_SDA_Output;
L_ReadStart:
				r1 = [P_IOA_Data];
				r1 &= 0x0400;
				jnz	L_ReadStartRDY;
								
				r1 = [R_WaitRDYTime];
				cmp	r1,11;
				jb	L_ReadStart;
				call	F_ResetEagle3Again;
				retf;

L_ReadStartRDY:
				r1 = [P_IOA_Buffer];				
				r1 |= 0x0200;
				[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 = [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 = [R_AddrBuffer];
				[R_WriteBuffer] = r1;
				call	F_WriteOneByte;
				r1 = [P_IOA_Buffer];
				r1 &= 0xfeff;
				[P_IOA_Buffer] = r1;
		
				r1 = [P_IOA_Buffer];
				r1 |= 0x0100;
				[P_IOA_Buffer] = r1;
				
				r1 = 0x00;
				[R_WaitRDYTime] = r1;
L_ReadDataNow:
				r1 = [P_IOA_Data];
				r1 &= 0x0400;
				jnz	L_ReadDataNowRDY;
			
				r1 = [R_WaitRDYTime];
				cmp	r1,11;
				jb	L_ReadDataNow;
				call	F_ResetEagle3Again;								
				retf;
			
L_ReadDataNowRDY:
				call	F_Set_SDA_Input;
				NOP;
				NOP;
				NOP;
				NOP;
				NOP;
				NOP;
				NOP;
				NOP;
				r1 = [P_IOA_Buffer];
				r1 |= 0x0100;
				[P_IOA_Buffer] = r1;
				call	F_ReadOneByte;
			
				r1 = [R_ReadBuffer];
				[R_ReadDataBuffer] = r1;
			
				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;

				retf;
			
//===================================================
//函数:F_ReadOneByte 
//语法:调用
//描述:CPU向SPCA563的读一个字节的数据
//参数:无
//返回:无
//===================================================

F_ReadOneByte:
				r1 = 0x00;
				[R_ReadBuffer] = r1;
				r2 = 0x08;
L_RWaitSCKHigh:
				r1 = [P_IOA_Buffer];
				r1 &= 0xfeff;
				[P_IOA_Buffer] = r1;
			
				r1 = [P_IOA_Buffer];
				r1 |= 0x0100;
				[P_IOA_Buffer] = r1;
				
				r1 = [P_IOA_Data];
				r1 &= 0x0200;
				jnz	L_ReadSDAHigh;
			
				r1 = [R_ReadBuffer];
				r1 = r1 lsl 1;
				r1 += 0x00;
				[R_ReadBuffer] = r1;
			
				r2 -= 0x01;
				jnz	L_RWaitSCKHigh;
				retf;

L_ReadSDAHigh:
				r1 = [R_ReadBuffer];
				r1 = r1 lsl 1;
				r1 += 0x01;
				[R_ReadBuffer] = r1;

				r2 -= 0x01;
				jnz	L_RWaitSCKHigh;
				retf;
//===================================================
//函数:F_WriteOneByte 
//语法:调用
//描述:CPU向SPCA563的写一个字节的数据
//参数:无
//返回:无
//===================================================
F_WriteOneByte:
				r2 = 0x08;
L_WWaitSCKLow:
				r1 = [P_IOA_Buffer];
				r1 &= 0xfeff;
				[P_IOA_Buffer] = r1;
				
				r1 = [R_WriteBuffer];
				r1 &= 0x80;
				jz	L_Write_SDALow;
				
				r1 = [P_IOA_Buffer];
				r1 |= 0x0200;
				[P_IOA_Buffer] = r1;
							
				jmp	L_WriteTheBitOK;

L_Write_SDALow:
				r1 = [P_IOA_Buffer];				
				r1 &= 0xfdff;
				[P_IOA_Buffer] = r1;

L_WriteTheBitOK:								
				r1 = [R_WriteBuffer];
				r1 = r1 lsl 1;
				[R_WriteBuffer] = r1;

				r1 = [P_IOA_Buffer];
				r1 |= 0x0100;
				[P_IOA_Buffer] = r1;

				r2 -= 0x01;
				jnz	L_WWaitSCKLow;
				retf;
//========================== 读写程序结束 ============================

//========================== 延时程序开始 ============================					
			 			
//===================================================
//函数:F_Delay66ms 
//语法:调用
//描述:延时66毫秒
//参数:无
//返回:无
//===================================================
.public	F_Delay66ms;
F_Delay66ms:			
				r1 = [R_DelayTime];
				cmp	r1,0x42;
				jb	L_NonTo66ms;
				r1 = [R_Flag];
				r1 |= 0x8000;					//Delay66ms
				[R_Flag] = r1;				
				retf;				
L_NonTo66ms:
				r1 = [R_Flag];
				r1 &= 0x7fff;
				[R_Flag] = r1;				
				retf;

//===================================================
//函数:F_Delay55ms 
//语法:调用
//描述:延时55毫秒
//参数:无
//返回:无
//===================================================
.public	F_Delay55ms;
F_Delay55ms:				
				r1 = [R_DelayTime];
				cmp	r1,0x37;
				jb	L_NonTo55ms;
				
				r1 = [R_Flag];
				r1 |= 0x8000;
				[R_Flag] = r1;
				retf;				
L_NonTo55ms:				
				r1 = [R_Flag];
				r1 &= 0x7fff;
				[R_Flag] = r1;
				retf;				 	
//===================================================
//函数:F_Delay25ms 
//语法:调用
//描述:延时25毫秒
//参数:无
//返回:无
//===================================================			
.public	F_Delay25ms;
F_Delay25ms:				
				r1 = [R_DelayTime];
				cmp	r1,0x19;
				jb	L_NonTo25ms;
				
				r1 = [R_Flag];
				r1 |= 0x8000;
				[R_Flag] = r1;
				retf;				
L_NonTo25ms:				
				r1 = [R_Flag];
				r1 &= 0x7fff;
				[R_Flag] = r1;
				retf;				 	
//===================================================
//函数:F_Delay10ms 
//语法:调用
//描述:延时10毫秒
//参数:无
//返回:无
//===================================================
.public	F_Delay10ms;
F_Delay10ms:				
				r1 = [R_DelayTime];
				cmp	r1,0x0a;
				jb	L_NonTo10ms;
				
				r1 = [R_Flag];
				r1 |= 0x8000;
				[R_Flag] = r1;
				retf;				
L_NonTo10ms:				
				r1 = [R_Flag];
				r1 &= 0x7fff;
				[R_Flag] = r1;
				retf;				 	
//===================================================
//函数:F_Delay5ms 
//语法:调用
//描述:延时5毫秒
//参数:无
//返回:无
//===================================================
.public	F_Delay5ms;
F_Delay5ms:				
				r1 = [R_DelayTime];
				cmp	r1,0x06;
				jb	L_NonTo5ms;
				
				r1 = [R_Flag];
				r1 |= 0x8000;
				[R_Flag] = r1;
				retf;				
L_NonTo5ms:				
				r1 = [R_Flag];
				r1 &= 0x7fff;
				[R_Flag] = r1;
				retf;				 	
				 	
//======================== 延时程序结束 ==================================
		
//================================= 数据处理程序开始 =================================

//===================================================
//函数:F_LookGetObjData 
//语法:调用
//描述:获得颜色、外型、水平方向的数值、
//		垂直方向的数值、空间的远近的参数
//参数:无
//返回:无
//===================================================
.public	F_LookGetObjData;
F_LookGetObjData:
				r1 = [R_ObjNum];
				r1 &= 0x07;
				[R_ObjNum] = r1;
				r1 = [R_ObjNum];
				cmp	r1,0x01;
				je	F_LookGetOneObjData;
				cmp	r1,0x02;
				je	F_LookGetTwoObjData;
				cmp	r1,0x03;
				je	F_LookGetThrObjData;
				cmp	r1,0x04;
				je	F_LookGetFourObjData;
				cmp	r1,0x05;
				je	F_LookGetFiveObjData;
				cmp	r1,0x06;
				je	F_LookGetSixObjData;
				cmp	r1,0x07;
				je	F_LookGetSevenObjData;
				retf;
//===================================================
//函数:F_LookGetOneObjData 
//语法:调用
//描述:获得一个目标物体
//参数:无
//返回:无
//===================================================				
F_LookGetOneObjData:
				call	F_LookGetObj1stData;
				retf;
//===================================================
//函数:F_LookGetTwoObjData 
//语法:调用
//描述:获得二个目标物体
//参数:无
//返回:无
//===================================================
F_LookGetTwoObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				retf;
//===================================================
//函数:F_LookGetThrObjData 
//语法:调用
//描述:获得三个目标物体
//参数:无
//返回:无
//===================================================				
F_LookGetThrObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				call	F_LookGetObj3rdData;
				retf;
//===================================================
//函数:F_LookGetFourObjData 
//语法:调用
//描述:获得四个目标物体
//参数:无
//返回:无
//===================================================
F_LookGetFourObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				call	F_LookGetObj3rdData;
				call	F_LookGetObj4thData;
				retf;
//===================================================
//函数:F_LookGetFiveObjData 
//语法:调用
//描述:获得五个目标物体
//参数:无
//返回:无
//===================================================
F_LookGetFiveObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				call	F_LookGetObj3rdData;
				call	F_LookGetObj4thData;
				call	F_LookGetObj5thData;
				retf;
//===================================================
//函数:F_LookGetSixObjData 
//语法:调用
//描述:获得六个目标物体
//参数:无
//返回:无
//===================================================
F_LookGetSixObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				call	F_LookGetObj3rdData;
				call	F_LookGetObj4thData;
				call	F_LookGetObj5thData;
				call	F_LookGetObj6thData;
				retf;
//===================================================
//函数:F_LookGetSevenObjData 
//语法:调用
//描述:获得七个目标物体
//参数:无
//返回:无
//===================================================
F_LookGetSevenObjData:
				call	F_LookGetObj1stData;
				call	F_LookGetObj2ndData;
				call	F_LookGetObj3rdData;
				call	F_LookGetObj4thData;
				call	F_LookGetObj5thData;
				call	F_LookGetObj6thData;
				call	F_LookGetObj7thData;
				retf;
//===================================================
//函数:F_LookGetObj1stData 
//语法:调用
//描述:获得第一个目标物体的数据
//参数:无
//返回:无
//===================================================
				
.public	F_LookGetObj1stData;
F_LookGetObj1stData:
				call	F_GetObj1stData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj2ndData 
//语法:调用
//描述:获得第二个目标物体的数据
//参数:无
//返回:无
//===================================================
.public	F_LookGetObj2ndData;
F_LookGetObj2ndData:
				call	F_GetObj2ndData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj3rdData 
//语法:调用
//描述:获得第三个目标物体的数据
//参数:无
//返回:无
//===================================================
.public	F_LookGetObj3rdData;
F_LookGetObj3rdData:
				call	F_GetObj3rdData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj4thData 
//语法:调用
//描述:获得第四个目标物体的数据
//参数:无
//返回:无
//===================================================
.public	F_LookGetObj4thData;
F_LookGetObj4thData:
				call	F_GetObj4thData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj5thData 
//语法:调用
//描述:获得第五个目标物体的数据
//参数:无
//返回:无
//===================================================			
.public	F_LookGetObj5thData;
F_LookGetObj5thData:
				call	F_GetObj5thData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj6thData 
//语法:调用
//描述:获得第六个目标物体的数据
//参数:无
//返回:无
//===================================================
.public	F_LookGetObj6thData;				
F_LookGetObj6thData:
				call	F_GetObj6thData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookGetObj7thData 
//语法:调用
//描述:获得第七个目标物体的数据
//参数:无
//返回:无
//===================================================
.public	F_LookGetObj7thData;
F_LookGetObj7thData:
				call	F_GetObj7thData;
				call	F_LookCheckTheObj;
				retf;
//===================================================
//函数:F_LookCheckTheObj 
//语法:调用
//描述:获得在合适的范围内的颜色、外型、远近的数值
//参数:无
//返回:无
//===================================================
.public	F_LookCheckTheObj;				
F_LookCheckTheObj:
//				r1 = [R_CenterX];
//				cmp	r1,0x30;
//				jb	L_LookNotRightShape;
//				r1 = [R_CenterX];
//				cmp	r1,0x70;
//				jae	L_LookNotRightShape;
				
//				r1 = [R_CenterY];
//				cmp	r1,0x1d;
//				jb	L_LookNotRightShape;
//				r1 = [R_CenterY];
//				cmp	r1,0x5a;
//				jae	L_LookNotRightShape;

				r1 = [R_Shape];
				cmp	r1,0x00;
				je	L_LookNotRightShape;
				
				r1 = [R_Shape];
				cmp	r1,0x05;
				jae	L_LookNotRightShape;
				
				r1 = [R_AreaH];
				cmp	r1,0x01;
				jb	L_LookNotRightShape;
L_LookHaveFoundTheObj:				
				r1 = [R_PreAreaH];
				cmp	r1,0x00;
				je	L_Fund1stObj;
				
				r1 = [R_AreaH];
				cmp	r1,[R_PreAreaH];
				jb L_LookNotRightShape;
L_Fund1stObj:
				r1 = [R_Color];
				[R_PreColor] = r1;
				
				r1 = [R_Shape]
				[R_PreShape] = r1;				
			
				r1 = [R_AreaH];
				[R_PreAreaH] = r1;			

				r1 = [R_CompX];
				[R_PreCompX] = r1;
				r1 = [R_CompY];
				[R_PreCompY] = r1;
		
				r1 = [R_SeekFlag];
				r1 |= 0x01;
				[R_SeekFlag] = r1;				
				retf;
L_LookNotRightShape:
				retf;	

//================================ Master.asm 结束 =============================



		
																																																																							    

⌨️ 快捷键说明

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