单片机串口通信实验
- 格式:doc
- 大小:913.50 KB
- 文档页数:10
滨江学院
单片机原理及应用
题目单片机串口通信实验
院系____电子工程系______
专业_____通信工程_______
学生姓名_______******_______
学号______**********___
二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,界面如下图所示: