RS-232常见引脚信号的定义
RXD-接收数据,TXD-发送数据,DTR-数据终端准备,GND-信号地,DSR-数据设备准备好,RTS-请求发送,CTS-清除发送。
串口也称为UART。在实际应用中,通常只用TXD和RXD两个引脚,而其它的引脚都不使用。UART接口时序图

在没有数据的情况下接口处于高电平(Mark),在数据发生前先将电平置低(space)一个周期,在该周期称为起始比特(Start bit),之后开始发送第0个到最后一个比特数据。UART接口每次可以发送6位或者7位,或8位数据。在数据位之后可以有选择地发送一个校验位,可以为奇校验,也可以为偶校验,校验位后的一个比特是一个或者多个停止位,此时数据线回归到高电平,可以进行下一个比特的发送。

发送模块的功能是将数据以串行的形式发送出去,并且将每一组的串行数据加上,开始位和停止位。当byte_ready信号有效时,数据被载入移位寄存器并添加开始位(低电平)和停止位(高电平)。当byte_ready信号无效时移位寄存器开始移位操作,将数据以串行的形式发送出去。


module UART_transmitter(clk,reset,byte_ready,data,TXD);input clk,reset;input byte_ready;        //数据载入控制input [7:0] data;output TXD;            //串行数据reg [9:0] shift_reg;assign TXD = shift_reg[0];always @ (posedge clk or negedge reset) begin if(!reset)shift_reg <= 10'b1111_1111_11;else if(byte_ready)shift_reg <= {1'b1,data,1'b0};        //加起始位与终止位else shift_reg <= {1'b1,shift_reg[9:1]}; //输出串行数据endendmodule

接收模块的功能是接收发送模块输出的串行数据,并以并行的方式将数据送入存储器。当接收模块检测到开始位(低电平)时开始接收数据,并且输入串行数据存入移位寄存器,当接收完成时将数据并行输出。

module UART_receiver(clk,reset,RXD,data_out);parameter idle = 2'b00;parameter receiving = 2'b01;input clk,reset;input RXD;           //串行数据output [7:0] data_out;reg shift;          //移位控制reg inc_count;            //计数器加控制reg [7:0] data_out,shift_reg;reg [3:0] count;reg [2:0] state,nstate;always @ (state or RXD or count) begin shift = 0;inc_count = 0;nstate = state;case(state)idle:if(!RXD) nstate = receiving; //监测起始信号receiving: beginif(count==8) begindata_out = shift_reg;  //数据输出nstate = idle;count = 0;        //计数器清零inc_count = 0;endelse begininc_count = 1;shift = 1;endenddefault: nstate <= idle;endcaseendalways @ (posedge clk or negedge reset) beginif(!reset) begindata_out <=8'b0;count <= 0;state <= idle;endelse beginstate <= nstate;if(shift)shift_reg <= {shift_reg[6:0],RXD};   //接收串行数据if(inc_count)count <= count+1;endend
endmodule 

测试代码:

module UART_tb;reg clk,reset,byte_ready;reg [7:0] data;wire [7:0] data_out;wire serial_data;initial beginclk = 0;reset = 0;byte_ready = 0;data = 8'b1010_1010;#40       byte_ready = 1;#50     reset = 1;#170 byte_ready = 0;    #1600   byte_ready = 1;#170    byte_ready = 0;reset = 0;data = 8'b1100_0011;#40        byte_ready = 1;#50     reset = 1;#170 byte_ready = 0;    #1600   byte_ready = 1;#170    byte_ready = 0;reset = 0;data = 8'b101_1011;#40     byte_ready = 1;#50     reset = 1;#170 byte_ready = 0;    endalways begin#80  clk = ~clk;endUART_transmitter  n1 (.clk(clk),.reset(reset),.byte_ready(byte_ready),.data(data),.TXD(serial_data));UART_receiver n2 (.clk(clk),.reset(reset),.RXD(serial_data),.data_out(data_out));endmodule

