久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4588|回復: 4
收起左側

基于verilog語言的溫度檢測系統源程序

[復制鏈接]
ID:410231 發表于 2019-9-7 15:25 | 顯示全部樓層 |閱讀模式
當初開始做這個系統的時候苦于沒有一個成熟的代碼和時序圖幫助理解,網上的代碼往往被魔改過,在技術群里邊問問題基本上不回應,有一哥們甚至想1000塊賣我代碼……后來灑家爆肝一周把寫出代碼又調試完畢。本人比較認同黑客精神,認為網上的學習資源應該是免費使用的。因此在這里將灑家的代碼和仿真文件、仿真圖一并奉上,以供參考。如有不足,希望大家多多包涵指正。
read.png write_0x44.png write0xcc.png

Verilog源程序如下:
  1. module ds18b20_top
  2. (
  3.                 clkin,//時鐘
  4.                 resetin,//復位信號輸入
  5.                 ds18b20_bus,//ds18b20控制信號
  6.                 wrong,//錯誤信號
  7.                 temperature,//溫度輸出
  8.                 read//讀溫度命令
  9. );
  10. input clkin,resetin,read;
  11. inout ds18b20_bus;
  12. output[15:0] temperature;
  13. output wrong;

  14. parameter  reset1 = 1, //初始化
  15.                                         data1_1 = reset1 + 1000,//1000  寫0xcc
  16.                                         data1_2 = data1_1 + 600,//1600 寫0x44
  17.                                         reset2 = data1_2 + 600,//2200 初始化
  18.                                         data2_1 = reset2 + 1000,//3200 寫0xcc
  19.                                         data2_2 = data2_1 + 600,//3800 寫0xbe
  20.                                         read1 = data2_2 + 600,//4400 讀低字節
  21.                                         read2 = read1 + 600,//5000 讀高字節
  22.                                         read_end = read2 + 600;//5600
  23.                                        
  24. assign temperature = {tempH, tempL};
  25. reg[7:0] tempH, tempL;//溫度高字節 溫度低字節
  26. wire[7:0] temp;//
  27. wire[1:0] command;
  28. reg[1:0] state;
  29. reg divider_reset, ds18b20_reset, wrong;
  30. wire ds18b20_ok;
  31. //分頻時鐘
  32. wire clk_1MHz;
  33. reg start, stop;
  34. reg[8:0] ds18b20_byte_write;
  35. reg[15:0] clk_count;

  36. Divider Divide_1MHz(.reset(divider_reset), .clkin(clkin), .clkout(clk_1MHz));
  37. ds18b20_byte ds18b20(.clkin(clkin),
  38.                                                                         .resetin(start),
  39.                                                                         .ds18b20_command(ds18b20_byte_write),
  40.                                                                         .ds18b20_bus(ds18b20_bus),
  41.                                                                         .ds18b20_read(temp),
  42.                                                                         .ds18b20_reset(ds18b20_reset),
  43.                                                                         .ds18b20_ok(ds18b20_ok),
  44.                                                                         );
  45.                                                                        
  46. always @ (negedge resetin or posedge clk_1MHz)
  47.         if (!resetin)
  48.                 begin
  49.                         divider_reset<=1'b1;
  50.                         start<=0;
  51.                         clk_count<=0;
  52.                         ds18b20_reset<=0;
  53.                         wrong<=0;
  54.                         tempL<=0;
  55.                         tempH<=0;
  56.                         stop<=0;
  57.                 end
  58.         else
  59.                 begin                       
  60.                         //send 0xcc 0x44
  61.                         case(clk_count)
  62.                         reset1 - 1: ds18b20_reset<=1;
  63.                         reset1:start<=1;
  64.                         data1_1 - 1://數據準備
  65.                                 begin
  66.                                         if(ds18b20_ok!=1'b1)
  67.                                                 begin
  68.                                                         wrong<=1;
  69.                                                         stop<=1;
  70.                                                 end
  71.                                         else
  72.                                                 begin
  73.                                                         start<=0;
  74.                                                         ds18b20_reset<=0;
  75.                                                         ds18b20_byte_write<={8'hcc, 1'b1};
  76.                                                 end
  77.                                 end
  78.                         data1_1:start<=1;//數據發送
  79.                         data1_2 - 2://數據準備
  80.                                 begin
  81.                                         ds18b20_byte_write<={8'h44, 1'b1};
  82.                                         start<=0;
  83.                                 end
  84.                         data1_2:start<=1;//數據發送
  85.                         //send 0xcc 0xbe
  86.                         reset2 - 2:
  87.                                 begin
  88.                                         ds18b20_reset<=1;
  89.                                         start<=0;
  90.                                         if(!read)
  91.                                                 stop<=1;
  92.                                 end
  93.                         reset2 - 1:
  94.                                 begin
  95.                                         if(read)
  96.                                                 stop<=0;
  97.                                 end
  98.                         reset2:start<=1;
  99.                         data2_1 - 2://等待讀命令輸入
  100.                                 begin
  101.                                         if(ds18b20_ok!=1'b1)
  102.                                                 begin
  103.                                                         wrong<=1;
  104.                                                         stop<=1;
  105.                                                 end
  106.                                         else
  107.                                                 begin
  108.                                                         start<=0;
  109.                                                         ds18b20_reset<=0;
  110.                                                         ds18b20_byte_write<={8'hcc, 1'b1};
  111.                                                 end
  112.                                 end
  113.                         data2_1:start<=1;//開始讀溫度
  114.                         data2_2 - 2:
  115.                                 begin
  116.                                         ds18b20_byte_write<={8'hbe, 1'b1};
  117.                                         start<=0;
  118.                                 end
  119.                         data2_2:start<=1;
  120.                         read1 - 2://低字節
  121.                                 begin
  122.                                         ds18b20_byte_write<={8'h00, 1'b0};
  123.                                         start<=0;
  124.                                 end
  125.                         read1:start<=1;
  126.                         read2 - 2:
  127.                                 begin
  128.                                         tempL<=temp;
  129.                                         start<=0;
  130.                                 end
  131.                         read2:start<=1;//prepare for read, get tempH
  132.                         read_end://高字節
  133.                                 begin
  134.                                         start<=0;
  135.                                         tempH<=temp;
  136.                                         stop<=1;
  137.                                 end
  138.                         endcase
  139.                 if(!stop)
  140.                         clk_count<=(clk_count+1)%8000;
  141.                 end
  142. endmodule
復制代碼
0.png
所有資料51hei提供下載:
ds18b20.zip (8.75 KB, 下載次數: 61)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:163169 發表于 2019-10-5 14:03 | 顯示全部樓層
精神強贊!
回復

使用道具 舉報

ID:651992 發表于 2019-11-28 22:26 | 顯示全部樓層
樓主能不能私發一下程序!1341409561@qq.com
回復

使用道具 舉報

ID:651992 發表于 2019-11-29 00:10 | 顯示全部樓層
老哥,留個聯系方式,問您溫度檢測系統的問題
回復

使用道具 舉報

ID:72951 發表于 2020-3-26 19:13 | 顯示全部樓層
謝謝分享,贊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线 | 久久免费观看一级毛片 | 99re6在线视频精品免费 | 久久网一区二区三区 | 黄色片大全在线观看 | 午夜精品久久久久久久久久久久 | 欧美h视频 | 国产日批| 国产精品爱久久久久久久 | 国产一区欧美 | 亚洲成人精品久久久 | 欧美日韩亚洲视频 | 国产欧美精品一区二区色综合朱莉 | 日韩高清国产一区在线 | 天天av天天好逼 | 秋霞a级毛片在线看 | 精品久久久久久久 | 亚洲一区在线免费观看 | 久久九九色 | 日本三级电影免费 | 日韩在线免费视频 | 精品国产伦一区二区三区观看体验 | 精品一区国产 | 剑来高清在线观看 | 国产高清精品一区二区三区 | h小视频 | 亚洲精品乱码久久久久v最新版 | 成人 在线| 人人看人人干 | 欧美日韩在线视频观看 | 成人 在线| 一级日韩 | 国产一区二区激情视频 | 天天干天天爱天天 | 韩国精品在线观看 | 在线播放一区 | 一级一级毛片免费看 | 麻豆国产一区二区三区四区 | 欧美三级久久久 | 在线视频 亚洲 | 91精品国产91久久久久久 |