异步通信协议规定每个数据以相同的位串行传送,每个串行数据自起始位、数据位、奇偶校验位和停止位组成。
起始位:发送设备发送一个数据时,先发一个逻辑“0”信号,占一位,提醒接收方准备接收。
数据位:信号位数可以为5、6、7或8 位。数据位从最低有效位开始逐位发送。
奇偶校验位:用于进行有限差错检测, 占一位。通信双方需约定-致的奇偶校验方式。
停止位:用于标志一个数据的传送完毕.一般用高电平.可以为1 位、1.5位、2 位。
波特率( Baud ):它是以每秒传送的二进制位数来度量的,单位为比特/秒(b/s)。PC机常用的波特率有: 50 、75 、110、150、300、600、1200、4800、9600和19200b/s 等几种。
串口通信,就是RS-232/RS-485通信,要求通信的双方波特率等通信格式一样才可以通信成功。可是在许多情况下,两种不同格式比如不同波特率的串口也要相互通信,这就必须进行串口波特率等格式的转换。解决波特率转化的途径有两种一是用单片机,接收时设置为跟上位PC机一致的波特事进行接收。发送时再设置为跟下位系统相同的波特察发送数据;二是用FPGA , 利用VHDL设计出异步串行通信电路,直接接收PC 机的数据,自行转化为另一种波特率的事行数据再发送出去。
首先我们约定, PC机与FPGA 进行串行通信的波特率为9600,信息格式为8 个数据位, 1 个停止位, 1 个奇偶校验位。
控制下位系统进行工作的波特率为375k ,其信息格式为8 个数据位, 1 个停止位, l 个奇偶校验位。
对于接收Baud9600 (每位敷掘的位宽大约为104 μ s )的数据而言, 采用的晶振必须要大于2 × 9600= 19200Hz 才行,考虑到发送数据需要产生375k 的时钟,被选用能被整除的24MHz 晶振。
接收过程始于在TXD9600端检测到负跳变时。此时,利用24MHz 的晶振分频得来的1MHz不断采样, 采样速率为波特率的104倍。。一旦检测到负跳变, 104计数据立即复位开始记数,当记数到52时把此刻的采样值寄存起来, 记数满104时一位数据采样完毕, 清零104 计数器,重新开始记数,对下一位数值进行采样寄存。2100433B
单片机中计算串行口的波特率时,根据波特率是公式计算,我总是算不出正确值,波特率的单位是什么
波特率的单位是:波特/秒,也就是一秒内接收到多少个字符,根据你单片机的晶振频率、机器周期设定波特率,也就是设定在定时器中的初值,此时为了精确,要考虑到每一句程序的时间
波特率 即 调制速率 ,指的是信号被 调制 以后在单位时间内的 波特 数,即单位时间内 载波 参数变化的次数。它是对信号传输速率的一种度量,通常以“波特每秒”(Bps)为单位。 波特率有时候会同 比特...
什么叫波特率:1、单片机或计算机在串口通信时的速率。2、指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止...
随着网络技术的发展,工业控制等应用场合对通信数据的实时性和可操作性提出了很高的要求。RS-232总线作为通信场合中常用的外部总线,存在着传输距离有限、传输速率慢的缺点。为了解决上述弊端,采用PIC网络单片机,针对TCP/IP协议栈中TCP、HTTP等相关协议部分进行修改,设计出HTTP与RS-232协议转换器,实现了TCP/IP协议与串行通信协议数据包的相互转换,并通过AJEX、CGI技术以及以太网中的相关服务达到动态配置网络参数的目的。
提出一种基于ARM9处理器的电力系统通信协议转换装置的设计方案。具体阐述该方案的工作原理、主要特点、总体设计、硬件电路和软件设计。
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示 。
波特率发生器不是产生波特率的,波特率时钟频率/波特率因子=波特率。
波特率发生器的作用是从输入时钟转换出需要的波特率clk,即波特率时钟频率。
一个完整的由verilog实现的波特率发生器:
module baud_gen(
clk_50MHz, rst_p, bclk
);
input clk_50MHz; /*输入的系统时钟,50MHz*/
input rst_p; /*复位脉冲,高电平有效*/
/* 倍频值16乘以9600波特率,即9600*16=153600,得到波特率发生器的实际输出信号频率为153.6kbit/s */
output bclk; // 输出信号:UART(串口)波特率发生器输出的时钟脉冲,频率:153.60kbps
//即每秒1536000个脉冲,*波特率发生器输出脉冲bclk,注意:除了主频分频之外,
//还决定了这个信号的占空比,在本例中输出信号占空比为 1:325
reg bclk; //寄存器数据类型bclk
reg [8:0] cnt; //寄存器数据类型cnt,9位,UART用它来记录接收到的主频脉冲个数,
//注意在修改输出波特率值时,若占空比小于1:511,需要增加该变量所占位数
//以下语句利用同步计数器完成时钟分频,
always @(posedge clk_50MHz) begin /* 每当信号clk_50MHz发生电平变化执行以下语句 */
if(rst_p) begin /* 如果复位脉冲信号为高电平执行以下语句 */
cnt <= 0; //对主频信号计数器cnt做非阻塞方式复位赋值,赋值为逻辑0 。此后每当时钟信号到来就变。
bclk <= 0; /* 寄存器变量bclk赋值为逻辑0,使该脉冲信号复位为低电平,以低电平作为开始*/
end
else begin
/* 50MHz除以153600(UART实际频率)等于325.5 即50_000_000 /153600 = 325.5(波特率除数) */
if(cnt > 324) begin /*如果cnt的数值大于324,即cnt计数脉冲数等于325(0-324个脉冲)*/
cnt <= 0; /* 50MHz主频信号计数器cnt值,被非阻塞方式复位*/
bclk <= 1; /*串口波特率时钟脉冲信号bclk赋值为逻辑1,使该脉冲信号跳变到高电平周期*/
end
else begin
cnt <= cnt 1; /* 50MHz主频信号计数器cnt值被非阻塞方式增量赋值(加1) */
bclk <= 0; //波特率发生器时钟脉冲信号bclk被非阻塞方式赋值为’0’,
//使该脉冲信号跳变到低电平周期*/
end
end
end
endmodule
在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
方式0
方式0的波特率固定为主振频率的1/12。
方式2
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
方式1和方式3
定时器T1作为波特率发生器,其公式如下:
T1溢出率= T1计数率/产生溢出所需的周期数
式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
定时器T1工作于方式0:溢出所需周期数=8192-x 定时器T1工作于方式1:溢出所需周期数=65536-x
定时器T1工作于方式2:溢出所需周期数=256-x
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。
下表列出了定时器T1工作于方式2常用波特率及初值。
常用波特率 Fosc(MHZ) SMOD TH1初值 19200 11.0592 1 FDH 9600 11.0592 0 FDH 4800 11.0592 0 FAH 2400 11.0592 0 F4H 1200 11.0592 0 E8H
例如9600 11.0592 0 FDH
T1溢出率= T1计数率/产生溢出所需的周期数
产生溢出所需的周期数=256-FD(253)=3 SMOD=0 11059200/12*3 *1/32=9600
在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS—51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。
一、方式0的波特率
方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即: 方式0的波特率=fosc/12
二、方式l和方式3的波特率
方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特宰由定时器T1的 溢出率与SMOD值同时决定,即: 方式1和方式3的波特率=2SMOD/32·T1溢出率
其中,溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/2;当C/T=1时,计数速率取决于外部输入时钟频率。
当定时器Tl作波特率发生器使用时,通常选用可自动装入初值模式(工作方式2),在 工作方式2中,TLl作为计数用,而自动装入的初值放在THl中,设计数初值为x,则每过“256一x”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止T1中断。这时,溢出周期为:2100433B