单片机串口通信实验

  • 格式:doc
  • 大小:913.50 KB
  • 文档页数:10

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

滨江学院

单片机原理及应用

题目单片机串口通信实验

院系____电子工程系______

专业_____通信工程_______

学生姓名_______******_______

学号______**********___

二O一二年六月十日

单片机串口通信实验

摘要:CPU 与其外部设备之间的信息交换或计算机之间的信息交换均可被称为“通信”。串行通信是指数据逐位顺序串行传送的通信方式。串行通信只需一对传输线,并且可以利用电话线等现有通信信道作为传输介质,因而可以大大降低传输线路的成本。

关键字:51单片机,串口通信,全双工

正文:MCS 一51 系列单片机内部有一个可编程的全双工串行通信口,可作为通用异步接收和发送器,也可作为同步移位寄存器用。该串行口有4 种工作模式。片内的定时器/计数器可用作波特率发生器。接收、发送均可工作在查询方式或中断方式。MCS 一51 系列单片机内部的串行通信口,有二个物理上相互独立的接收、发送缓冲器SBUF,对外也有两条独立的收、发信号线RxD(P3.0)和TxD(P3.1)。可以同时发送、接收数据,实现全双工传送。发送缓冲器和接收缓冲器不能互换,发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。两个缓冲器占用同一个端口地址(99H)。具体对哪一个缓冲器进行操作,取决于所用的指令是发送还是接收。

一、实验

1、实验目的

掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。

2、实验器材

微机、串口通讯软件、程序烧录软件、面包板一块、芯片一块、电焊等

3、实验内容

实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。

4、实验原理

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V 为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。

为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows 软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows 的超级终端。

单片机串行接口有两个控制寄存器:SCON和PCON。串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。

单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。在DOS操作环境下,要实现单片机与微机的通

信,只要直接对微机接口的通信芯片8250进行口地址操作即可。WINDOWS 的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。如果用户要进行串行通信,可以调用WINDOWS的API应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。

实验原理图

5、焊接图

焊接参考图

实物图

二、程序

#include

#include

void init_serialcomm(void)

{

SCON = 0x50; //SCON: 串口工作方式1,允许接收TMOD |= 0x20; //TMOD: 定时器1的工作方式2

PCON |= 0x80; //SMOD=1;

TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz IE |= 0x90; //开总中断,开串口中断

TR1 = 1; // 开启定时器1

}

//向串口发送一个字符

void send_char_com(unsigned char *ch)

{

unsigned int i=0;

while(ch[i]!='\0')

{

SBUF=ch[i];

while(TI==0);

TI=0;

i++;

}

}

//串口接收中断函数

void serial () interrupt 4

{

if(RI)

{ //清除接收中断标志位

raid[count]=SBUF;

RI = 0; //读出接收到的数据

count++;

}

if(raid[count-1]=='\r')

{

raid[count-1]='\0';

send_char_com(raid);//串口输出

count=0;

//接收中断并且单片机向arm 传14 byte字符串是否完毕*/ }

main()

{

init_serialcomm(); //初始化串口

while(1)

{ //等待串口接收中断

}

}

三、调试

打开VSPD,界面如下图所示: