基于FPGA的温度传感器DS B 读写代码
基于FPGA温度传感器DS18B20的Verilog设计

基于FPGA温度传感器DS18B20的Verilog设计赖青松(江西师范大学南昌电子信息工程)摘要: 本文利用数字温度传感器DS18B20 的数据接口和特点,阐述了一种基于现场可编程门阵列( FPGA)控制DS18B20的方法。
使用FPGA 作为控制器,严格控制DS18B20 的时序,在单总线上实现读写功能,完成测量数字温度的功能。
将测量的二进制数转换为BCD 码,并通过数码管显示。
系统设计使用Verilog 语言。
由于DS18B20 是采用一根I/ O 总线读写数据,因此DS18B20 对读写数据位有严格的时序要求。
DS18B20 遵循相应的通信协议从而保证数据传输的正确性和完整性。
该通信协议定义了多种信号时序:初始化时序、写时序、读时序1、初始化时序:During the initialization sequence the bus master transmits (TX) the reset pulse by pulling the 1-Wire bus low for a minimum of 480us. The bus master then releases the bus and goes into receive mode (RX). When the bus is released, the 5k pullup resistor pulls the 1-Wire bus high.When the DS18B20 detects this rising edge, it waits 15us to 60us and then transmits a presence pulse by pulling the 1-Wire bus low for 60us to 240us.初始化时序中,控制器发送一个480us-960us的低电平的复位信号,然后释放总线,也就是总线为高电平,此时,控制器准备接收DS18B20的反应信号,当总线释放后,如果存在DS18B20,那么DS18B20将在15-60us内发送一个持续60-240us的反应信号。
(完整版)读取DS18B20温度传感器的64位ID号方法及程序

