10位绝对性光电编码器的10位数据线可以直接连接在单片机的io口上吗!旋转时电平的变化可以直接被读取吗!

格雷码输出是否意味着电平的变化!!然后让单片机检测 从而通过转化二进制使用!!

光电编码器输出如达到0~5V,可以直接输入给单片机。
格雷码是二进制数的一种纠错码,需要转换为二进制数。追问

那请问 编码器旋转的时候单片机自动扫描io口电平的变化吗??还是 需要程序不断扫描!

追答

是需要编写程序不断读取编码器的数据
编码器一般采用两相式读取,A相先上升,接着再出现B相上升,表示编码器正转,读入加1数
反之B在前,A在后,表示编码器反转,读入减1数

追问

我的编码器直接输出10位格雷码!!10条数据线..1024分辨率 我想知道如何对这10位数采集(重点 采集是否要将10位数整合到一起) 并输出二进制(这个网上有对应的程序)

追答

直接读入单片机,再转换为二进制数。
单片机需要占用2个并行口,P1、P2,P1读入低八位,P2读入高二位。

追问

那这10位数用c语言该怎么写入啊!!这是我在网上看到的程序   式子中的x不明白怎么由10位io口得来啊!!求指点一下啊  麻烦了

追答

unsigned int y=x; //将格雷码x复制一份为y
while(x>>=1) //x右移1位
y^=x; //将x与y异或,赋值给 y
return //子函数返回

看来你还不清楚怎么将数据读入单片机。是吧?

追问

恩恩 !!是的 我就不清楚这10个io口的10位格雷码该怎么变成X呢??

追答

C51程序会写吗?
单片机电路会组装吗?
//读入程序
u8 a,b ; //定义2中间变量
P1=0xff ; //输入口写1
P2=0xff ;
a=P1; //读入低八位
b=P2; //读入高八位
b=b&0x03 //保留下面的2位
x=b*256+a; //组装

追问

厉害啊!!组装那步 困扰了我久!!最后一个问题,,P2口那样设置了之后岂不是用不了了!!本来10位数据线就占了很多资源,,我还想用P2的其余六个口!!!这样该怎么”组装“得到X啊!!!

追答

你10条线的并行数据,需要占用2个并行口,P2口只用到2位,还有6位可用。
可以按位操作使用。
你的10线数据是分开读入的,P2数据乘以256,再加上P1读入的数据就是装配成x。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-01
要看数据手册,有的光电编码器需要外部电路的支持的。这个可以在编码器的数据手册里找到的。
相似回答