OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5842|回复: 3

增量式光电编码器的程序

[复制链接]

11

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-10-18
在线时间
15 小时
发表于 2019-4-3 21:20:31 | 显示全部楼层 |阅读模式
1金钱
module encoder(clk,rst_n,a_in,b_in,count,dire);
input clk;
input rst_n;
input a_in;
input b_in;
output reg [15:0] count;
output reg dire;

always@(posedge clk or negedge rst_n)
begin
if(!rst_n)begin
cp<=1'b0;
end
else begin
state[1]<=a_in;
state[0]<=b_in;
prestate<=state;
if((prestate==2'b00)&&(state==2'b10))begin  
cp<=1'b1;dire<=1'b1;
end
else if((prestate==2'b10)&&(state==2'b11))begin
cp<=1'b1;dire<=1'b1;
end
else if((prestate==2'b11)&&(state==2'b01))begin
cp<=1'b1;dire<=1'b1;
end
else if((prestate==2'b01)&&(state==2'b00))begin
cp<=1'b1;dire<=1'b1;
end
else if((prestate==2'b00)&&(state==2'b01))begin
cp<=1'b1;dire<=1'b0;
end
else if((prestate==2'b01)&&(state==2'b11))begin
cp<=1'b1;dire<=1'b0;
end
else if((prestate==2'b11)&&(state==2'b10))begin
cp<=1'b1;dire<=1'b0;
end
else if((prestate==2'b10)&&(state==2'b00))begin
cp<=1'b1;dire<=1'b0;
end
else
begin
cp<=1'b0;
end
end
end

always@(cp or rst_n)
if(!rst_n)begin
count<=16'd0;
end
else if(cp==1'b1)begin
count<=count+1'b1;
end
endmodule

先不管方向,这种应该没错吧

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-10-18
在线时间
15 小时
 楼主| 发表于 2019-4-3 21:20:32 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2019-4-4 02:04:48 | 显示全部楼层
帮顶
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14253
金钱
14253
注册时间
2018-8-3
在线时间
1146 小时
发表于 2019-4-4 09:33:26 | 显示全部楼层
帮顶!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 05:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表