精华内容
下载资源
问答
  • 电信设备-一种全双工异步串行通信方法.zip
  • 很简单 还有张Protel图 需要下好菜可以看的 到。希望对大家有用
  • DATA SEGMENT SPEED DB 0DH,0AH,PLEASE CHOOSE THE SPEED:,1.110 2.150 3.300 4.600 5.1200 6.2400 7.4800 8.9600,0DH,0AH,$CBITS DW 110,150,300,600,1200,2400,4800,9600DATA ENDSCODE 

     DATA        SEGMENT
    SPEED DB 0DH,0AH,'PLEASE CHOOSE THE SPEED:','1.110 2.150 3.300 4.600 5.1200 6.2400 7.4800 8.9600',0DH,0AH,'$'
    CBITS DW 110,150,300,600,1200,2400,4800,9600
    DATA       ENDS

    CODE       SEGMENT
                  ASSUME  CS:CODE,DS:DATA

    START:    MOV  AX, DATA
                  MOV  DS, AX

    OSPEED:         MOV DX, OFFSET SPEED  
                    MOV AH, 09H
                    INT 21H  
                    MOV AH, 01H   
                    INT 21H

                    PUSH AX;

                    MOV AH, 7; CLEAR SCREEN
                    MOV AL,0
                    MOV BH,70H
                    MOV CH,0
                    MOV CL,0
                    MOV DH,24
                    MOV DL,79
                    INT 10H

                    POP AX

                    SUB AL, 30H 
                    MOV BL, AL
                     MOV BL, AL
                    MOV SI, BX
                    MOV BX, CBITS[SI]
                    MOV AX, 0C200H   
                    MOV DX, 0001H
                    DIV  BX
                    PUSH AX  
          
                    ;初始化波特率除数寄存器
                    MOV  DX, 03FBH  ;指向线路控制寄存器
                    MOV  AL, 80H    ;位7置1
                    OUT  DX, AL     ;发送此字节
                    POP  AX         ;出栈
                  
                    MOV  DX, 03F8H
                    OUT  DX, AL

                    MOV  DX, 03F9H
                    MOV  AL, AH
                    OUT  DX, AL
     
                    ;初始化线路控制寄存器  
                    MOV  DX, 3FBH;  指向线路控制寄存器
                   MOV  AL, 0AH
                   OUT  DX, AL

                    ;初始化中断寄存器
                    MOV  DX,3F9H; 指向中断允许寄存器  
             MOV  AL,0H  ;禁止所有中断
                   OUT  DX,AL
                    MOV  DX,3F9H; 禁止中断  
      MOV  AL,0H

    SEND:        MOV  AH,0BH                  ;有键按下?
                    INT  21H
                    AND  AL,AL  
                    JZ  SEND                     ;无键按下,转send,否则,调用1S延时子程序 

                    MOV  AH,07H               ;从键盘输入一个字符,但不回显
                    INT  21H
                    MOV  DX, 3F8H           ;指向发送保持寄存器
                    OUT  DX, AL
                        CMP AL,1BH;     1BH=ESC 
                        JE  END1      
    ;线路状态检测循环
    forever:                       mov dx, 3fdh;  指向线路状态寄存器LSR
          in al, dx                                     ;取状态字节
          test al, 01h                                ;测试是否已收到数据
          jnz receive                                 ;转接收例程
          test al, 20h                                ;测试是否可以发送字符
          jz forever                                    ;若否,继续检测
    ;发送部分
                        MOV  AH,0BH                   ;有键按下?
                    INT  21H
                    AND  AL,AL  
                    jz forever
                    MOV  AH,07H                 
                    INT  21H
                        cmp al, 1bh
                 jz END1
                 mov dx, 3f8h
                 out dx, al
                 jmp forever

    ;接受部分
    receive:     mov dx, 3f8h               ;指向接受数据寄存器
          in   al, dx                      ;取新收到的字符
          and al, 7fh
          push ax
          mov bx,0;   BL=1,前景色
          mov ah,14
          int 10h                     键盘I/O中断调用,检测有无键入

         
                        pop ax

          cmp al, 0dh                 ;判断刚才收到的字符是否为回车
          jnz  forever                ;不是,则转向线路检测循环
          mov al, 0ah
          mov bx,0
          mov ah,14
          int 10h
          jmp forever

    END1:        MOV AH,4CH; 
          INT 21H
    CODE         ENDS
                   


    END  START

    展开全文
  • 串行通信——异步串行通信

    千次阅读 2019-03-23 16:06:08
    II、异步串行通信详解 一、数据格式 1. 起始位 2. 数据位 3. 奇偶校验位 4. 停止位 二、通信制式 1. 单工 2. 半双工 3. 全双工 三、通信速率 I、串口通信简介 一、定义 在一条传输线上,数据以“位”...

    目录

    I、串口通信简介

    一、定义

    二、意义

    三、分类

    II、异步串行通信详解

    一、数据格式

    1. 起始位

    2. 数据位

    3. 奇偶校验位

    4. 停止位

    二、通信制式

    1. 单工

    2. 半双工

    3. 全双工

    三、通信速率


    I、串口通信简介

    一、定义

    一条传输线上,数据以“位”为单位进行逐个传输,即为串行通信。

    二、意义

    并行通信控制简单、相对传输速度快,但由于传输线较多,长距离传输时成本高,因此仅适合短距离的数据传输;

    相对的,在满足“传输速度 ≥ 最大需求速度”的前提下,使用串行通信便是大势所趋了。

    三、分类

    串行通信分为两种方式,异步串行通信同步串行通信

    异步串行通信,是指发送方与接收方,使用各自的时钟控制数据发送和接收过程(为使双方收发协调,要求双方时钟尽可能一致);

    同步串行通信,则是发送方时钟直接控制接收方时钟,使双方完全同步(同步方法有“外同步和自同步”两种)。

     

    串行通信的最小传输单位是“位”,一次完整的“接收/发送”的最小单位是“字符”(单独收发一个位的数据,通常没有意义)。

    • 使用异步串行通信时,由于收发双方时钟不严格一致,所以每个字符都要用到起始位和停止位来作为字符开始和结束的标志,从而保证数据传输的准确性(由于每个字符都有开始和停止位,因此字符之间的时间间隔是任意的);
    • 使用同步串行通信时,由于收发双方时钟严格一致,所以仅在数据块(有效数据)传输的一开始和结束时,用到了开始符和结束符,在有效数据传输完毕后,发送空闲字符。

    对比两种串行通信方式,同一数据块,后者仅在头尾处添加了开始与结束标记,因此后者的传输效率较高,但实现的硬件设备也更复杂,所以各设备之间,通常采用的还是异步串行通信方式。

    接下来将详细介绍异步串行通信。

    II、异步串行通信详解

    一、数据格式

    一次完整的“接收/发送”的最小单位是“字符”,我们将其称为一个字符帧,字符帧由四部分组成:起始位、数据位、校验位、停止位。

    1. 起始位

    起始位为0。

    • 通讯线在空闲状态时保持高电平,因此出现下降沿即可判定为数据传输开始;
    • 另外,由于数据位定长,且起始位在一次接收中只判定一次,所以不用担心数据位中的0误识别成起始位。

    2. 数据位

    数据位可以是5/6/7/8位,传输时低位在前、高位在后

    3. 奇偶校验位

    校验位可以省略,当需要使用校验位时:

    • 奇偶校验位为1或0;
    • 奇校验时,数据位、校验位中1的个数,应该是奇数;
    • 偶校验时,数据位、校验位中1的个数,应该是偶数。

    4. 停止位

    停止位为1。

    • 停止位可以是1位的长度、1.5位的长度、2位的长度(位数的本质含义是信号出现的时间,故可有分数位);
    • 另外,由于数据位定长,所以停止位位置固定可知,接收时只需判定停止位是否为1即可。

    二、通信制式

    1. 单工

    数据仅能沿一个方向传输,不能实现反向传输(只能A→B,不能B→A)。

    2. 半双工

    数据可以沿两个方向传输,但同一时刻,只能接收或者发送。

    3. 全双工

    数据可以沿两个方向传输,且可以同时进行。

    三、通信速率

    • 串口通讯的速率用波特率表示,定义为每秒传输二进制码的位数,单位是bps(位/秒);
    • 以9600bps为例,假设一个字符帧共有10位(1起始位、8数据位、1结束位),那么每秒钟能传输的最大字符数为“9600/10 = 960”;
    • 最大传输距离,与波特率成反比关系(9600bps,最大传输距离约为76m)。
    展开全文
  • 8250全双工通信

    2012-05-15 08:46:53
    实现微机对自己的INS8250串行接口芯片进行检测,能够以人机会话方式设定传输频率,实现两台微机之间的全双工异步串行通信
  • FPGA-UART-双工通信 US(A)RT,The Universal Synchronous and Asynchronous serial Receiver and Transmitter,通用同步(异步)串行接受和发送器,简称为串口 Ø USART是最普遍的一种串行通信协议 提示:写完文章后,...

    FPGA-UART-双工通信

    US(A)RT,The Universal Synchronous and Asynchronous serial Receiver and Transmitter,通用同步(异步)串行接受和发送器,简称为串口

    Ø USART是最普遍的一种串行通信协议


    提示:本文仅位个人学习记录

    一、概述

    1、目的及意义:

    了解串口通信的背景知识后,编程实现串口通信(FPGA-FPGA)。了解UART(通用异步收发传输器)的基本原理。

    2、主要功能:

    实现两个FPGA通过拨码开关传输数据,通过七段数码管显示数据,并使用LED展示通信状态。

    二、原理及步骤

    1、原理框图:

    在这里插入图片描述
    在这里插入图片描述

    2、工作原理

    UART即通用异步收发器,是一种串行通信方式。数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。串行通信分为两种类型:同步通信方式和异步通信方式。但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样有利于增加发送与接收的灵活性。异步通信是一个字符接着一个字符传输,一个字符的信息由起始位、数据位、奇偶校验位和停止位组成。
    每一个字符的传输靠起始位来同步,字符的前面一位是起始位,用下降沿通知收方开始传输,紧接着起始位之后的是数据位,传输时低位在前高位在后,字符本身由5~8位数据位组成。数据位后面是奇偶校验位,最后是停止位,停止位是用高电平来标记一个字符的结束,并为下一个字符的传输做准备。停止位后面是不同长度的空闲位。停止位和空闲位都规定为高电平,这样可以保证起始位有一个下降沿。UART的帧格式如图所示。

    3、功能模块简介

    数据发送模块:发送模块实现数据由并行输入到串行输出
    数据接收模块:接收模块实现数据由串行输入到并行输出
    波特率发生器:波特率发生器模块控制产生UART时钟频率
    串口有三根线,分别如下:
    TXD:发送;
    RXD:接收;
    GND:接地
    串口通信是异步通讯,端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

    4、实验步骤

    1、首先导入uart_top文件并导入他的3个附属文件,修改实际发送值,运行程序,进行引脚配置,然后用串口监视器进行初步演示,了解数据输出方式。
    在这里插入图片描述

    2、设计实验,编程实现思路,配置引脚如图:
    在这里插入图片描述

    3、通过数码管和串口监视器进行调试,(检查数据从数码管输入到被接收再被显示的过程中有无出错的地方)最后发现对uart_tx(读数据模块)中的data_i直接进行数码管显示时会出错(初步估计是数据更新速度过快数码管无法直接显示),于是采用用寄存器(data_s)对数据进行暂存并显示 并根据receive_ack信号对数据进行更新。
    在这里插入图片描述

    4、调试完成之后连接好两块FPGA并将输入输出和GND用邦杜线进行连接,然后烧写程序进行验证。

    三、程序设计及描述

    代码:
    module uart_top
    (
    	output txd,
    	output [6:0] hex0,hex1,	//两个七段数码管对数据进行显示
    	output reg tx,rx,re,		//三个LED分别显示通信状态
    	input rxd,
    	input clk,
    	input start,			//控制数据传输的开始结束
    	input receive, 		//控制是否接受数据
    	input [7:0]data_tx	//实际传输数据
    );
    	wire clk_9600;
    	wire receive_ack;
    	wire [7:0] data;	
    
    	always @(*)
    	begin
    		begin
    			if (start == 1)//控制LED9显示是否发送数据
    				begin
    					tx<=1;
    				end
    			else
    				begin
    					tx<=0;
    				end
    		end
    		begin
    			if(receive_ack) //控制LED0显示是否接收到数据
    				begin
    					rx<=1;
    				end
    			else
    				begin
    					rx<=0;
    				end
    		end
    			begin
    			if(receive)   //控制LED9显示是否允许接收数据
    				begin
    					re<=1;
    				end
    			else
    				begin
    					re<=0;
    				end
    			end
    	end
    	
    	//发送模块
    	uart_tx uart_tx
    	(
    		 .clk(clk_9600),
    		 .txd (txd),
    		 .data_o(data_tx),	   //实际发送值
    		 .send (start)			//允许发送怎么填写
    
    	);
    	//接受模块
    	uart_rx uart_rx
    	(
    		 .clk(clk_9600),
    		 .rxd (rxd),
    		 .receive (receive),
    		 .data_i (data),
    		 .data_s (num),          //将data_s 寄存器的值赋给num
    		 .receive_ack(receive_ack)
    	);
    	//时钟模块
    	clk_div clk_div
    	(
    		 .clk (clk),
    		 .clk_out (clk_9600)
    	);
    	//数码管显示 num进行显示
    	hex_7seg seg0 (.hex((num)%10),.sseg(hex0));
    	hex_7seg seg1 (.hex((num)/10%10),.sseg(hex1));
    endmodule
    
    module uart_tx(
       input [7:0]data_o,
       output reg txd,
       input clk,
       input send
        );
        //发送状态机分为四个状态:等待,发送起始位,发送数据,发送结束
       localparam IDLE=0,
                  SEND_START=1,
                  SEND_DATA=2,
                  SEND_END=3;
    
        reg [3:0]cur_st=0,nxt_st=0;
        reg [4:0]count=0;
        reg [7:0]data_o_tmp=0;
    
        always@(posedge clk)
            cur_st<=nxt_st;
       
        always@(*)
        begin
          nxt_st=cur_st;
          case(cur_st)
             IDLE:			if(send) nxt_st=SEND_START;		//接收完成时开始发送数据
             SEND_START: nxt_st=SEND_DATA;				//发送起始位
             SEND_DATA:  if(count==7) nxt_st=SEND_END;//发送八位数据
             SEND_END:  	nxt_st=SEND_START; 			//发送结束
             default: 	nxt_st=IDLE;
          endcase
        end
    	 always@(posedge clk)
    		 if(cur_st==SEND_DATA)
    			 count<=count+1;
    		 else if(cur_st==IDLE | cur_st==SEND_END)
    			 count<=0;
    														//发送低位到高位
    	 always@(posedge clk)			
    		 if(cur_st==SEND_START)
    			 data_o_tmp<=data_o; 				//将发送数据导入变量
    		 else if(cur_st==SEND_DATA)
    			 data_o_tmp[6:0]<=data_o_tmp[7:1];	//每发送以为数据后data_o_tmp右移一位,便于下一位数据的发送
    	 always@(posedge clk)
    		if(cur_st==SEND_START)
    			 txd<=0;
    		 else if(cur_st==SEND_DATA)
    			 txd<=data_o_tmp[0];//由于每次发送后右移,所以每次最低位
    		 else if(cur_st==SEND_END)
    			 txd<=1;
    endmodule
    
    module uart_rx(
       input rxd,
       input clk,
    	input receive,
       output receive_ack,
       output reg [7:0]data_i,
    	output reg [7:0]data_s
        );
        //串口接收状态机分为三个状态:等待,接收,接收完成
       localparam IDLE=0,
                  RECEIVE=1,
                  RECEIVE_END=2;
       reg [3:0]cur_st=0,nxt_st=0;  //状态机变量
       reg [4:0]count=0;
       always@(posedge clk)
            cur_st<=nxt_st;
       always@(*)
       begin
    		begin
    			data_s<=(receive_ack)?data_i:data_s;//仿照原有语句通过receive_ack的信号判断数据是否传输完。
    		end
    	  nxt_st=cur_st;
    	  case(cur_st)
    		  IDLE: if(!rxd & receive ) nxt_st=RECEIVE;					//接受到开始信号,开始接受数据
    		  RECEIVE: if(count==7) nxt_st=RECEIVE_END;	//八位数据接受计数
    		  RECEIVE_END: nxt_st=IDLE;						//接收完成
    		  default: nxt_st=IDLE;
    	  endcase
    	end
    	
    	always@(posedge clk)
    	  if(cur_st==RECEIVE)
    		 count<=count+1;							//接受数据计数
    	  else if(cur_st==IDLE | cur_st==RECEIVE_END)
    		 count<=0;
    		
    	always@(posedge clk)
    	  if(cur_st==RECEIVE)                       //从高到低发送数据
    	  begin
    		 data_i[6:0]<=data_i[7:1];
    		 data_i[7]<=rxd;
    	  end
    	
    	assign receive_ack=(cur_st==RECEIVE_END)?1:0;	//接受完成时间回复信号
    endmodule
    
    module clk_div(
        input clk,
        output reg clk_out
        );
        localparam Baud_Rate=9600;	   				//波特率
        localparam div_num='d50_000_000/Baud_Rate;	//分频数位时钟速率除以波特率
        reg [15:0]num=0;
        always@(posedge clk)
            if(num==div_num) 
    		  begin
                num<=0;
                clk_out<=1;
            end
            else 
    		  begin
                num<=num+1;
                clk_out<=0;
            end
    endmodule
    

    四、仿真与综合测试

    仿真代码

    `timescale 1 n在这里插入图片描述
    s/ 1 ps
    module uart_top_vlg_tst();
    // constants                                           
    // general purpose registers
    reg eachvec;
    // test vector input registers
    reg clk;
    reg [7:0] data_tx;
    reg receive;
    reg rxd;
    reg start;
    // wires                                               
    wire [6:0]  hex0;
    wire [6:0]  hex1;
    wire re;
    wire rx;
    wire tx;
    wire txd;
    
    // assign statements (if any)                          
    uart_top i1 (
    // port map - connection between master ports and signals/registers   
    	.clk(clk),
    	.data_tx(data_tx),
    	.hex0(hex0),
    	.hex1(hex1),
    	.re(re),
    	.receive(receive),
    	.rx(rx),
    	.rxd(rxd),
    	.start(start),
    	.tx(tx),
    	.txd(txd)
    );
    initial                                                
    begin                                                                  
       clk=1;
    	start=1;
    	receive=1;
    	data_tx=00001101;
    	forever
    	begin
    	#1 rxd=1;
    	#1 rxd=0;
    	end
    	//#1000 $stop;	                                          
    $display("Running testbench");                       
    end                                                    
    always                                                 
    // optional sensitivity list                           
    // @(event1 or event2 or .... eventn)                  
    begin                                                  
    #1  clk=~clk;// 每10ns翻转一次,周期即20ns,50Mz
                                                                   
    end                                                    
    endmodule
    

    1、 仿真图

    在这里插入图片描述

    2、 实物图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    五、总结

    1、串口通信的实质是串转并的结果,本质和用状态机检测脉冲序列并无太大区别。
    2、当遇见输出不对的时候,要学会利用检查短路的思路一小段一小段地检查,并用数码管观察输出,用串口助手输入信号检测接收模块的功能。

    展开全文
  • 异步串行通信

    千次阅读 2019-01-28 11:45:11
    异步串行通信
                   

    电子工业协会(EIAElectronic Industry Association)推荐的RS-232-c标准,是一种常用的串行数据传输总线标准。UART(通用异步收发器/串口/RS-232),早期它被应用于计算机与终端通过电话线和MODEM进行远距离的数据传输,随着计算机和微控制器的发展,近距离也采用该通信方式。在ARM嵌入式系统中,UART串口与USB、网口常用于系统的调试。<?xml:namespace prefix = o />

    1实例说明

    目前UARTPC机与电子通信中应用最广泛的一种串行接口,RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。ARM系统需要通过该串口进行程序调试。

    本实例使用电平转换电路MAX232来设计串行通信模块,RS-232-C串行接口总线适用于:设备之间的通信距离不大于<?xml:namespace prefix = st1 />15m,传输输率最大为20kbps,规定的数据传输速率为每秒5075100150300600120024004800960019200波特。RS-232-C采用负逻辑,即逻辑“l”-5V-15V;逻辑“0”+5V+15V

    2串行通信原理

    串行通信是指将构成字符的每个二进制数据位,依据一定的顺序逐位进行传送的通信方法。在串行通信中,有两种基本的通信方式:异步通信和同步通信。

    2.1异步串行通信

    异步串行通信的数据格式如图14-l所示。

    <?xml:namespace prefix = v />665){this.resized=true;this.style.width=665;}">
    异步通信数据帧的第一位是开始位,在通信线上没有数据传送时处于逻辑“1”状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。因此,起始位所起的作用就是表示字符传送开始。

    当接收设备收到起始位后,紧接着就会收到数据位。数据位的个数可以是5678位的数据。在字符数据传送过程中,数据位从最低位开始传输。数据发送完之后,可以发送奇偶校验位。奇偶校验位用于有限差错检测,通信双方在通信时需约定一致的奇偶校验方式。就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽有限但很容易实现。在奇偶位或数据位之后发送的是停止位,可以是1位、1.5位或2位。停止位是一个字符数据的结束标志。

    存异步通信中,字符数据以图14-1所示的格式一个一个地传送。在发送间隙,即空闲时,通信线路总是处于逻辑“1”状态,每个字符数据的传送均以逻辑“0”开始。

    2.2同步串行通信

    在异步通信中,每一个字符要用到起始位和停止位作为字符开始和结束的标志,以至于占用了时间。所以在数据块传送时,为了提高通信速度,常去掉这些标志,而采用同步传送。同步通信不像异步通信那样,靠起始位在每个字符数据开始时使发送和接收同步,而是通过同步字符在每个数据块传送开始时使收发双方同步。

    同步通信的特点是:

    ·以同步字符作为传送的开始,从而使收发同步;

    ·每位占用时间相同;

    ·字符数据间不允许有间隙,当线路空闲或没有字符可发送时,发送同步字符。

    2.3 RS-232-C接口

    RS是英文推荐标准的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道。对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。

    一个完整的RS-232-C接口有22根线,采用标准的25芯插头座(如图14-2(a)所示)。现代微机采用9芯插头座(如图14-2(b)所示)

    665){this.resized=true;this.style.width=665;}">

    9针串行口DB-925针串行口。DB-25插针的对应关系如表14-1所示。25针串行口还具有20mA电流环接口功能,用91l1825针来实现。

     

    665){this.resized=true;this.style.width=665;}">
    一般应用情况下,RS-232-C的最高传输速率为20kbs,最大传输线长为30m。计算机与终端之间利用RS-232-C做进程连接时,可以用几根线实现交换连接。如图14-3(a)所示是DB-9仅将发送数据与接收数据交叉连接,同一设备的请求发送被连接到自己的清除发送载波检测上,而它的数据终端就绪连到自己的数据设备就绪上。相应的DB-25的连接方法如图14-3(b)所示。
    665){this.resized=true;this.style.width=665;}">
    本实例讲述的串口连接方式比上面介绍的更为简单,只交叉连接两个DTE发送数据接收数据,并连接信号地即可。这样的连接只要3根线,即模仿串口通信格式。

    ARM系统中,要完成最基本的串行通信功能,实际上只需要RXDTXDGND即可。这样的连接只要3根线,即模仿单片机的串口通信格式。但由于RS-232-c标准所定义的高、低电平信号与ARM系统的LVTTL电路所定义的高、低电平信号完全不同,LVTTL的标准逻辑“1”对应2V3.3V电平,标准逻辑“0”对应0V0.4V电平;而:RS-232-c标准采用负逻辑方式,标准逻辑“1”对应-5V-15V电平,标准逻辑“0”对应+5V+15V电平。显然,两者间要进行通信就必须经过信号电平的转换,这里可以与CMOSTTL电路相连,利用专用集成电路进行电平转换。

    3硬件电路设计

    ARMUART单元提供独立的异步串行I/O端口,每个都可以在中断和DMA两种模式下工作。支持的最高波特率为115.2kbps,每个UART通道包含216FIFO,分别用于接收和发送数据。

    UART可以进行以下参数的设置:可编程的波特率,红外收/发模式,12个停止位,5位、6位、7位或8位数据宽度和奇偶位校验。每个UART包含一个波特率产牛器、发送器、接收器和控制单元。波特率发生器以MCLK作为时钟源;发送器和接收器包含16字节的FIFOS和移位寄存器。要被发送的数据,首先被写入FIFO,然后拷贝到发送移位寄存器;接着它从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从数据接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO中。

    系统中采用RS-232的电平转换芯片实现串口的通信。TTL/CMOS输入输出信号与ARMUART输入/输出口对接。

    串口UART模块如图14-4所示。

    665){this.resized=true;this.style.width=665;}">
    4
    软件设计

    4.1 串口中断程序

    通信接口是标准的9600波特率的RS-232,因此在程序中要对串口进行初始化和端口配置,这样才能使串口正常工作。与ARM通信时,发送命令后返回的数据包是由模块自动发送的,并且正常工作时会自动发送数据包,因而串口的工作方式不能设定为查询方式,而只能设定为中断工作方式。

    在串口发送或接收的都是命令数据,因为ARM有固定的命令数据包格式,许多功能和显示都需要依靠对接收的命令数据包的特定字节进行判断来实现,因此串口中断服务程序就显得非常重要。在这里设置了一个长度为100的数组存放接收到的数据包,长度设为100是充分考虑到发送的数据长度有可能在60字节以上。在其中经过反复验证设置了几个非常重要的变量作为接收相关标志。

    665){this.resized=true;this.style.width=665;}">
    这里需要说明的是接收中断标志位RIO的作用。接收中断标志R10接收完一个数据字节后由硬件置位,当ARM转向中断服务程序时硬件小清除UARTO中断标志,中断标志必须用软件清除,这就允许软件查询UART0中断的原因(发送完成或接收完成)

    4.2串口调试程序代码

    串口调试程序也是在内启动方式下先下载2KB的串口调试程序代码并执行,它通过对任意总线地址读写操作来实现硬什接口的调试。

    在调试时用到的串口调试软件比较多,这里使用的是SSCOM版,其操作简单、方便,界面很直观并且功能比较齐全。其操作界面如图14-5所示。

    665){this.resized=true;this.style.width=665;}">
    在调试ARM前,必须先对核心板的串口工作情况进行调试。为此调试编写的测试程序功能是通过串口输出一个字符串“abcdefg”,经过串口初始化和程序运行,将PCARM板串口互连接线连接,通过此软件进行串口监听,接收到了正常的字符串“abcdefg”,即表明串口工作正常。然后将PCARM用专用连接线连接,设置好PC的串口号和波特率,根据通信协议在串口发送查询模块状态命令,并得到返同的数据包,表明与ARM通信正常。整个程序结构比较简单,只是在串口调试的主循环里加入了实现总线读写的调试命令。
    665){this.resized=true;this.style.width=665;}">
    665){this.resized=true;this.style.width=665;}">
    665){this.resized=true;this.style.width=665;}">
    利用这个串口调试程序,就可以利用串口发送命令,实现对任意总线地址的读/写操作。

    5实例总结

    串行通信是一种近距离通信手段,因为使用方便、编程简单而广泛使用,几乎所有的微控制器、PC都提供串行通信接口。

        本章讲述了UART异步串行通信模块的原理、软硬件设计,它是ARM程序调试的基础。在ARM中采用串口通信技术,可以大大提高程序的可读性及工作效率,并可广泛应用于基于串口通信的各种场合。

                

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 学习通信的时候,这几个名词单工通信/半双工通信/全双工通信串行传输/并行传输,同步传输/异步传输我一直都很迷,现在我总结一下,也是加深我的记忆了 1.按照信息在信道中的传输方向分为: a.单工通信: 消息只能...
  • 同步串行通信与异步串行通信

    千次阅读 2017-05-12 20:54:48
    串行通信是微机接口的一个重要组成部分,有着极其广泛的应用。随着微机特别是单片机的发展,其应用已从单机逐渐转向多机或联网,而多机应用的关键又在微机通信。微机通信有串行和并行两种通信方式,并行通信可以提高...
  • C系列单片机有一个全双工串行口.ppt80C51系列单片机有一个全双工串行口,这个口既可以用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。 2、串行控制寄存器SCON 3、电源控制寄存器PCON ...
  • 通讯的方式分类: 1.并行通信:是指数据的各位同时在多根数据线上发送或接收。如下图 并行通信的特点:控制简单,传输速度快;由于传输线较多,适用...在串行通信中,根据对数据流的分界、定时以及同步方案方法...
  • ARM-通信协议串行和并行通信串行通信的两种方式串行通信的制式 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。 SPI是串行外设接口(Serial Peripheral Interface)的缩写,...
  • 同步串行与异步串行通信

    万次阅读 多人点赞 2018-09-14 14:38:46
    串行通信是微机接口的一个重要组成部分,有着极其广泛的应用。随着微机特别是单片机的发展,其应用已从单机逐渐转向多机或联网,而多机应用的关键又在微机通信。微机通信有串行和并行两种通信方式,并行通信可以提高...
  • 按数据的不同传输方向可分为单工、半双工、全双工。 1.并行通信和串行通信 (1)并行通信 并行通信是同时传送数据的各个位进行发送or接收的通信方式。 传输率比串行接口快8倍,理论值为1Mbits/s. 传输的信息不要求...
  • 时间就是金钱,技术就是饭碗,每天学习,每天积累,做好...特性:两根线,全双工异步通信,速度较慢。所谓异步就是发送时钟域接收时钟不一致,说白了除了进行数据接收和发送以为,还要进行跨时钟域处理。UART是...
  • 串行通信源代码

    2006-02-23 09:05:59
    串行通信的源代码,采用mscomm控件实现全双工异步串行通信
  • 2.全双工、半双工和单工 3.同步与异步 在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯...
  • 全双工(Full Duplex)是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。 半双工(Half Duplex),所谓半双工就是指一...
  • 全双工技术运用到D2D (Device-to-Device)通信中,可以增大D2D用户的吞吐量进而提高系统吞吐量,但全双工通信带来的自干扰也不可避免。考虑多个D2D用户对可共享相同的蜂窝用户资源,此时D2D用户对之间将产生同频...
  • 串行就是这样,只需要一条数据线(全双工和同步串行时两条),一位一位的传过去。为了让大家在直到你是在给我传数据而不是外面的噪音或者是胡说八道,所以串行数据的各位要组装帧(看正文中的帧格式)。乍一看,这种...
  • 2.SPI的全双工通信 3.串口USART的全双工通信 背景知识 首先我们先来区分一下单工、半双工、全双工模式。 单工:数据传输只支持数据在一个方向上传输 半双工:允许数据传输在两个方向传输,但是,在某一时刻,...
  • 什么是计算机通信计算机通信基本原理并行与串行通信方式异步通信和同步通信 什么是计算机通信 计算机通信是指计算机个计算机之间或计算机与终端之间进行信息传递的方式。 通信中有并行和串行两种方式。在单片机系统...
  • 今天跟公司的同事进行了一起探讨“异步
  • 大家学过单片机,应该知道串口通信的原理,例如,在stm32中,编写UART,可以在上位机PC端利用串口调试助手,通过下位机stm32给PC机发送字符消息,反正也可以,这就是最简单的通信实例。那么在FPGA领域,常见...
  • (2003年) 【分析】串行通信是指数据的传输是在一条传输线路上按位进行,它可以采用异步方式,也可以采用同步方式。采用异步方式时,发送与接收设备之间采用“握手”信号来进行同步,而采用同步方式时,发送与接收...
  • 按数据传输的同步方式可分为同步传输和异步传输,而同步和异步同属于串行通信,是串行通信的两种基本形式!!! 按数据传输的流向和时间关系可以分为单工、半双工和全双工数据传输。 1、并行通信(传输)和串行...
  • 串行通信里的异步通信与同步通信的区别

    万次阅读 多人点赞 2016-09-08 14:49:08
    一、串行通信基本认识  基本的通信方式有并行通信和串行通信两种。  一条信息的各位数据被同时传送的通信方式称为并行通信。并行通信的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根...
  • 串行与并行 串行 一条信息的各位数据被同时传送的通讯方式称为并行通讯。并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近距离(相距...全双工

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,600
精华内容 3,040
关键字:

全双工异步串行通信