#include <reg52.h>#define uchar unsigned char#define uint unsigned int/********************************************************************/ sbit DQ = P2^2; //温度传感器信号线sbit rs = P3^5; //LCD数据/命令选择端(H/L)位声明sbit lcden = P3^4; //LCD使能信号端位声明/********************************************************************/ //uint temp; //定义整型的温度数据//float f_temp; //定义浮点型的温度数据//uint warn_11 = 270; //定义温度设定值,是温度值乘以10后的结果//uint warn_12 = 250; //定义温度下限值//uint warn_h1 = 300; //定义温度上限值/********************************************************************/ void delay(uint z); //延时函数void DS18B20_Reset(void); //DQ18B20复位,初始化函数bit DS18B20_Readbit(void); //读1位数据函数uchar DS18B20_ReadByte(void); //读1个字节数据函数void DS18B20_WriteByte(uchar dat); //向DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com); //1602液晶命令写入函数void LCD_WriteData(uchar dat); //1602液晶数据写入函数void LCD_Init(); //LCD初始化函数void Display18B20Rom(char Rom); //显示18B20序列号函数/**********************************************//* 主函数 *//**********************************************/void main(){ uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33);delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);}/***************************************************//* 延时函数:void delay() *//* 功能:延时函数 *//***************************************************/void delay(uint z)//延时函数{uint x,y;for( x = z; x > 0; x-- )for( y = 110; y > 0; y-- );}/***************************************************//* DS18B20函数:void DS18B20_Reset() *//* 功能:复位18B20 */ /***************************************************/void DS18B20_Reset(void)//DQ18B20复位,初始化函数{uint i;DQ = 0;i = 103;while( i > 0 ) i--;DQ = 1;i = 4;while( i > 0 ) i--;}/***************************************************//* DS18B20函数:void DS18B20_Readbit() *//* 功能:读1个字节数据函数 *//***************************************************/bit DS18B20_Readbit(void) //读1位数据函数{uint i;bit dat;DQ = 0;i++; //i++起延时作用DQ = 1;i++;i++;dat = DQ;i = 8;while( i > 0 )i--;return( dat );}/***************************************************//* DS18B20函数:void DS18B20_ReadByte() *//* 功能:读1个字节数据函数 */ /***************************************************/uchar DS18B20_ReadByte(void) //读1个字节数据函数{uchar i,j,dat;dat = 0;for( i = 1; i <= 8; i++ ){j = DS18B20_Readbit();dat = ( j << 7 ) | ( dat >> 1 );}return(dat);}/***************************************************//* DS18B20函数:void DS18B20_WriteByte() *//* 功能:向DQ18B20写一个字节数据函数 *//***************************************************/void DS18B20_WriteByte(uchar dat) //向DQ18B20写一个字节数据函数{uint i;uchar j;bit testb;for( j=1; j<=8; j++){testb = dat&0x01;dat= dat>>1;if(testb) //写1{DQ = 0;i++;i++;DQ = 1;i = 8;while(i>0)i--;}else{DQ = 0; //写0i = 8;while(i>0)i--;DQ = 1;i++;i++;}}}/***********************************************//* LCD函数:void LCD_WriteCom() *//* 功能:向LCD写入命令 *//***********************************************/void LCD_WriteCom(uchar com){rs = 0;P0 = com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;}/***********************************************//* LCD函数:void LCD_WriteData(uchar dat) *//* 功能:向LCD写入数据 *//***********************************************/void LCD_WriteData(uchar dat){rs = 1; //选择LCD为写入数据状态lcden = 0;P0 = dat; //将待写入数据放到总线上delay(5);lcden = 1; //给LCD使能端一个脉冲delay(5); //信号将之前放到总线上lcden = 0; //的数据写入LCDdelay(5);}/***********************************************//* LCD函数:void LCD_Init() */ /* 功能:初始化LCD,设定LCD的初始状态 *//***********************************************/void LCD_Init(){LCD_WriteCom(0x38); //LCD显示模式设定delay(15);LCD_WriteCom(0x08); //关闭LCD显示delay(3);LCD_WriteCom(0x01); //LCD显示清屏delay(3);LCD_WriteCom(0x06); //设定光标地址指针为自动加1delay(3);LCD_WriteCom(0x0c); //打开LCD显示,但不显示光标}/**********************************************//* */ /* 显示18B20序列号 *//* *//**********************************************/void Display18B20Rom(char Rom){uchar h,l;l = Rom & 0x0f; //取低4位h = Rom & 0xf0; //取高4位h >>= 4;if( ( h >= 0x00 )&&( h <= 0x09 ) )LCD_WriteData(h+0x30); //取ASCII码elseLCD_WriteData(h+0x37); //取ASCII码if( ( l >= 0x00 )&&( l <= 0x09 ) )LCD_WriteData(l+0x30); //取ASCII码elseLCD_WriteData(l+0x37); //取ASCII码}。
基于FPGA的DS18B20控制程序设计及其Verilog实现(汇编)

基于FPGA的DS18B20控制程序设计及其Verilog实现一,总体介绍DS18B20是一个1-wire总线,12bit的数字温度传感器,其详细的参数这里不做具体的介绍,只讨论其基于Verilog的控制程序的设计。
实际上,对DS18B20的控制,主要是实现1-wire总线的初始化,读,写等操作,然后再根据DS18B20的控制要求,实现对其控制的verilog逻辑。
在1-Wire总线上,有一个master,可以有1个或者多个slave。
而对于FPGA+DS18B20的温度测试设计来讲,需要在FPGA上实现一个1-Wire总线的master。
DS18B20作为1-wire 总线的slave设备存在,可以有一个或者多个,不过为了简化程序,例程里假定只存在一个DS18B2020。
1-Wire总线的操作形式上相对简单,但操作本身相对却又比较复杂。
用Verilog做控制程序设计时,可以采用多层次嵌套的状态机来实现。
二,FPGA + DS18B20的硬件设计硬件的设计非常简单,只需要将DS18B20的DQ与FPGA的一个IO连接,并加4.7K左右的上拉电阻就可以了。
VDD和VPU可以为3.0~5.0V。
这里我们参照FPGA本身的IO电压,选择3.3V。
另外要注意的一点是,由于DQ的数据是双向的,所以FPGA的该IO要设定为inout类型。
三,1-Wire总线的基本操作及Verilog实现。
根据1-Wire总线的特点,可以把1-Wire总线的操作归结为初始化,单bit读操作,单bit写操作等最基础的几种。
下面分别是几种基本操作的介绍和verilog实现。
由于DS18B20的时序操作的最小单位基本上是1us,所以在该设计中,全部采用1MHz的时钟。
1. 初始化初始化实际上就是1-wire总线上的Reset操作。
由master发出一定长度的初始化信号。
Slave 看到该初始化信号后,在一定时间内发出规定长度的响应信号,然后初始化操作就结束了。
基于FPGA智能温度传感器监控报警系统的设计

