版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、-VHDL語言編寫 DS18B20 溫度傳感器程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity ds18B20 isport(clk : in std_logic;-50MHzdq: inout std_logic;rst: in std_logic;LED : out std_logic;LED2 : out std_logic;LED3 : out std_logic;dataout1,dataout2,dataout3
2、 : out std_logic_vector(6 downto 0 ); - 數(shù) end ds18B20;architecture Behavioral of ds18B20 isTYPE STATE_TYPE is (RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,WRITE_HIGH,READ_BIT, CMD_44,CMD_BE,W AIT800MS,GET_TMP,W AIT4MS); signal STATE: STATE_TYPE:=RESET;signal clk_temp : std_logic:=0;signal clk1m : std_logic; -
3、 分頻后得到的1M 時鐘signal cp: std_logic;- 1ms時鐘signal w : integer range 0 to 2 :=0; - xian shi shun xusignal write_temp : std_logic_vector(7 downto 0):=00000000;signal TMP : std_logic_vector(11 downto 0);signal tmp_bit : std_logic;signal WRITE_BYTE_CNT : integer range 0 to 8:=0;signal WRITE_LOW_CNT : integ
4、er range 0 to 2:=0;signal WRITE_HIGH_CNT : integer range 0 to 2:=0;signal READ_BIT_CNT : integer range 0 to 3:=0;signal GET_TMP_CNT : integer range 0 to 13:=0;signal cnt : integer range 0 to 100_001:=0;-*signal cnt2 : integer range 0 to 4000001:=0;signal temp : std_logic;signal data_temp0 : std_logi
5、c_vector(15 downto 0);signal decimal0 : std_logic_vector(15 downto 0);signal decimal1 : std_logic_vector(15 downto 0);signal decimal2 : std_logic_vector(15 downto 0);signal decimal3 : std_logic_vector(15 downto 0);signal data_temp1 : std_logic_vector(7 downto 0);signal integer0 : std_logic_vector(7
6、downto 0);signal integer1 : std_logic_vector(7 downto 0);signal integer2 : std_logic_vector(7 downto 0);signal integer3 : std_logic_vector(7 downto 0);signal integer4 : std_logic_vector(7 downto 0);signal integer5 : std_logic_vector(7 downto 0);signal integer6 : std_logic_vector(7 downto 0);signal s
7、ign : std_logic_vector(7 downto 0);signal count : integer range 0 to 51:=0;signal WRITE_BYTE_FLAG : integer range 0 to 4:=0;function dis(num: std_logic_vector) return std_logic_vector isbegincase num iswhen 0000 = return 1000000; -0when 0001 = return 1111001; -1when 0010 = return 0100100; -2when 001
8、1 = return 0110000; -3when 0100 = return 0011001; -4when 0101 = return 0010010; -5when 0110 = return 0000010; -6when 0111 = return 1111000; -7when 1000 = return 0000000; -8when 1001 = return 0010000; -9when 1010 = return 0001000; -Awhen 1011 = return 0000011; -bwhen 1100 = return 1000110; -Cwhen 110
9、1 = return 0100001; -dwhen 1110 = return 0000110; -Ewhen 1111 = return 0001110; -Fwhen others = return 1111111; -mieend case;end dis;begin-ClkDivider:process (clk,clk_temp)beginif rising_edge(clk) thenif (count = 24) thencount = 0;clk_temp= not clk_temp;elsecount = count +1;end if;end if;clk1m12000)
10、 then n:=0;cp=not cp;end if;end if;end Process;STATE_TRANSITION:process(STATE,clk1m)beginif rising_edge(clk1m) thenif(rst=0) thenSTATE-*LED2=0;-*-LED3=0 and cnt500) then - 500 s 的復(fù)位低電平dq=0;-dq 作為輸出cnt=cnt+1;STATE=500 and cnt510) then - 高阻態(tài)再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣 ,高阻態(tài)可以應(yīng)用在 inout 端口里面, 這樣在 inout 沒
11、有輸出的時候就弄個高阻態(tài),這樣就其電平就可以由外面的輸入信號決定了dq=Z;cnt=cnt+1;STATE=510 and cnt750) then- 240 stemp=dq; -dqif(cnt=580) thentemp=dq;if(temp=1) thenLED=0;else LED=1;end if;end if;作為輸入cnt=cnt+1;STATE=750) thencnt=0; - 計數(shù)器清零STATE-跳躍 rom 指令“ CC”LED2=1;LED3=0;write_temp=11001100;STATEcase WRITE_BYTE_CNT iswhen 0 to 7=i
12、f (write_temp(WRITE_BYTE_CNT)=0) thenSTATE=WRITE_LOW;LED3=1;elserom指令“CC”STATE=WRITE_HIGH;end if;WRITE_BYTE_CNTif (WRITE_BYTE_FLAG=0) then - 第一次寫 0XCC 完畢 STATE=CMD_44;WRITE_BYTE_FLAG=1;elsif (WRITE_BYTE_FLAG=1) then -寫 0X44完畢(寫溫度轉(zhuǎn)換指令后沒有讀數(shù)據(jù)?)STATE=RESET;WRITE_BYTE_FLAG=2;elsif (WRITE_BYTE_FLAG=2) the
13、n -第二次寫0XCC完畢STATE=CMD_BE;WRITE_BYTE_FLAG=3;elsif (WRITE_BYTE_FLAG=3) then -寫 0XBE完畢STATE=GET_TMP;WRITE_BYTE_FLAG=0;end if;WRITE_BYTE_CNTSTATELED3dq=0;if (cnt=70) thencnt=0;WRITE_LOW_CNT=1;elsecntdq=Z;if (cnt=5) thencnt=0;WRITE_LOW_CNT=2;elsecntSTATE=WRITE_BYTE;WRITE_LOW_CNTWRITE_LOW_CNTcase WRITE_H
14、IGH_CNT iswhen 0=dq=0;if (cnt=8) thencnt=0;WRITE_HIGH_CNT=1;elsecntdq=Z;if (cnt=72) thencnt=0;WRITE_HIGH_CNT=2;elsecntSTATE=WRITE_BYTE;WRITE_HIGH_CNTWRITE_HIGH_CNTwrite_temp=01000100;STATEwrite_temp=10111110;STATEcase READ_BIT_CNT iswhen 0=dq=0;-4 s 的低電平if (cnt=4) thenREAD_BIT_CNT=1;cnt=0;elsecntdq=
15、Z; -4 s 的高電平if (cnt=4) thenREAD_BIT_CNT=2;cnt=0;elsecntdq=Z;TMP_BIT=dq; -12 s 讀出數(shù)據(jù)if (cnt=4) thenREAD_BIT_CNT=3;cnt=0;elsecnt-dq=Z;-控制器拉高總線-if (cnt=50) then - 讀出數(shù)據(jù)后,等待cnt=0;READ_BIT_CNT=0;STATE=GET_TMP;elsecntREAD_BIT_CNTcase GET_TMP_CNT iswhen 0 =STATE=READ_BIT;GET_TMP_CNTSTATE=READ_BIT;TMP(GET_TMP_CNT-1)=TMP_BIT;-將讀出的每一位數(shù)據(jù)按順序存進(jìn)TMP ( 0 to11)里面GET_TMP_CNTGET_TMP_CNT=0;STATEif (cnt=4000) then-STATE=WAIT4M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度物流配送中心租賃及智能改造合同3篇
- 園路及節(jié)點廣場鋪裝工程施工方案
- 加油站司泵員職責(zé)模版(2篇)
- 爆破器材管理人員崗位責(zé)任制范例(2篇)
- 家裝公司銷售實習(xí)報告
- 2024年行政后勤工作總結(jié)(2篇)
- 2024年在創(chuàng)先爭優(yōu)活動經(jīng)驗交流大會上的講話(3篇)
- 四中教職工暑期旅游、休養(yǎng)、考察活動規(guī)定(4篇)
- 2024年皮帶隊材料員安全生產(chǎn)責(zé)任制(2篇)
- 銷售2024年工作總結(jié)標(biāo)準(zhǔn)范文(2篇)
- 統(tǒng)計學(xué)專業(yè)經(jīng)典案例分析
- 電梯及電梯配件項目可行性研究報告寫作范文
- 腦電圖(圖譜).ppt課件
- 計算機(jī)聯(lián)鎖接口設(shè)計規(guī)范
- 電鍍生產(chǎn)停電應(yīng)急程序
- 部編版(統(tǒng)編)小學(xué)語文三年級上冊期末試卷(含答題卡)
- 崗位標(biāo)準(zhǔn)之鐵路工務(wù)線路工崗位作業(yè)標(biāo)準(zhǔn)
- 一人一檔檔案模板
- 給稅務(wù)局的情況說明
- 臨時豎井旋噴樁首件施工總結(jié)
- 65歲老年人體檢報告單(共1頁)
評論
0/150
提交評論