51单片机之寄存器-3.3单片机串口通信之发送与接收
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全部点亮
51单片机寄存器串口通信发送与接 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)