基于FPGA智能温度传感器监控报警系统的设计概述本文将详细介绍基于FPGA智能温度传感器监控报警系统的设计。
该系统由FPGA、温度传感器和报警器等组成,可以实时采集环境温度数据并进行处理,同时还可以根据设定的报警阈值进行温度报警。
该系统具有实时性、准确性和灵敏度高等优点,在工业、仓储等领域有广泛应用价值。
设计方案系统硬件设计智能温度传感器智能温度传感器采用DS18B20数字温度传感器,其精度高、体积小、响应速度快、使用方便等优点,能够满足系统的需要。
传感器输出数字量信号,可通过FPGA进行处理并转化为模拟量信号。
FPGAFPGA是本系统的核心部件,负责实现数字信号处理和温度阈值报警功能。
我们选用Xilinx Spartan-6系列FPGA,其具有高速、低功耗、可编程等特点,同时还有丰富的外设资源可以扩展。
报警器为了保证报警的及时和可靠性,我们使用了声光报警器,其能够在温度超出设定阈值时及时报警。
系统软件设计VHDL设计我们采用了VHDL语言对系统进行设计,通过其高级抽象、可移植性强等特点,实现了可适应性强、代码简洁的设计。
其中,数字信号处理主要包含数据的采集、过滤和频率变换等部分;温度阈值报警主要包含数据的计算和闸门控制等。
界面设计为了让用户更加便捷地使用该系统,我们设计了简洁明了的界面,包括温度值显示、报警阈值设置和报警状态等。
系统实现硬件实现按照上述设计方案,我们完成了硬件电路的设计,其中智能温度传感器采用了标准接口,与FPGA连接顺畅稳定。
报警器也能有良好的响应效果。
软件实现通过VHDL语言,我们完成了数字信号处理和温度报警部分的代码编写,在模拟器中进行了仿真和调试,并进行了综合和布局。
最终在FPGA平台上进行了验证,并与界面进行了充分交互。
结果分析经过系统实现,我们完成了一个基于FPGA智能温度传感器监控报警系统的设计。
在实际测试中,该系统具有所需的准确性、灵敏度和实时性等特点,能够实时采集环境温度并进行温度阈值报警。
(完整版)基于FPGA的温度传感器课程设计

