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

📄 cutter.c

📁 一个用单片机控制饲服电机的程序
💻 C
字号:
#include <REG51.H>
#include <intrins.h>
#define	ON		0
#define	OFF	1
#define	uint	unsigned int
#define	uchar	unsigned	char
#define	IN9	P3^0
#define	IN10	P3^1
#define	IN11	P3^2
#define	IN12	P3^3
#define	IN13	P3^4
#define	Out1	P0^0
#define	Out2	P0^1
#define	Out3	P0^2
#define	Out4	P0^3
#define	Out5	P0^4
#define	Out6	P0^5

sbit	Start		=IN9;
sbit	Dirc		=IN10;
sbit	Stop		=IN11;
sbit	DH48S		=IN12;
sbit	Sensor	=IN13;


sbit	K1			=Out1;
sbit	K2			=Out2;
sbit	RED		=Out3;
sbit	Buzzer	=Out4;
sbit	Reset		=Out5;
sbit	Count1		=Out6;

sbit	Puls	=P3^7;
sbit	Sign	=P3^6;


uchar	bdata	SetFlag;
sbit	StartFlag	=SetFlag^0;
sbit	DircFlag		=SetFlag^1;
sbit	StopFlag		=SetFlag^2;
sbit	DH48SFlag	=SetFlag^3;
sbit	MotorFlag	=SetFlag^4;
sbit	int1Flag		=SetFlag^5;
sbit	RunOKflag	=SetFlag^6;//用来检查纸有没有被堵,空跑时没有检测到纸时也会报警

uchar		data	Count;//读8421码所得到的数
uchar		data	Timer_Count=0;
uchar	data	SensCount=0;

void tst_nop_(void);

void	Initial(void);

uchar	Read_8421Code(void);

void	DelayXms(uint);

uint	CheckInput(void);

void	ResetTimer1(void);

void	CloseTimer1(void);

void	ResetCount0(void);

void	CloseCount0(void);

void	RunMotor(void);

void	StopMotor(void);


void main(){
	uint	i=0;
	uchar	j=0;
	Initial();
	while(1){

		i=	CheckInput();
		if(i!=1)
			continue;
		if(StartFlag!=1)
			continue;
		else{
			ResetCount0();
			MotorFlag=1;
			Sign=ON;
			
			DelayXms(50);
			ResetTimer1();
			while(MotorFlag==1){
				if(Sign==1){
					Sign=0;
					DelayXms(50);
				}
				RunMotor();
			}
		}
	}
}

void tst_nop_(void){
	_nop_();
	_nop_();


}
void	Initial(void){
//	RunOKflag=1;
	P0=0xff;
	P1=0xff;
	P2=0xff;
	P3=0xff;
	SetFlag=0;
	TMOD=0x16;
	PT0=1;
	TH0=0xff;
	TL0=0xff;
	TH1=0x00;
	TL1=0x00;
	ET0=0;
	ET1=0;
	TR0=0;
	TR1=0;
	TF0=0;
	TF1=0;
	IT0=0;
	IT1=1;
	EX0=1;
	EX1=1;
	IE0=0;
	IE1=0;
	PX0=1;
//	Count=0;
	EA=1;
}

uchar	Read_8421Code(void){
	uchar	data	Code=0;
	P1=0xff;
	DelayXms(10);
	Code=P1;
	Code=~Code;
	if(Code<=0x09)
		return	Code;
	if(Code>=0x10 && Code<=0x19){
		Code=Code-6;
		return	Code;
	}
	if(Code>=0x20 && Code<=0x29){
		Code=Code-12;
		return	Code;
	}
	if(Code>=0x30 && Code<=0x39){
		Code=Code-18;
		return	Code;
	}
	if(Code>=0x40 && Code<=0x49){
		Code=Code-24;
		return	Code;
	}

	if(Code>=0x50 && Code<=0x59){
		Code=Code-30;
		return	Code;
	}
	if(Code>=0x60 && Code<=0x69){
		Code=Code-36;
		return	Code;
	}
	if(Code>=0x70 && Code<=0x79){
		Code=Code-42;
		return	Code;
	}
	if(Code>=0x80 && Code<=0x89){
		Code=Code-48;
		return	Code;
	}
	if(Code>=0x90 && Code<=0x99){
		Code=Code-56;
		return	Code;
	}
}

