导航:首页 > 操作系统 > 51单片机串口波特率设置

51单片机串口波特率设置

发布时间:2023-03-24 22:05:43

1. 51单片机波特率计算公式和定时器初值

51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。它的各个位的具体定义如下: 

SM0 SM1 SM2 REN TB8 RB8 TI RI 

SM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。 

波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600 不是每秒种可以传送9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600÷10=960 字节。 

    51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。 

    模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。 

上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下: 

  溢出速率=(计数速率)/(256-TH1初值) 

  溢出速率=fosc/[12*(256-TH1初值)] 

    上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式: 

11.0592M 

               9600=(2÷32)×((11.0592M/12)/(256-TH1)) 

TH1=250 

12M 

               9600=(2÷32)×((12M/12)/(256-TH1)) 

TH1≈249.49 

    上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

2. 串口通信方式1的波特率是通过单片机的那个模块来设置的

串口通信方式1的波特率是通过单片机的T1定时/计数器模块来设置的。要与PC通信必须庆悉指遵守规则,也就誉配是必须有相同的发送/接收频率(波特率)陆灶51单片机中使用T1定时/计数器来设置波特率定时器溢出一次代表传输一次数据。

3. 51单片机 设置串口波特率115200初值怎么弄 呢 单片机是11.0592的晶振

void UartInit(void) //[email protected]
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

void UartInit(void) //[email protected]
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xbf; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFF; //设定定时初值
TH1 = 0xFF; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

4. MCS-51单片机串口四种工作方式的波特率如何确定

1、串口屏和软件成功联机之后,左上角会显示当前波特率。

2、打开指令助手,点击“设备配置”,此时进入设备配置界面,如图所示。

3、修改之前需解除默认配置,点击“解除系统配置”,指令助手会发送对应指令。NANO型串口屏出厂波特率为115200,其它型号串口屏出厂波特率为19200。

4、修改波特率,波特率可修改范围为1200-2000000,点击“_”,选择对应的波特率,点击“设置”。例如选择波特率为19200,点击“设置”,指令助手发送对应的指令。

5、如果需要重新锁定,点击“锁定系统配置”。

6、重新联机,此时的波特率为19200。

7、工程编译无误之后,直接点击“LOAD”,此时串口屏通过USB线下载工程。

5. 51单片机串口通信波特率若可变,由谁确定

您好!很高兴为您解答问题,以下是我为您提供的解答内容:
你串口初始化那里的设置波特率是4800而不是9600
你在主程序中已经无条件地执行了这个display(dat - 48)程序,你可以把while(1)改成由标志位判定有无接收到串口数据,有才置位标志位,进行显示。

6. 51单片机波特率如何设置啊

串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。 方式0的波特率 = fosc/12 方式2的波特率 =((2^SMOD)/64)• fosc 方式1的波特率 =((2^SMOD)/32)•(T1溢出率) 方式3的波特率 =((2^SMOD)/32)•(T1溢出率) 注意:SMOD为PCON寄存器的最高位(即PCOM<7>)。 T1 溢出率 = fosc /{12×[256 -(TH1)]} --将该公式代人方式1或3 最后推出公式:TH1=256-(fosc*2^SMOD)/(baudrate*12*32); 呵呵 如果你用方式2(波特率 =((2^SMOD)/64)• fosc )的话 12M的晶振就不能得到9600波特率了(除非你改变你的晶振,但是那样的晶振好像没有卖) 所以你只能选择方式1或3 而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点 TH1又只能是整数的 所以传输时会有误差. 参考: #include #define baudrate 9600UL #define fosc 11059200UL//其中,UL是不能省略的,代表长整型。 unsigned char a,flag; void serial_init(void) { unsigned char S_MOD=1; TMOD=0x20;//T1工作在方式2 SCON=0x50;//SM0=0 SM1=1->串口通信在模式1, //SM2=0->多级通信中使用的位,REN=1; PCON=0; if((PCON&0x80)==0x80) S_MOD=2; TH1=256-(fosc*S_MOD)/(baudrate*12*32);//其中SMOD=0, TL1=256-(fosc*S_MOD)/(baudrate*12*32); TR1=1;ES=1;EA=1; }

7. 51单片机串口通信时,程序波特率设定4800同时使SMOD=1波特率倍增

使SMOD=1的时候是指将波特率2400加倍,最终加倍后的为波特率4800,因此通信速率增大
程序波特率设定4800并且使SMOD=0时,这时候应该使用波特率2400进行通信,通信速率降低。
当单片机晶振使用12MHZ的时候,串口通信会有误差,使用SMOD加倍会减少误差。
--------网上搜不到答案,所以查询资料后回答,供后人参考

8. 如何设置波特率

51单片机波特率设置主要有以下两种方式:1) 工作方式0 ,2)工作方式1 。
1) 工作方式0
SM0=0且SM1=0时,串口选择工作方式0,实质这是一种同步移位寄存器模式。 其数据传输的波特率固定为Fosc/12,数据由RXD引脚输入或输出,同步时钟由TXD引脚输出。
2)工作方式1
当SM0=0且SM1=1时,串口选择工作方式1,其数据传输的波特率由定时/计数器T1、T2的溢出速率决定,可通过程序设定。当T2CON寄存器中的RCLK和TCLK置位时,用T2作为发送和接收波特率发生器,而RCLK=TCLK=0时,用T1作为波特率发生器,两者还可以交叉使用,即发送和接收采用不同的波特率。数据由TXD引脚发送,由RXD引脚接收。

阅读全文

与51单片机串口波特率设置相关的资料

热点内容
安卓手机如何共存歌曲 浏览:425
简单的游戏代码源码 浏览:345
金蝶服务器怎么改 浏览:594
h y p 6.vip 浏览:709
韩国战争电影十大巅峰之作 浏览:425
大尺度百合剧 浏览:112
为什么要叫毒app 浏览:492
编程类校赛 浏览:994
五十五度灰 浏览:351
android入门到精通pdf明日科技 浏览:491
解压缩文件怎么老重启 浏览:213
儿童智能关怀app苹果为什么不能用 浏览:707
tcpdump抓包命令 浏览:793
各大主播在用什么app看电影 浏览:421
泰国恐怖片 和尚 浏览:219
宁夏品质压缩机市场 浏览:186
日立螺杆压缩机维修 浏览:427
识别英语单词哪个app比较好 浏览:188
夫人被家丁强奸的泰国电影? 浏览:256