FPGA课程设计论文学生姓名周悦学号20091321018院系电子与信息工程学院专业电子科学与技术指导教师李敏二O一二年5月28 日基于FPGA的温度传感器系统设计1引言温度是一种最基本的环境参数,人们的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器;模拟集成温度传感器;智能集成温度传感器。
目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。
本文将介绍采用智能集成温度传感器DS18B20,并以FPGA为控制器的温度测量装置的硬件组成和软件设计,用液晶来实现温度显示。
2电路分析系统框图如下:第一部分:DS18B20温度传感器美国 Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的 DS18B20 体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
DS18B20 的主要特性:(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯(3)DS18B20 支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,实现组网多点测(4)DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃(6)可编程的分辨率为 9~12位,对应的可分辨温度分别为 0.5℃、0.25℃、0.125℃和 0.0625℃,可实现高精度测温(7)在 9 位分辨率时最多在93.75ms 内把温度转换为数字,12 位分辨率时最多在 750ms 内把温度值转换为数字,速度更快(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
基于FPGA的数字温度传感器控制方法

基于FPGA的数字温度传感器控制方法摘要:本文作者结合实际工作经验,首先介绍了数字温度传感器DS18B20的数据接口和特点,并阐述了一种基于现场可编程门阵列(FPGA)控制DS18B20的方法,最后对基于FPGA的数字温度传感器控制方法进行了深入的研究,具有重要的参考意义。
关键词:现场可编程门阵列;数字温度传感器;硬件描述语言0.引言随着市场经济和现代工业、农业、国防等领域的高速发展,测试控制系统技术已经成为现代企业生产能力、市场竞争力和高科技中的一项不可缺少的核心技术。
测试控制装备也己经成为各个工业控制、国防安全、民用家居的一个重要的组成部分。
在科学研究和工程实践的过程中,测试和控制是整个应用系统的两个最主要的任务,也是体现整个系统处理实际工程问题、撤禾4?开参考材料的重要途径。
测试控制系统在工程控制和工业生产中起着指导者和检验者的作用,它从现场获取各种实际参数,运用科学规律和系统工程分析方法,综合有效地运用各种先进实用的技术,通过控制手段和设备,使各个测试和控制环节得到良好运行与优化。
目前,测试控制技术广泛应用于化工、冶金、航天、电力、电子、轻工、军备等行业。
根据资料显示,大型制造业和工控业有将近1/3的经费用于购置测试设备和控制装置。
美国商业部国家标准局提供的调查报告称:测试控制工业总产值只占工业总产值的4%,但它对国民经济的影响指数达到66%。
钱学森院士在对新技术革命的讨论中也提出这个观点:”新技术革命的关键技术是信息技术。
信息技术由测量技术、计算机技术和通信技术三部分组成。
测量技术是关键和基础。
”测试控制技术发展历史最早可以追溯到远古时代,近现代的测试控制技术是从20世纪40年代初的手动控制幵始的,接下来出现局部自动化,实现工厂仪表化。
在六七十年代出现集中数字控制,但是由于信号抗干扰能力弱和当时的数字计算机技术还不发达,一旦出现计算机故障,则会造成整个系统的瘫痪。
后来又陆陆续续出现集散控制和分布式网络控制技术。
基于FPGA的温度监控系统概要

摘要本论文介绍了一个基于FPGA的数字温度计电路的设计与实现。
该电路采用数字温度传感器DS18B20采集外界环境温度,同时结合该传感器的数据接口和特点,使用FPGA作为控制器,严格控制DS18B20 的时序 ,在单总线上实现读写功能,完成测量数字温度的功能。
再将采集的二进制数转换为BCD码 ,并通过数码管显示。
该系统软件设计通过 Verilog HDL 语言进行编译。
这次设计相比于传统的数字温度计具有结构简单,抗干扰能力强,功耗小,可靠性高,反应时间短等优点。
关键词:数字温度计;FPGA ;Verilog HDL ;DS18B20ABSTRACTThis paper expounds a design and implementation of a digital thermometer circuit based on FPGA. The circuit adopts the digital temperature sensor DS18B20 collecting the environment temperature, combining with the characteristics of the sensor data interface, using FPGA as the controller, strict control over the timing of DS18B20, read and write functions on 1-wire, complete the function of digital temperature measurement. Then measure the binary number into BCD code, and display it on the digital tube. The program design of the system is compiled by Verilog HDL language. Compared to the traditional digital thermometer, it has many advantages such as simpler structure, strong anti-interference ability, low consumption, high reliability, short reaction time.Keywords:Digital thermometer, FPGA, Verilog HDL, DS18B20目录1绪论 (1)1.1课题研究意义 (1)1.2课题相关技术的发展 (2)1.3课题的主要研究内容 (3)1.4论文结构安排 (3)2 总体方案的论证 (5)2.1 方案的选择 (5)2.2 方案论证与确立 (7)2.3 Quartus II介绍 (7)3. 系统的硬件设计 (10)3.1 系统的总体结构设计 (10)3.2 数据处理模块 (15)3.3数码管显示模块 (21)4 系统总体模块设计 (24)4.1 Verilog HDL语言介绍 (24)4.2 软件程序设计 (25)5整体编译结果与分析 (30)5.1 整体编译 (30)5.2 程序的下载调试 (31)6 设计中遇到的问题 (33)7结束语 (34)参考文献 (35)附录 (36)附录A系统总体电路图 (37)附录B 系统总程序 (37)附录 C 外文翻译 (49)1绪论1.1课题研究意义温度是生活中最基本的环境参数。
fpga_ds18b20温度传感器手册介绍以及接口代码编写思路

fpga_ds18b20温度传感器手册介绍以及接口代码编写思路DS18B20是一款数字温度传感器,它可以通过一个数据线与FPGA(现场可编程门阵列)进行通信。
以下是一个简单的介绍和接口代码编写思路。
DS18B20温度传感器手册介绍:DS18B20由美国Dallas公司生产,是一种数字温度传感器,具有单总线接口、温度测量范围为-55℃~+125℃、测量精度为±0.5℃等特点。
DS18B20的引脚定义如下:GND:接地;VCC:供电电源,通常为+5V;*DQ:数据线,用于与FPGA进行通信。
DS18B20通过DQ线与FPGA进行通信,通信协议为单总线协议。
在数据传输过程中,DQ线上的信号是低电平有效,每次通信过程都需要严格按照协议进行。
DS18B20的测温原理是利用内部的振荡器产生一个频率与温度成正比的脉冲信号,通过计数器计数来测量温度值。
接口代码编写思路:初始化DS18B20和FPGA的DQ线。
在初始化过程中,需要设置DQ线的输入/输出模式,并确保DQ线处于空闲状态。
发送DS18B20的初始化命令序列。
DS18B20需要先执行一系列初始化命令,包括选择温度分辨率、启动温度转换等。
这些命令可以通过向DQ线发送特定的序列来实现。
等待DS18B20的温度转换完成。
在DS18B20完成温度转换之前,DQ线处于空闲状态。
当温度转换完成后,DS18B20会通过DQ线发送一个低电平信号,表示可以读取温度值。
读取DS18B20的温度值。
通过向DQ线发送读取命令序列,可以读取DS18B20的温度值。
温度值以二进制补码的形式发送,需要通过代码进行解码并转换为实际温度值。
结束通信并释放资源。
在读取完温度值后,需要向DQ线发送一个复位序列来结束通信,并释放相关资源。
在实际编写代码时,需要注意以下几个问题:保证DQ线的稳定性和可靠性,避免因干扰或信号不稳定导致通信失败或数据错误;严格按照DS18B20的通信协议进行数据传输,确保数据正确无误;对读取的温度值进行校验和处理,以避免异常数据对系统造成影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1: begin dq <= 1'bz ; if (cnt == 17'd4) begin READ_BIT_CNT <= 2 ; cnt <= 17'd0 ; end else begin cnt <= cnt + 1'b1 ; end end
2: begin dq <= 1'bz ; tmp_bit <= dq ; if (cnt == 17'd1) begin READ_BIT_CNT <= 3 ; cnt <= 17'd0 ; end
input clk1m;
inout dq; //单数据总线
input rst_n; //复位
input reset_n;
output[23:0] DS_dataout; //接收数据寄存器,保存直至下一个数据来到
output DS_fifo_wr;
//写数据到 FIFO,产生一个时钟周期的高电平
reg dq;
begin STATE <= WRITE_LOW ;
end else begin
STATE <= WRITE_HIGH ; end WRITE_BYTE_CNT <= WRITE_BYTE_CNT +
end 8:
begin if (WRITE_BYTE_FLAG == 0) begin STATE <= CMD_44 ;
//DS_wr_int 信号寄存器,捕捉下降沿滤
always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin
DS_rx_int0 <= 1'b0; DS_rx_int1 <= 1'b0; DS_rx_int2 <= 1'b0; end else begin DS_rx_int0 <= DS_wr_int;
温度传感器 DS18B20Verilog 读写代码 `timescale 1ns / 1ps module DS18B20 (clk,clk1m,dq, rst_n, reset_n,DS_dataout, DS_fifo_wr); // 约 5-6ms 完成一次读温度
input clk; //50M 主时钟
STATE <= WAIT4MS ; DS_wr_int <= 1'b0;
end
default : begin STATE <= RESET ;
end endcase
end end
assign DS_dataout = DS_dataout_r;
reg DS_rx_int0,DS_rx_int1,DS_rx_int2; 波用
reg [15:0] DS_dataout_r;
reg DS_wr_int;
//FIFO 写入请求的下降沿信号
//------------------------------------------定义的状态
parameter[3:0] RESET = 0;
//复位状态
parameter[3:0] CMD_CC = 1;
else begin
cnt <= cnt + 1'b1 ; end end 3: begin dq <= 1'bz ; if (cnt == 17'd55) begin
cnt <= 17'd0 ; READ_BIT_CNT <= 0 ; STATE <= GET_TMP ; end else begin cnt <= cnt + 1'b1 ; end end default : begin READ_BIT_CNT <= 0 ;
DS_wr_int <= 1'b1; end else begin
case (STATE) RESET : begin
if (cnt >= 17'd0 & cnt < 17'd500) begin
dq <= 1'b0 ; cnt <= cnt + 1'b1 ; STATE <= RESET ; end else if (cnt >= 17'd500 & cnt < 17'd510) begin dq <= 1'bz ; cnt <= cnt + 1'b1 ; STATE <= RESET ; end else if (cnt >= 17'd510 & cnt < 17'd750) begin
dq <= 1'bz ; if (cnt == 17'd5) begin
cnt <= 17'd0 ; WRITE_LOW_CNT <= 2 ; end else begin cnt <= cnt + 1'b1 ; end end 2: begin STATE <= WRITE_BYTE ; WRITE_LOW_CNT <= 0 ; end default : begin WRITE_LOW_CNT <= 0 ; end endcase end
temp <= dq ; if (cnt == 17'd580) begin
temp <= dq ;
end cnt <= cnt + 1'b1 ; STATE <= RESET ; end else if (cnt >= 17'd750) begin cnt <= 17'd0 ; STATE <= CMD_CC ; end end CMD_CC : begin
STATE <= RESET ; write_temp <= 8'b00000000; WRITE_BYTE_CNT <= 0; WRITE_LOW_CNT <= 0; WRITE_HIGH_CNT <= 0; READ_BIT_CNT <= 0; GET_TMP_CNT <= 0; cnt <= 17'd0; WRITE_BYTE_FLAG <= 0; TMP <= 0;
end CMD_BE :
begin write_temp <= 8'b10111110 ; STATE <= WRITE_BYTE ;
end READ_BIT :
begin case (READ_BIT_CNT) 0: begin dq <= 1'b0 ; if (cnt == 17'd4) begin READ_BIT_CNT <= 1 ; cnt <= 17'd0 ; end else begin cnt <= cnt + 1'b1 ; end end
parameter[3:0] CMD_BE = 7;
// parameter[3:0] WAIT800MS = 8;
parameter[3:0] GET_TMP = 9;
parameter[3:0] WAIT4MS = 10;
reg[3:0] STATE; reg[7:0] write_temp; reg[15:0] TMP; reg tmp_bit; reg[3:0] WRITE_BYTE_CNT; reg[1:0] WRITE_LOW_CNT; reg[1:0] WRITE_HIGH_CNT; reg[1:0] READ_BIT_CNT;
end endcase end
1'b1 ; 1'b1 ;
GET_TMP : begin case (GET_TMP_CNT) 0: begin STATE <= READ_BIT ; GET_TMP_CNT <= GET_TMP_CNT +
end 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 :
WRITE_BYTE_FLAG <= 1 ; end else if (WRITE_BYTE_FLAG == 1) begin
STATE <= RESET ; WRITE_BYTE_FLAG <= 2 ; end else if (WRITE_BYTE_FLAG == 2) begin STATE <= CMD_BE ; WRITE_BYTE_FLAG <= 3 ; end else if (WRITE_BYTE_FLAG == 3) begin STATE <= GET_TMP ; WRITE_BYTE_FLAG <= 0 ; end WRITE_BYTE_CNT <= 0 ; end default : begin STATE <= RESET ;
DS_rx_int1 <= DS_rx_int0; DS_rx_int2 <= DS_rx_int1; end end
assign DS_fifo_wr = ~DS_rx_int1 & DS_rx_int2; // 捕 捉 到 下 降 沿 后 , DS_fifo_wr 拉高保持一个主时钟周期
endmodule
end endcase end WRITE_LOW : begin
case (WRITE_LOW_CNT) 0: begin dq <= 1'b0 ; if (cnt == 17'd70) begin cnt <= 17'd0 ; WRITE_LOW_CNT <= 1 ; end else begin cnt <= cnt + 1'b1 ; end end 1: begin