一、概要
本次实验使用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):电源控制寄存器文章来源:https://www.toymoban.com/news/detail-407713.html
文章来源地址https://www.toymoban.com/news/detail-407713.html
到了这里,关于Proteus仿真实验---USART串口通信实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!