C51,单片机串口编程T1,串口编程(请问如何设置TH1,TL1初值)

本页链接:
第1个回答:
这个要看你是什么单片机,不同的单片机指令周期不同,有12T,也有6T1T等等,12T的算法就是256-;()=FAHTH1=FAHTL1=FAH计算中你会发现除不尽,有小数点,被无情的舍去了,这样的话精度就无法保,所以要调整你的16M,比如用11.M等,波特率一般9600等常用波特率保计算的时候能除尽,这样精度就脯通讯出错的几率就低 另外我这有波特率计算器,需要的话留邮箱
•••••
猜你感兴趣51单片机-串口
> 51单片机-串口
51单片机-串口
SM0,SM1工作方式选择位,SM2多机通信控制位,REN允许串行接收位,TI发送中断标志位,RI接收中断标志位。串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。电源管理寄存器PCON也是一个特殊功能寄存器,字节地址为87H,不能位寻址,PCON用来管理单片机的电源部分,包括上电复位检测,掉电模式,空闲模式等。单片机复位时PCON全部被清0。SMOD该位与串口波特率有关,SMOD=0,串口方式1,2,3时,波特率正常。SMOD=1,串口方式1,2,3时,波特率加倍。用软件置REN为1时,接收器会以所选择波特率的16倍速采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接受这一帧信息的其余位。接受过程中,数据从输入移位寄存器的右边输入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI = 0,且SMOD = 0(或接受到的停止位为1)时,将接收到的9位数据的前8位数据装入接受SBUF,第9位进入RB8,并置RI=1,向CPU中断请求。在具体操作串行口之前,需要对单片机一些与串行口有关的特殊功能寄存器进行初始化设置:确定T1的工作方式(编程TMOD寄存器)计算T1的初值,装载TH1,TL1开启T1(编程TCON中的TR1位)设置串口的工作方式(编程SCON寄存器)串行口工作在中断方式下,要进行中断设置(IE寄存器)波特率计算公式:方式0的波特率=fosc/12。方式1的波特率=(2^smod/32)*(T1溢出率)。方式2的波特率=(2smod/64)*fosc。方式3的波特率=(2smod/32)*(T1溢出率)。T1溢出率=fosc/{12*[256-(TH1)]}fosc为系统晶振频率,通常为12MHZ或11.05926MHZ异步串口通信两种方式:轮询和中断下面是一个中断程序,使用串口调试工具发出什么返回什么。#include <reg52.h>unsigned char a,void main(){
TMOD = 0x20;
//工作方式2,8位自动重装定时/计数器
//波特率为9600bps,系统晶振频率为11.0592MHZ时需要装入的
//TH1,TL1的值可以通过公式 T1溢出率=fosc/{12*[256-(TH1)]}
//开启CPU中断允许位
//开始串口中断允许位
//设置串口的工作方式为01即方式1,10位异步收发(8位数据)
//允许串行接受位
if(flag == 1){
//关闭串口中断,防止发送数据时产生中断
//将数据送到发送缓冲寄存器
while(!TI);
//发送当停止位开始时,会产生中断,把TI置1
//允许中断
}}void uart() interrupt 4{
//当产生RI中断时说明数据接收完毕,把数据赋给变量a
//软件方法把RI置0
flag = 1;}轮询方式,如果有数据输入发送给串口,当停止位开始时,蜂鸣器响起。#include <reg52.h>#define uchar unsigned char
sbit buzzer=P3^4;
void delay(uchar z){
uchar x,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一02-1602-1602-1602-1602-1602-1602-1602-1602-1602-16最新范文01-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0151单片机,T1用作串行口波特率发生器时,设置为工作方式1时,应该给TH1和TL1设定怎样的值_百度知道
51单片机,T1用作串行口波特率发生器时,设置为工作方式1时,应该给TH1和TL1设定怎样的值
TH1和TL1的值是一样的吗,为什么
我有更好的答案
1MCU-方式1:10位通用异步通信一帧信息为10位:1位为起始位(0),8位数据位,1位停止位(1)采用定时器T1(1个16位计数器)作为串行口接收和发送的波特率发生器,数据传输波特率可调,T1为16位定时器:11.0592MHz,波特率为9600的初值:TH1=0FFH,由T1的溢出决定,可用程序设定;32溢出率=溢出周期的倒数溢出周期=12*(256-X)/Fosc波特率=(2^smod * Fosc)/(32 *12*(256-X))初值X=256-(Fosc*2^smod)/384*波特率如,TL1=0FDH强调:51串行口方式1为由定时器T1的计数溢出率来决定。波特率设定:波特率=(2^smod)*(定时器T1溢出率)&#47
采纳率:56%
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。与《》相关:
- Copyright & 2017 www.xue63.com All Rights Reserved}

我要回帖

更多关于 单片机串口发送字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信