|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 lincoln24 于 2010-5-25 12:19 编辑
我用的是AD0804,按时序图写出的状态机程序,但是在数码管老是无法正常显示,数字不是老跳就是定在一个值不动,我让其每隔0.5秒就转换一次
- always@(posedge clk)
- if(sw)
- begin
- cs<=1;
- rd<=1;
- wr<=1;
- statead<=idle;
- end
- else
- case(statead)
- idle:
- if(reset)
- begin
- statead<=start;
- cs<=0;
- end
- else
- statead<=idle;
- start:
- begin
- statead<=deng;
- wr<=0;
- cntwr<=0;
- end
- deng:
- if(cntwr==4'd6)
- begin
- cntwr<=0;
- wr<=1;
- statead<=nobusy;
- cntbusy<=0;
- end
- else
- cntwr<=cntwr+1;
- nobusy:
- if(cntbusy==19'd5000)
- begin
- cntbusy<=0;
- statead<=trans;
- rd<=0;
- cnttrans<=0;
- end
- else
- cntbusy<=cntbusy+1;
- trans:
- if(cnttrans==4'd10)
- begin
- cnttrans<=0;
- vol<=db;
- rd<=1;
- statead<=final;
- end
- else
- cnttrans<=cnttrans+1;
- final:
- begin
- statead<=idle;
- cs<=1;
- end
- endcase
复制代码
注意打****号的语句,我感觉问题是不是就是出在这里,按datasheet里wr置高后有一段nobusy又有一段busy的时间,这段时间我一直不知道到底该取多少。。。请问这个延时过长的话或过短的话分别会造成什么情况啊?当然。。。我认为可能是这里有错误,可能其他地方时序也有不对,能有哪位好心人能全部看看就最好不过了 |
|