搜索
bottom↓
回复: 1

状态机工作不正常问题,希望有人帮我看看

[复制链接]

出0入0汤圆

发表于 2009-10-17 15:11:48 | 显示全部楼层 |阅读模式
参考论坛上zkf0100007的FPGA控制DS18B20程序。http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1079713&bbs_page_no=1&bbs_id=1029
我直接复制,在quartus下编译通过,但是不能工作。
现先测试DS18B20复位和响应。
部分程序如下:
STATE_TRANSITION:process(STATE,clk1m)
begin
if rising_edge(clk1m) then
        case STATE is
            when RESET=>
                        --**********
                        LED2<='0';  --用来指示是否工作在CMD_CC状态
                        --*********
            if (cnt>=0 and cnt<500) then
               dq<='0';
                            cnt<=cnt+1;
                                   STATE<=RESET;
                        elsif (cnt>=500 and cnt<510) then  --复位和等待
                                dq<='Z';
                                cnt<=cnt+1;
                                STATE<=RESET;
                   elsif (cnt>=510 and cnt<750) then      --检测是否有响应
                                temp<=dq;
                                if(cnt=580) then
                                        temp<=dq;
                                        if(temp='1') then;--LED用来显示是否复位成功。如果复位成功,DS18B20应该反馈一个低电平
                                                LED<='0'
                                        else LED<='1';--复位成功,电量LED
                                        end if;
                                end if;
                            cnt<=cnt+1;
                            STATE<=RESET;
                                elsif (cnt>=750) then
                                    cnt<=0;
                                    STATE<=CMD_CC;

                                end if;
                when CMD_CC=>
                        write_temp<="11001100";
                        LED2<='1';
                        LED3<='0';
                        STATE<=CMD_CC;  --让状态机在CMD_CC死循环,并点亮LED2
---------------------------
现在问题是,硬件测试如果将状态机在RESET死循环,则LED能点亮,即能检测到响应信号。可以,如果我状态机经历RESET、CMD_CC,并在CMD_CC死循环,则LED、LED2都不会点亮。请问这是为什么啊?

出0入0汤圆

 楼主| 发表于 2009-10-17 15:23:37 | 显示全部楼层
编译的时候程序提示:
Warning: Reduced register "write_temp[0]" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp[1]" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp[4]" with stuck data_in port to stuck value GND
Warning: Reduced register "write_temp[5]" with stuck data_in port to stuck value GND

其中,write_temp是用来输入传感器指令的。我将这行代码隐去后,就能正常点亮LED了。请问这是什么问题啊?
为什么这个reg write_temp会影响到我程序的执行呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 12:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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