微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机之寄存器-3.3单片机串口通信之发送与接收

51单片机之寄存器-3.3单片机串口通信之发送与接收

时间:11-21 来源:互联网 点击:

TMOD=0X20;

TH1=TL1=253; //波特率9600

TR1=1;

while(1)

{

SBUF=0x38;

delayMs(250);

delayMs(250);

}

}

void delayUs(unsigned char t)

{

while(--t);

}

void delayMs(unsigned char t)

{

while(--t)

{

delayUs(245);

delayUs(245);

}

}

既然知道如何操作串口通信如何发送,我们按照同样的思路看看如何操作串口接收。首先接收到的信息在哪里?将SBUF=dataTXD替换为dataRXD=SBUF. 前者表示把数据写进SBUF,发送;后者表示把SBUF中的数据读出了,接收。注意接收缓冲器SBUF和发送缓冲器SBUF名字一样,地址也一样,但是是两个独立的物理空间。工作方式的选择与速度设置与前面一样。那么,怎么让单片机知道开始接收呢?需要满足两个条件,TI=0和REN=1. REN表示串口接收允许。另外,当接收完成一帧数据(8位)后,控制信号复位,中断标志RI被置"1",呈中断申请状态。在工作方式1下,同时满足SM2=0,RI=0接收数据有效。我们可以整理一下串口接收的过程如下,

(1)选择工作方式(工作方式1)

(2)设置速度

(3)开始接收(TI=0,REN=1)

(4)接收的信息在哪里。(dataRXD=SBUF)

(5)接收的数据有效(SM2=0,RI=0)

串行通信接收的参考代码如下:

#include "reg52.h"

#define uchar unsigned char

void delayUs(unsigned char t);

void delayMs(unsigned char t);

void main(void)

{

uchar MyRevData;

SM0=0;

SM1=1;//串口工作模式1

REN=1;

TMOD=0X20;

TH1=TL1=253; //波特率9600

TR1=1;

while(1)

{

MyRevData=SBUF;

delayMs(250);

P1=MyRevData;

delayMs(250);

RI=0; //当接收完成一帧数据(8位)后,控制信号复位,中断标志RI被置"1",呈中断申请状态。在工作方式1下,SM2=0,RI=0数据有效

}

}

void delayUs(unsigned char t)

{

while(--t);

}

void delayMs(unsigned char t)

{

while(--t)

{

delayUs(245);

delayUs(245);

}

}

将代码编译烧写后进行测试,打开STC-ISP烧写软件,选中串口助手,设置COM端口,波特率等参数,打开串口,然后输入要传送的内容,如下图所示。

在发送区内输入FF后点击"发送字符/数据",LED全部熄灭,输入00,点击发送,LED全部点亮

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top