bmdriver.c

来自「简单有效地辨别增量式编码器正反旋转子程序。提供两个返回值以区别。」· C语言 代码 · 共 64 行

C
64
字号
#include "c8051f020.h"
#include "BMDriver.h"
unsigned char ReadBM()
{
	static unsigned char EveCnt=0;
	unsigned char m;
	m=P3&0x03;
	switch(EveCnt)
	{
		case 0://保持状态0(口线保持信息为00)
			if(m!=0)
			{	
				if(m==1)//读入信息为01,表示正转	
				{
					EveCnt=1;
					return 1;
				}
				if(m==2)//读入信息为10,表示反转
				{
					EveCnt=1;
					return 2;
				}
				if(m==3)
				{
					EveCnt=2;
				}
			}
			break;

		case 1://等待保持状态切换到1
			if(m==0x03)
				EveCnt=2;//进入保持状态1
			break;
			
		case 2:	//保持状态1(口线保持信息为11)
			if(m!=3)
			{
				if(m==1)
				{	
					EveCnt=3;//读入信息为01,表示反转
					return 2;
				}
				if(m==2)
				{
					EveCnt=3;//读入信息为10,表示正转
					return 1;
				}
/*				if(m==0)
				{
					EveCnt=0;
				}*/
			}
			break;

		case 3://对读入信息11进行滤波处理
			if(m==0x00)
				EveCnt=0;//滤波成功表示保持切换,进入保持状态0
			break;

		default:break;
		
	}
	return(0);
}

⌨️ 快捷键说明

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