1. module uart_tx(clk,rst_n,key,txd);
  2.  
  3. input clk;
  4. input rst_n;
  5. input key;
  6. output reg txd;
  7.  
  8. reg[:] state;
  9. reg[:] bit_timer;
  10. wire[:] tx_data;
  11. assign tx_data='h5a;
  12.  
  13. parameter s_idle='d0;
  14. parameter s_start='d1;
  15. parameter s_bit0='d2;
  16. parameter s_bit1='d3;
  17. parameter s_bit2='d4;
  18. parameter s_bit3='d5;
  19. parameter s_bit4='d6;
  20. parameter s_bit5='d7;
  21. parameter s_bit6='d8;
  22. parameter s_bit7='d9;
  23. parameter s_stop='d10;
  24.  
  25. always@(posedge clk or negedge rst_n)
  26. begin
  27. if(!rst_n)
  28. begin
  29. state<=s_idle;
  30. bit_timer<='d0;
  31. txd<='b1;
  32. end
  33. else
  34. begin
  35. case(state)
  36.  
  37. s_idle:
  38. begin
  39. txd<='b1;
  40. if(!key)
  41. state<=s_start;
  42. else
  43. state<=state;
  44. end
  45.  
  46. s_start:
  47. begin
  48. txd<='b0;
  49. if(bit_timer=='d5208)
  50. begin
  51. state<=s_bit0;
  52. bit_timer<='d0;
  53. end
  54. else
  55. begin
  56. state<=state;
  57. bit_timer=bit_timer+'d1;
  58. end
  59. end
  60.  
  61. s_bit0:
  62. begin
  63. txd<=tx_data[];
  64. if(bit_timer=='d5208)
  65. begin
  66. state<=s_bit1;
  67. bit_timer<='d0;
  68. end
  69. else
  70. begin
  71. state<=state;
  72. bit_timer=bit_timer+'d1;
  73. end
  74. end
  75.  
  76. s_bit1:
  77. begin
  78. txd<=tx_data[];
  79. if(bit_timer=='d5208)
  80. begin
  81. state<=s_bit2;
  82. bit_timer<='d0;
  83. end
  84. else
  85. begin
  86. state<=state;
  87. bit_timer=bit_timer+'d1;
  88. end
  89. end
  90.  
  91. s_bit2:
  92. begin
  93. txd<=tx_data[];
  94. if(bit_timer=='d5208)
  95. begin
  96. state<=s_bit3;
  97. bit_timer<='d0;
  98. end
  99. else
  100. begin
  101. state<=state;
  102. bit_timer=bit_timer+'d1;
  103. end
  104. end
  105.  
  106. s_bit3:
  107. begin
  108. txd<=tx_data[];
  109. if(bit_timer=='d5208)
  110. begin
  111. state<=s_bit4;
  112. bit_timer<='d0;
  113. end
  114. else
  115. begin
  116. state<=state;
  117. bit_timer=bit_timer+'d1;
  118. end
  119. end
  120.  
  121. s_bit4:
  122. begin
  123. txd<=tx_data[];
  124. if(bit_timer=='d5208)
  125. begin
  126. state<=s_bit5;
  127. bit_timer<='d0;
  128. end
  129. else
  130. begin
  131. state<=state;
  132. bit_timer=bit_timer+'d1;
  133. end
  134. end
  135.  
  136. s_bit5:
  137. begin
  138. txd<=tx_data[];
  139. if(bit_timer=='d5208)
  140. begin
  141. state<=s_bit6;
  142. bit_timer<='d0;
  143. end
  144. else
  145. begin
  146. state<=state;
  147. bit_timer=bit_timer+'d1;
  148. end
  149. end
  150.  
  151. s_bit6:
  152. begin
  153. txd<=tx_data[];
  154. if(bit_timer=='d5208)
  155. begin
  156. state<=s_bit7;
  157. bit_timer<='d0;
  158. end
  159. else
  160. begin
  161. state<=state;
  162. bit_timer=bit_timer+'d1;
  163. end
  164. end
  165.  
  166. s_bit7:
  167. begin
  168. txd<=tx_data[];
  169. if(bit_timer=='d5208)
  170. begin
  171. state<=s_stop;
  172. bit_timer<='d0;
  173. end
  174. else
  175. begin
  176. state<=state;
  177. bit_timer=bit_timer+'d1;
  178. end
  179. end
  180.  
  181. s_stop:
  182. begin
  183. txd<='b1;
  184. if(bit_timer=='d5208)
  185. begin
  186. state<=s_idle;
  187. bit_timer<='d0;
  188. end
  189. else
  190. begin
  191. state<=state;
  192. bit_timer=bit_timer+'d1;
  193. end
  194. end
  195.  
  196. default:
  197. begin
  198. state<=s_idle;
  199. end
  200.  
  201. endcase
  202. end
  203.  
  204. end
  205.  
  206. endmodule

利用状态机(FSM)进行简单的uart串口发送数据的更多相关文章

  1. WPF内实现与串口发送数据和接收数据

    原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...

  2. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  3. 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

    串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

  4. C#把汉字转换成16进制(HEX)并向串口发送数据

    报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...

  5. (已解决)STM32L151使用串口发送数据第一字节为FE问题!

    最近学习到串口发送数据时遇到一个问题:第一个字节总是FE,后面才是对的数据. 最终解决的方法是: 讲GPIO复用的操作放到GPIO配置之前! 体现在代码中就是: //打开GPIO时钟 RCC_AHBP ...

  6. stm32串口发送数据复位 第一个数据丢失

    http://blog.csdn.net/kevinhg/article/details/40991655 STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成 ...

  7. C# 实现串口发送数据(不用串口控件版)

    参考:https://blog.csdn.net/mannix_lei/article/details/79979432 https://www.cnblogs.com/ElijahZeng/p/76 ...

  8. 语音控制单片机工作【百度语音识别,串口发送数据到单片机】【pyqt源码+软件】!!

    前些天闲着没事,就做了个语音识别结合串口发送指令的软件,用的是pyqt写的,软件打开后对着笔记本的话筒说话, 他就能识别返回文字结果,然后匹配语音中的关键词,如果有关键词就发送关键词对应的命令,比如语 ...

  9. 如何利用.NETCore向Azure EventHubs准实时批量发送数据?

    最近在做一个基于Azure云的物联网分析项目: .netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure Blog ...

随机推荐

  1. Python 变量作用域与函数

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  2. golang glog

    原文链接:https://blog.csdn.net/u010857876/article/details/79094942 Flush log 产生后,会暂存在内存的buffer中.只有显示的调用 ...

  3. javascript——HTML对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. QT调用CHM方法

    QDesktopServices desktopServices;QString strUrl=QCoreApplication::applicationDirPath () ;strUrl=QStr ...

  5. bootstrap 处理警告

    $("#id").bootstrapValidator({}).on('success.field.bv', function (e, data) { })

  6. 1 简介mvp模式

    1   模型-视图-表示器也称为监视控制器模式 ,如下图表示 2 mvp 模式希望通过表示器(presenter)来关联网页,而不必在他们之间建立严格的 3 一个简单的mvp架构的例子 public ...

  7. vue cli3.0 build 打包 的 js 文件添加时间戳 解决 js 缓存问题

    // vue.config.jsconst Timestamp = new Date().getTime();module.exports = { configureWebpack: { // web ...

  8. WinPE基础知识之导出表

    // 导出的东西包括函数(变量.类)地址,序号,函数(变量.类)名 typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // ...

  9. configure.ac:91: error: possibly undefined macro: AC_SEARCH_LIBS

    debian系统上,手动编译tmux的时候,执行./autogen.sh出现如下报错: $ ./autogen.sh configure.ac:: error: possibly undefined ...

  10. Flask+gevent-websocket模块实现websocket

    后端代码: from flask import Flask,request from geventwebsocket.handler import WebSocketHandler from geve ...