利用状态机(FSM)进行简单的uart串口发送数据
- module uart_tx(clk,rst_n,key,txd);
- input clk;
- input rst_n;
- input key;
- output reg txd;
- reg[:] state;
- reg[:] bit_timer;
- wire[:] tx_data;
- assign tx_data='h5a;
- parameter s_idle='d0;
- parameter s_start='d1;
- parameter s_bit0='d2;
- parameter s_bit1='d3;
- parameter s_bit2='d4;
- parameter s_bit3='d5;
- parameter s_bit4='d6;
- parameter s_bit5='d7;
- parameter s_bit6='d8;
- parameter s_bit7='d9;
- parameter s_stop='d10;
- always@(posedge clk or negedge rst_n)
- begin
- if(!rst_n)
- begin
- state<=s_idle;
- bit_timer<='d0;
- txd<='b1;
- end
- else
- begin
- case(state)
- s_idle:
- begin
- txd<='b1;
- if(!key)
- state<=s_start;
- else
- state<=state;
- end
- s_start:
- begin
- txd<='b0;
- if(bit_timer=='d5208)
- begin
- state<=s_bit0;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit0:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit1;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit1:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit2;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit2:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit3;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit3:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit4;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit4:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit5;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit5:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit6;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit6:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_bit7;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_bit7:
- begin
- txd<=tx_data[];
- if(bit_timer=='d5208)
- begin
- state<=s_stop;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- s_stop:
- begin
- txd<='b1;
- if(bit_timer=='d5208)
- begin
- state<=s_idle;
- bit_timer<='d0;
- end
- else
- begin
- state<=state;
- bit_timer=bit_timer+'d1;
- end
- end
- default:
- begin
- state<=s_idle;
- end
- endcase
- end
- end
- endmodule
利用状态机(FSM)进行简单的uart串口发送数据的更多相关文章
- WPF内实现与串口发送数据和接收数据
原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- C#把汉字转换成16进制(HEX)并向串口发送数据
报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- (已解决)STM32L151使用串口发送数据第一字节为FE问题!
最近学习到串口发送数据时遇到一个问题:第一个字节总是FE,后面才是对的数据. 最终解决的方法是: 讲GPIO复用的操作放到GPIO配置之前! 体现在代码中就是: //打开GPIO时钟 RCC_AHBP ...
- stm32串口发送数据复位 第一个数据丢失
http://blog.csdn.net/kevinhg/article/details/40991655 STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成 ...
- C# 实现串口发送数据(不用串口控件版)
参考:https://blog.csdn.net/mannix_lei/article/details/79979432 https://www.cnblogs.com/ElijahZeng/p/76 ...
- 语音控制单片机工作【百度语音识别,串口发送数据到单片机】【pyqt源码+软件】!!
前些天闲着没事,就做了个语音识别结合串口发送指令的软件,用的是pyqt写的,软件打开后对着笔记本的话筒说话, 他就能识别返回文字结果,然后匹配语音中的关键词,如果有关键词就发送关键词对应的命令,比如语 ...
- 如何利用.NETCore向Azure EventHubs准实时批量发送数据?
最近在做一个基于Azure云的物联网分析项目: .netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure Blog ...
随机推荐
- Python 变量作用域与函数
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- golang glog
原文链接:https://blog.csdn.net/u010857876/article/details/79094942 Flush log 产生后,会暂存在内存的buffer中.只有显示的调用 ...
- javascript——HTML对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- QT调用CHM方法
QDesktopServices desktopServices;QString strUrl=QCoreApplication::applicationDirPath () ;strUrl=QStr ...
- bootstrap 处理警告
$("#id").bootstrapValidator({}).on('success.field.bv', function (e, data) { })
- 1 简介mvp模式
1 模型-视图-表示器也称为监视控制器模式 ,如下图表示 2 mvp 模式希望通过表示器(presenter)来关联网页,而不必在他们之间建立严格的 3 一个简单的mvp架构的例子 public ...
- vue cli3.0 build 打包 的 js 文件添加时间戳 解决 js 缓存问题
// vue.config.jsconst Timestamp = new Date().getTime();module.exports = { configureWebpack: { // web ...
- WinPE基础知识之导出表
// 导出的东西包括函数(变量.类)地址,序号,函数(变量.类)名 typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // ...
- configure.ac:91: error: possibly undefined macro: AC_SEARCH_LIBS
debian系统上,手动编译tmux的时候,执行./autogen.sh出现如下报错: $ ./autogen.sh configure.ac:: error: possibly undefined ...
- Flask+gevent-websocket模块实现websocket
后端代码: from flask import Flask,request from geventwebsocket.handler import WebSocketHandler from geve ...