首页 > 编程知识 正文

51单片机波特率(51单片机波特率计算c语言,8051单片机波特率计算公式(配套C语言例程))

时间:2023-05-04 15:25:59 阅读:121738 作者:4246

#include 'Reg52.H '

/* * * * * * * * * * * * * * * * * *

请事先计算选择的水晶振动能达到的最高速度。 波特率不能超过最高速度

(1)波特率加倍) SMOD=1) Max_Baud=FOSC/12/16

)波特率不加倍(SMOD=0):Max_Baud=FOSC/12/32

例如,22.1184MHz水晶振动,波特率为倍时,最大波特率=22118400/12/16=115200

* * * * * * * * * * * * * * * * *

#define FOSC 22118400 //振荡频率

#定义保真9600//波特率

#定义Smod1//波特率是否加倍

#if SMOD

# define TC _ val (256-fosc/16/12/baud ) ) )。

#else

# define TC _ val (256-fosc/32/12/baud ) )。

#endif

类型无符号char uint 8;

类型def unsigned int uint 16;

codeconstcharstr1[ ]=' therstringistransmittedfrom 80 c 51! rn ';

codeconstcharstr2[ ]=' author : xqlu (at ) ysu.edu.cnr(n );

/*********函数声明***********************/

语音识别(语音;

语音助手(uint 8;

voidsendrstr (常数单元8 * ptr );

/**********主函数*************************/

语音主(语音) )。

{

uint8 i=0;

InitUART (;

wile(str2[I]!=' ' )

{

sendonebyte(str2[I];

}

sendrstr(str1;

wile(1;

}

/**********中断服务函数* * * * * * * * * * * * * * * * * * * * * * * * /

voidUart_ISR(void ) interrupt 4

{

uint8 RX_Data;

//只根据“接收”中断,到了“发送”中断就直接关掉

是if (射频)

{

RI=0; //串行中断标志无法自行清除,需要手动清除

RX_Data=SBUF;

发送一次字节(rx _ data;

}

else

TI=0; //串行端口中断发生在发送缓冲数据之后

}

/***********串行初始化函数* * * * * * * * * * * * * * * * * * * * * * * /

语音(语音) )

{

TMOD=0x20;

SCON=0x50;

TH1=TC_VAL;

TL1=TH1;

PCON=0x80; //将发送速率加倍

ES=1;

EA=1;

TR1=1;

}

/*********串行发送字符函数* * * * * * * * * * * * * * * * * * * * * /

语音感知字节(uint8c )

{

ES=0; //禁止发送中断

SBUF=c;

while (! 钛;

TI=0;

ES=1;

}

/*********串行发送字符串函数* * * * * * * * * * * * * * * * * * * /

voidsendrstr (常数单元8 * ptr ) ) )。

{

德奥

{

发送一个字节(* ptr;

}while(*ptr!=' ';

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。