单片机之串口

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。标准有RS232,RS422,RS485。

在单片机中,串口扮演了一个很重要的角色——传话筒。通过串口,单片机得以和计算机可以通话。接下来来探讨一下使用串口需要配置什么。
1.配置串口工作模式为模式1。即设置SCON寄存器(SM0,SM1,REN位),SCON |= 0X50;(SM0 = 0,SM1 = 1,REN =1).
SM0 = 0,SM1 = 0 方式0:同步移位串行方式:波特率= SYSclk / 12.
SM0 = 0,SM1 = 1 方式1:8位UART,波特率可变: 波特率 = (2^SMOD / 32) * (定时器1的溢出率)
SM0 = 1,SM1 = 0 方式2:9位UART: 波特率 = (2^SMOD / 64) * (SYSclk系统工作时钟频率)
SM0 = 1,SM1 = 1 方式3: 8位UART,波特率可变: 波特率 = (2^SMOD / 32) * (定时器1的溢出率)
注意:
当单片机工作在12T模式时,定时器1的溢出率 = SYSclk / 12 / (256 - TH1);
当单片机工作在1T模式时,定时器1的溢出率 = SYSclk / 6 / (256 - TH1);
SMOD默认为0。具体作用参考数据手册。
2.配置定时器1为模式2,即自动重装载模式。TMOD &= 0X0F; TMOD |= 0X20.
3.根据波特率计算TH1,TL1的初值,如果有需要可使用PCON进行波特率加倍(PCON最高位为波特率加倍位)。
计算公式:TH1 = TL1 = 256 - 晶振值 / 12 / 2 / 16 / 波特率;
如果波特率加倍则:PCON |= 0X80; 计算公式:TH1 = TL1 = 256 - 晶振值 / 12 / 16 / 波特率;
4.打开定时器控制寄存器TR1,启动定时器。即TR1=1。

在这里插入图片描述在这张图中,可以得知:在发送数据的时候TI一直为零,当数据发送结束的时候便变为1了。RI也是同样由0到1.故而我们可以通过TI和RI的状态来判断数据是否发送完全。并且当TI和RI变为1的时候是不会主动变成0的,故而我们需要手动对TI和RI的值进行调整,手动清零。这一点在后方的范例中由展示。

范例:

#include<reg52.h>
#include<string.h>
#include<stdio.h>

void delay()//延时函数
{
int i;
int j;
for(i=0;i<100;i++)
{
for(j=0;j<500;j++)
{
}
}
}
void initUnrt()
{
    SCON =0x50;//配置为可以通讯的模式
	TMOD=0x20;
	TR1 =1;
	TH1=TL1=0xFD;
}

void sendmsg(char *a)
{
	int len;
	int i;
	len=strlen(a);
	for(i=0;i<len;i++)
	{
	SBUF=*a;//在此处,SUBF充当一个嘴的作用,用来向上位机发送数据
	while(TI!=1);
	TI=0; //手动清零
	a++;
	delay();
	}
}

int main()
{
	char *c;
	int i;
	i=0;
	initUnrt();
	*c=SBUF;	//在这里的SBUF作为一个耳朵的作用,用来听取上位机向单片机发送的数据
	RI=0;//由于接收完数据R1为1,所以手动清零
	if(c=='1')
	{
	sendmsg("hello");	  
	}
		return 0;
}
	



该代码实现了上位机向单片机发送1的时候,单片机回复上位机一个hallo。也是初步的使用串口。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值