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

📄 mada.c

📁 mcs51单片机控制油泵工作。通过步进电机来控制油门的大小。
💻 C
字号:
#include <pic.h>

#define		PS		RB3
#define		INA		RB0
#define		INB		RB1

bit Fin;
unsigned int i, j, cnt, MotorNum;
unsigned char motor,Tbuf,Tcnt;
unsigned long int TD1,TD2,TD3;

void step(void);

void main (void)
{
	TRISE = 0x00;
	ADCON1 = 0x0F;
	
	TRISB = 0x00;
	PS = 0;

//guan jian can shu.
	MotorNum = 128;
	cnt = 128;

//初始化TIME0
	OPTION = 0x87;
	TMR0IE = 1;
	TMR0IF = 0;

//外部中断.
	INTF = 0;
	INTE = 1;

//初始化TIME1.
	T1CON = 0x00;
	TMR1IE = 0;
	TMR1IF = 0;		

	PEIE = 1;
	GIE = 1;
	while(1)
	{
		for(i = 0; i < 20000; i++);

/*
		//PORTB ^= 0x0F;
		if(Fin)
		{
			RB3 = 1;
			cnt ++;
			if(cnt > 800)
				Fin = 0;
		}
		else
		{
			RB3 = 0;
			cnt --;
			if(cnt < 10)
				Fin = 1;
		}
*/
		NOP();
	}
}

void interrupt isr (void)
{
	if (INTE && INTF)
	{
		TMR1ON = 0;
		TD1 = Tbuf;
		if (TMR1IF)
		{
			TD1 ++;
		}
		TD1 <= 8;
		TD1 += TMR1H;
		TD1 <= 8;
		TD1 += TMR1L;
		
		Tbuf = 0;
		TMR1H = 0;
		TMR1L = 0;
		TMR1IF = 0;
		TMR1ON = 1;
		
		if (TD1 > 19417)
			TD2 = TD1 - 19417;
		else
			TD2 = 19417 - TD1;
		
		if (TD2 > 250)
		{
			if (TD2 > TD3)
				Fin = !Fin;

			if (Tcnt > 2)
			{
				TD3 = TD2;
				Tcnt = 1;
			}
			Tcnt ++;

			if (Fin)
				cnt ++;
			else
				cnt --;		
		}
	}

	if (TMR1IF && TMR1IE)
	{
		TMR1IF = 0;
		Tbuf ++;
	}

	if (TMR0IE && TMR0IF)
	{
		TMR0IF = 0;
		TMR0 = 0xEC;
		step();
	}
}

void step(void)
{
	if(MotorNum == cnt)
	{
		return ;
	}
	else if (MotorNum < cnt)
	{
		MotorNum ++;
		motor ++;
		if (motor > 4)
			motor = 1;
	}
	else 
	{
		MotorNum --;
		motor --;
		if (motor < 1)
			motor = 4;
	}

	if(motor == 1)
	{
		INA = 0;
		INB = 1;
	}
	else if (motor == 2)
	{
		INA = 0;
		INB = 0;	
	}
	else if (motor == 3)
	{
		INA = 1;
		INB = 0;
	}
	else
	{
		INA = 1;
		INB = 1;
	}
}

⌨️ 快捷键说明

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