Proteus仿真实验—USART串口通信实验

一、概要

        本次实验使用51单片机的串口与Proteus的Virtual Terminal(虚拟终端)进行一个简单的串口通信,实现的功能是让Virtual Terminal通过串口向单片机发送数据,单片机接收到数据后经串口将数据发送到Virtual Terminal上显示。

        Virtual Terminal:如下图,在使用前根据程序设计配置VIRTUAL TERMINAL的参数,本实验使用的是11.0592MHz的晶振,波特率为9600不加倍,串口工作于方式1,8位数据位1位停止位。

        

                                 Virtual Terminal                               Virtual Terminal参数设置

        这里特别要注意的是单片机的晶振频率与VIRTUAL TERMINAL的波特率,这是两边相互通信的基础,通信前双方会约定好相同的波特率,如果不一致,调制和解调的参数就不一样,就很可能读取不到正确的数据,而出现乱码等现象。

二、电路及程序仿真

        1、电路如下图

        2、程序

1)uart.h

#ifndef __UART_H
#define __UART_H

typedef unsigned int u16;
typedef unsigned char u8;

void UartInit();  
void Uart_SendData(u8 byte);
u8 Uart_ReceiveData();



#endif

 2)uart.c

#include "uart.h"
#include "reg52.h"


//串口初始化,设置波特率为9600,使用定时器1,晶振频率为11.0592
void UartInit()   
{
	SCON = 0X50;  //设置USART工作于方式1,8位无校检异步通信的收发模式,并清空收发中断标志位
	
	TMOD |= 0X20;  //定时器1,工作于8位自动重装载模式
	TH1 = 0xFD;  //装载值
	TL1 = 0XFD;
	TR1 = 1;		//启动定时器1
	ET1 = 0;   //禁止定时器1中断
	
	PCON &= 0X7F;  //设置SMOD=0,波特率不加倍
	EA = 1;		//允许总中断
	ES = 0;		//禁止串口收发中断(不使用串口中断)
}

//数据发送函数
void Uart_SendData(u8 byte)
{
	SBUF = byte;   //发送数据
	while(!TI);  		//等待数据发送完成
	TI = 0;			//复位发送中断标志位,为下次发送数据做准备
}

//数据接收函数
u8 Uart_ReceiveData()
{
	u8 temp;
	while(!RI);			//等待数据接收完成
	temp = SBUF;		//接收数据
	RI = 0;					//清除接收中断标志位
	return temp;		//返回值
}

3)main.c

#include "reg52.h"
#include "uart.h"
#define LED P0

//sbit LED0 = P0^0;

void main()
{
	UartInit();
	while(1)
	{
		LED = Uart_ReceiveData();
		Uart_SendData(Uart_ReceiveData());	
	}
}


三、仿真效果图

       

 四、注意事项及说明

        1、仿真开始VIRTUAL TERMINAL的界面如是没有出现,可心在Debug里面打开。仿真时VIRTUAL TERMINAL不会显示我们输入的数据,只会显示单片机返回的数据。如要显示右击VIRTUAL TERMINAL界面选中Echo Typed characters就会显示我们输入的数据了。

五、总结

一)电路

        线路连接,注意收发端TX与RX的连接。

        元件配置:51单片机晶振频率的设置注意单位(11.0592MHz);VIRTUAL TERMINAL参数的配置,配置如在第一点中有。

二)程序设计

       1、初始化串口:配置与串口相关的各个寄存器

        2、收发程序设置:通过查询与等待收发的中断请求标志位(RI\TI)设计程序

        3、串口通信相关的控制寄存器简介

                1)SCON(serial control):串口控制寄存器

                2)SBUF(serial buffer):数据缓存寄存器

                3)PCON(power control):电源控制寄存器

                4)IE(interrupt enable):中断控制寄存器

   

 1)SCON(serial control):串口控制寄存器

 

 

 

 

 TI、RI:发送、接收中断请求中断标志位

 3)PCON(power control):电源控制寄存器

 

物联沃分享整理
物联沃-IOTWORD物联网 » Proteus仿真实验—USART串口通信实验

发表评论