UART接口控制器-RS-232的9脚接口相关推荐

  1. 国产替代FT232RL-USB到UART桥接控制器 GP232RNL

    GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口.GP232RNL包括一个USB 2.0全速功能 ...

  2. 基于FPGA的USB接口控制器设计(VHDL)(中)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第二篇,中篇,USB通信原理.USB 系统开发以及设计实例.话不多说,上货. 之前有关于 Veril ...

  3. CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器

    CAN 协议控制器和物理总线之间的接口芯片SIT1040T 高速 CAN 总线收发器 CAN是最新进的现场总线,灵活性好,通讯可靠性高,抗干扰能力强,超长通信距离等优点,110个节点,兼带CAN-FD ...

  4. SIT1040 是一款应用于 CAN 协议控制器和物理总线之间的接口芯片

    SIT1040 是一款应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车.公交. 小汽车.工业控制等领域,速率可达到 1Mbps,具有在总线与 CAN 协议控制器之间进行差分信 号传输的 ...

  5. 基于FPGA的USB接口控制器设计(VHDL)(上)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第一篇,上篇,USB 接口简介 以及 USB 体系结构.话不多说,上货. 之前有关于 Verilio ...

  6. 智能卡接口控制器(SIM)ATR应答

    智能卡接口控制器(SIM)ATR应答 ISO7816 标准是个标准的半双工接口,本模块作为主设备,控制SIM 卡的操作,SIM 卡 作为从设备只有在两种情况下产生应答信号: 收到RST 信号后发送AT ...

  7. pythonapi是什么_python接口自动化(一)--什么是接口、接口优势、类型(详解)...

    简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚.接下来先看一下接口的定义. 定义 接 ...

  8. php扫描蓝牙设备接口,微信硬件蓝牙扫描某个设备接口onScanWXDeviceResult

    好久没更新微信硬件蓝牙开发的技术文章了,最近闲来无事,翻了翻系列文章以及微信硬件jsapi接口,发现onScanWXDeviceResult扫描某个设备接口并没有做案例demo给大家分享出来,所以接着 ...

  9. python接口自动化(一)--什么是接口、接口优势、类型(详解)

    简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚.接下来先看一下接口的定义. 定义 接 ...

  10. 淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程

    淘宝关键词搜索商品接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集商品数据接口)接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口教程wx199701080 ...

最新文章

  1. 解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' 的异常
  2. OpenCV 为图像转换为漫画效果
  3. 深度学习-Tensorflow2.2-卷积神经网络{3}-卷积神经网络CNN示例-12
  4. 《你的灯亮着吗》 读书笔记三
  5. git上传大于100M的文件
  6. Linux SSH免密码登录
  7. Luyten报错:This application requires a Java Runtime Environment 1.7.0 or 1.8.0
  8. 【已解决】node.dll丢失怎么办?计算机丢失node.dll是什么意思?
  9. 计算机专硕毕业论文写什么,关于学姐写硕士毕业论文的一些经验,分享给大家...
  10. DDR中的一些知识点说明(ODT,ZQ校准,OCT,TDQS)【转载】
  11. 最熟悉的陌生人| 长文理解基因本体论 (Gene Ontology, GO)
  12. 极路由和TPLINK wr740n 做无线桥接共享上网
  13. 高新技术计算机应用能力考试,全国计算机信息高新技术考试(OSTA)-人社部职业资格证书...
  14. 教你快速高效接入SDK——手游聚合SDK框架中渠道SDK部分的接入(就是实现抽象层的接口而已)
  15. opendir() 函数
  16. 电脑不用,不用电脑,你还会写字吗?
  17. ssl中的证书/私钥/公钥
  18. jQuery开发者必备的16个组件
  19. “芯成大海,青春启航”第六届集创赛启动仪式顺利举行
  20. 2017 在zrx踩过的坑

热门文章

  1. 2021年春招首发!阿里云云原生实习一二三面面经,看完的都进阿里了!
  2. 2022跨境电商市场已达“万亿”-成都扬帆牧哲教育咨询有限公司
  3. 保留小数点后两位的方法
  4. Jsp网上超市设计与实现(源代码+论文)
  5. CentOS 7安装Jenkins
  6. 更改计算机名后sql无法连接msde,如何修改MSDE的登录方式及sa密码
  7. chrome浏览器在Windows10或11下最大化最小化按钮变灰无法使用解决方法
  8. Build gradle project info的暴力解决方式
  9. SQL 两张表关联查询
  10. 封装工具大全与如何系统减肥