若波特率为115200,晶振频率为11.0592MHZ,则计算出写入的值为(若晶振频率为fosc,波特率为fosc12的工作方式是)

宏晶STC89C52产生波特率115200,需要C语言的,晶振11.0592MHz

串口通讯一般采用

工作模式1——10位异步收发(1起始+8数据+1停止),由定时器1

提供

波特率,而此模式的

波特率

计算公式:Baud=2^(SMOD)/32

×T1溢出率;

注:T1溢出率=1/T1中断时间;

SMOD

倍频系数(0

1);

T1

溢出率最大时(即中断时间最短),波特率最大,中断最短也只能

=1个机械周期,晶振Fosc=11.0592MHz,

机械周期

t=12/Fosc,溢出率就=

Fosc/12,代入上面公式,

Baud=(2^1)÷32×11059200/12=

57600

bps,支持不了LZ

要的

115200

的波特率,不过

好在,STC89C52单片机,是支持

机械周期

倍频的(在烧录时选择“双倍频”),它可以把

12T

模式

倍频为

6T模式,也就是

把上面

的12

替代为

6,计算结果

=

115200,刚好等于

LZ

要的。

52单片机 如何用T2来设波特率为115200的 串口接收 要用C语言写

void UART_init()

{

//初始化串行口和波特率发生器

SCON =0x64; //选择串口工作方式,打开接收允许

TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1

TH1 =0xfd; //实现波特率115200(系统时钟11.0592MHZ)

TR1 =1; //启动定时器T1

ET2 =1; //允许T2中断

ES=1; //允许串行口中断

PS=1; //设计串行口中断优先级

EA =1; //单片机中断允许

}

//————————————————————————————————–

// 函数名称: com_interrup()串口接收中断处理函数

// 函数功能: 接收包括起始位\’S\’在内的十位数据到数据缓冲区

//————————————————————————————————–

com_interrupt(void) interrupt 4 using 3

{

unsigned char RECEIVR_buffer;

if(RI) //处理接收中断

{

RI=0; //清除中断标志位

RECEIVR_buffer=SBUF; //接收串口数据

if(point==0) //如果还没有接收到起始位

{

if(RECEIVR_buffer==\’S\’) //判断是否起始标志位

point++; //是准备接收下一位

else

point=0; //不是,继续等待起始位

}

else if(point0point10) //判断是否接收够十位数据

buffer[point++]=RECEIVR_buffer; //不够,把接收到的数据放入接收缓存区

else point=0; //缓冲区已满,清除缓存区内数据重新接收

}

If(TI) //处理发送中断

{

TI=0;

}

}

//

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

void UartInit(void) //115200bps@11.0592MHz

{

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) //115200bps@11.0592MHz

{

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

}

单片机的问题6

你可以把T1工作在方式2自动重装载模式,这样可以避免进入中断,把TH1=TL1=0xFA,SMOD=0,具体程序如下:

TMOD=0x20; //定时器1,模式2,8位重装

SCON=0x50; //串口工作方式1,允许接收,假设你的串口现在是接受数据状态

PCON=0x00; //令SMOD=0,不倍频

TH1=0xFA;

TL1=0xFA; //波特率=4800

EA=1; //开总中断

ES=1; //开串口中断

TR1=1;

这个程序我没有在运行过,但应该没问题的,希望你自己能掌握波特率和溢出率的计算方法,。。。。晚安!

0

评论0