void	DelayXms( uint x){
	uchar i,j;
	uint k,h;
	k=x;
	for(h=0;h<k;h++)
		for(i=0;i<2;i++)
			for(j=0;j<255;j++);
			}


	

void	ResetTimer1(void){
	ET1=0;
	TR1=0;
	Timer_Count=0;
	TH1=0x00;
	TL1=0x00;
	ET1=1;
	TR1=1;
	EA=1;
}
void	CloseTimer1(void){
	TR1=0;
	ET1=0;
}
void	ResetCount0(void){
	ET0=0;
	TR0=0;
	TH0=0xff;
	TL0=0xff;
	ET0=1;
	TR0=1;
	EA=1;
}
void	CloseCount0(void){
	TR0=0;
	ET0=0;
}
uint	CheckInput(void){
	uchar	i=0;
	
//	if((int1Flag==1) || ((!Start)==1)){
	if(!Start){
		DelayXms(10);
	   if(!Start){
//	if((int1Flag==1) || ((!Start)==1)){
			StartFlag=1;
			i=Read_8421Code();
			if(i!=0){
				Count=i;
				return	1;
			}
			else{
				Buzzer=ON;
				DelayXms(4000);
				Buzzer=OFF;
				return	0;
			}
		}
	}

	 return	0;
}

void	RunMotor(void){
	Puls=0;
	

	tst_nop_();
	Puls=!Puls;
	if(SensCount==(Count-1)){
		tst_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
	}


	tst_nop_();
	

}

void	StopMotor(void){
	Puls=1;
	Sign=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();



}

void int0() interrupt	0	using	1{
	
	StopMotor();
	Buzzer=OFF;
	MotorFlag=0;
	StartFlag=0;
	CloseTimer1();
	CloseCount0();
	EA=0;
	SensCount=0;
}

void	Count0_0()	interrupt	1	using 2{
	SensCount++;
	RunOKflag=1;
	if(SensCount==Count){//用来判断是不是遍马器的问题。
		StopMotor();
		CloseTimer1();
		CloseCount0();
		EA=0;
		K1=ON;
		SensCount=0;
		DelayXms(200);
		K1=OFF;
//		DelayXms(100);

		Count1=ON;
		DelayXms(100);
		Count1=OFF;
		K2=ON;
		DelayXms(200);
		K2=OFF;
//		DelayXms(500);
		ResetTimer1();
		ResetCount0();
	}
}

void	int1()	interrupt	2	using	3{
		StopMotor();
		CloseTimer1();
		CloseCount0();
		Buzzer=ON;
		Reset=ON;
//		DelayXms(1000);
		
		DelayXms(3000);
		Reset=OFF;
		Buzzer=OFF;
		MotorFlag=0;
		StartFlag=0;
		SensCount=0;
//		int1Flag=1;
}

void 	Timer1_1()	interrupt	3	using	0{
	
	TR1=0;
	ET1=0;
	Timer_Count++;
	TH1=0x00;
	TL1=0x00;
	if(Timer_Count==30){
		if(RunOKflag!=1){
			StopMotor();
			CloseTimer1();
			CloseCount0();
			Buzzer=ON;
			DelayXms(3500);
			Buzzer=OFF;
			MotorFlag=0;
			StartFlag=0;
			SensCount=0;
			Timer_Count=0;
			RunOKflag=0;
//			RunOKflag=0;
		}
		else{
			Timer_Count=0;
			RunOKflag=0;
			TR1=1;
			ET1=1;
			}
	}
	else{
		TR1=1;
		ET1=1;
//		ET1=1;
//		TR1=1;

}
}






	




	
		
		




					





	













			

	



⌨️ 快捷键说明

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