|
参考论坛上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都不会点亮。请问这是为什么啊? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|