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

📄 main.c

📁 基于凌阳61开发板
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////
//文件描述 main.c
//描述:  7 blockers control system of test
///////////////////////////////////////////////////////////////////////////////
#include "SPCE061V004.h"
unsigned int switch1;

main()
{	
//unsigned int KeyCode,KeyNumber,codesign;								//获得键值,键值序号
unsigned int handswitch;
unsigned int doorswitch;
unsigned int j,k,l;
unsigned long int i;
unsigned int dirction;
unsigned int speed;
unsigned int step;
unsigned int failure;
unsigned int solveflow;
unsigned int result;
i=0;
do
{ 
	handswitch=0;
	doorswitch=0;
	failure=1;
//========================================================================================
//凌阳I/O口的初始化------(((***IOA0--3可能要预留给步进电机 4-5给电动推杆;6,7给内外摆电机 8,9为输入口; 10为高电平输出***)))
//(((***IOB2为中断(常高电平) IOA8-14控制数码管.IOB8-15为控制数码管的显示。使用动态显示)))
//IOA0--3-->高电平输出-->控制把手步进电机,IOA4,5-->高电平输出-->控制电动推杆正反转,IOA6内摆电机,IOA7外摆电机
//IOA15-->高电平输出-->LED灯和solenoid电磁铁(0x8000)
//IOB0-->输入口-->把手电机的接近开关,IOB1-->输入口-->柜门的接近开关
//IOB2为特殊功能-->设为输入口
//========================================================================================
*P_SystemClock = 0x0080;//系统频率设置为49.152MHz,强振模式
*P_IOA_Dir=0xffff;//全是高电平输出
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0xffff;
__asm("INT OFF");	//保护中断不受外部干扰
*P_IOB_Dir=0xfff0;				//IOB2~3是输入口,带下拉电阻的输入脚,为引脚第二功能
*P_IOB_Attrib=0xfff0;			//其余IOB脚为高电平输出引脚
*P_IOB_Data=0xfff0;				//开外中断1,2
*P_INT_Ctrl=C_IRQ3_EXT1;
*P_INT_Ctrl=C_IRQ3_EXT2;
//========================================================================================
//判断外摆臂是否关闭柜门
//========================================================================================
	__asm("INT IRQ");			//允许IRQ中断,关闭FIQ中断
	*P_IOA_Data=0x0080;		//启动外门摆臂电机
	switch1=1;
	//for(;switch1==1;)
//	{
//		while(switch1==0)		//当柜门的微动开关被触动后,触发单片机的外部中断
//		{
//			*P_IOA_Data=0x0000;		//关闭外门摆臂电机
//			switch1=2;//jump out of the circle
//		}
//		*P_Watchdog_Clear=C_WDTCLR;//clear watchdog清狗
//	}
//========================================================================================
//气动电机正转前进
//========================================================================================
	__asm("INT OFF");	//保护中断不受外部干扰
	*P_IOA_Data=0x0010;//气动电机正转前进
	DELAY(10);
//	do
//	{
//		handswitch=*P_IOB_Data;
//		handswitch&=0x0001;//判断接近开关是否为高电平,即接通。
//		*P_Watchdog_Clear=C_WDTCLR;
//	}while(!handswitch);//当handswitch是0时,接近开关断开,while即为真,则循环执行
//========================================================================================
//把手电机接近开关亮之后,停止气动电机,启动把手电机锁门(步进)
//========================================================================================
	*P_IOB_Data=0x0000;
	Delayus(10);
	DriveMoto(1,2,6);//步进电机锁门程序
//========================================================================================
//启动把手电机(步进),门锁上后,柜门接近开关应该接通,如不接通,则测试结束
//========================================================================================
	DELAY(1);//这里可能在后来需要调整,因为延时是要保证A口数据读入的正确,在稳定的前提下可以适当的减少	
	doorswitch=*P_IOB_Data;
	doorswitch&=0x0002;//判断柜门接近开关是否为高电平,即接通
	if(doorswitch==0x0002)
	{
		for(k=0;(doorswitch==0x0002)&(k<1);k++)
		{
			Delayus(10);
			DriveMoto(0,2,6);//步进电机锁门程序//反转步进电机,开门
			doorswitch=*P_IOB_Data;
			doorswitch&=0x0002;//判断接近开关有无故障产生			
		}
		if(doorswitch==0x0002)
		{
			failure=0;
		}
	}
//========================================================================================
//失败后的操作
//========================================================================================
	if(failure)
	{
		//i=64432;
		//for(;i>=50000;)
		//{
		//	solveflow++;
		//	i=i-50000;//soveflow为偶数时和奇数时不同
	//	}
		//Apart(i,solveflow);//接近开关没有反应则测试结束	
	
	//	*P_IOA_Data=0x0000;	
		goto end;
	}
	else
	{
		*P_IOA_Data=0x0000;//所有电机停机,//IOA15-->高电平输出-->LED灯和solenoid电磁铁,IOA6内摆电机,IOA7外摆电机
		Delayus(10);//us级延时,写间隙,清零IOA数据寄存器,保证新数据写入的正确
		*P_IOA_Data=0x8000;//置位IOA15,IOA15输出高电平,启动电磁铁和LED灯
		DELAY(1);//
		DriveMoto(0,2,6);//步进电机锁门程序//反转步进电机,开门
//========================================================================================
//IOA4,5-->高电平输出-->控制电动推杆正反转,IOA0-3-->高电平输出-->控制把手电机正反转
//========================================================================================
		*P_IOA_Data=0x0000;//所有电机停机  IOA6内摆电机,IOA7外摆电机
		Delayus(10);//us级延时,写间隙,清零IOA数据寄存器,保证新数据写入的正确
		*P_IOA_Data=0x0020;//控制电动推杆反转退回
		DELAY(10);
		*P_IOA_Data=0x0000;//电机停机
		Delayus(10);//us级延时,写间隙,清零IOA数据寄存器,保证新数据写入的正确
		*P_IOA_Data=0x0040;//启动内门摆臂电机
		DELAY(5);
		*P_IOA_Data=0x0000;//电机停机
		i++;
//		for(;i>=50000;)
//		{
//			solveflow++;
//			i=i-50000;//soveflow为偶数时和奇数时不同
//		}
	}
	Apart(i,solveflow);
}while(!failure);//判断错误标志位;
end: while(1)
	{
		Apart(i,solveflow);
		*P_Watchdog_Clear=C_WDTCLR;//clear watchdog清狗
	}
//可以设置按键,在此等待按键,复位重新测试。
}

⌨️ 快捷键说明

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