学习记录
波
特
率
=
2
S
M
O
D
∗
晶
振
频
率
32
∗
溢
出
率
波特率=\frac{2^{SMOD}*晶振频率}{32*溢出率}
波特率=32∗溢出率2SMOD∗晶振频率
emmm貌似不同的模式有不同的计算方法
设置好串口助手之后就可以进行测试了,代码如下:
#include<reg52.h>
#include<string.h>
#define uint unsigned int
#define uchar unsigned char
void com_init(void)
{
TMOD=0X20;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
void prin()
{
int i=0,j=0;
char a[25]="hello world\n"; //这个是返回的数据
for(i=0;i<25;i++)
{
SBUF=(int)a[i];
TI=0; //串行口通信发送请求中断标志位TI复位
for(j=0;j<255;j++); //设置一个延时的,总是出现只返回一个字符,还是随机的!!!
}
}
void main(void)
{
uchar com_dat; //存接受的数据
com_init(); //初始化
while(1)
{
if(RI) //串口通信接收标志位RI置位时
{
com_dat=SBUF; //存入数据
RI=0; //串口通信接收标志位RI复位
if(com_dat==0x01)
prin(); //返回数据
P0=~com_dat; //这里是我用的八位小灯来表示接受的数据
//当然也可以直接SBUF=com_dat返回
TI=0;
}
}
}
还有些小问题,中间延时那个地方运行没问题,但是原理不是很清楚,大佬们能帮忙看看吗?!!