用proteus和keil实现串口通信仿真

描述

前面一课讲述了串行口通信的技术原理,本课通过安装虚拟串口,用proteus和keil实现串口通信仿真。

虚拟串口

编写仿真程序之前,需要安装VSPD,VSPD是虚拟串口工具,通过VSPD虚拟出两个串口用于通信。大家可以通过搜索引擎找到VSPD安装方式。

VSPD安装完成后,运行VSPD,并虚拟出两个串口COM1和COM2。具体过程如下:

(1)启动VSPD

虚拟串口

(2)虚拟一对串口

虚拟串口

单击【Create】按钮,确认创建当前设定的一对虚拟串口。

虚拟串口

(3)启动串口助手

随VSPD安装包附带的一般会有串口助手程序,可以使用串口助手测试串口的数据发送和数据接收。

虚拟串口

启动串口助手打开COM1口,另外再启动一个串口助手,打开COM2口。在打开COM1的串口助手发送窗口输入“abc”或“123”,单击发送按钮发送数据。观察打开COM2串口的串口助手窗口,发送的数据会出现在数据接收窗口。

51单片机串行口结构

51单片机串行口结构是一个可编程全双工的通信接口,能同时进行数据的发送和接收,它由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制、接收控制器及控制电路构成。

51单片机通过SBUF对串行接收或串行发送寄存器进行访问,SBUF的地址是99H。SCON寄存器是串行口控制寄存器,它用来设定串行口的工作方式、接收发送控制以及设置状态标志等。SCON寄存器的地址为98H,可进行位寻址,各位的定义如下表所示。

虚拟串口

SM0和SM1共同确定串行口的工作方式,SM0为0,SM1为1时,串行口工作方式为异步通信口,这也是串口最常用的一种工作方式,TXD(P3.1)为数据发送引脚,RXD(P3.0)为数据接收引脚。

REN为允许串行口接收位,REN=1:允许串行口接收数据,REN=0:禁止串行口接收数据。

在操作串行口之前,需要设置产生波特率的定时器T1、串行口控制和中断控制。

定时器设置:确定T1的工作方式,计算T1的初值,装载TH1和TL1。设置串行口工作方式:SM0=0,SM1=1。允许串行口接收数据:REN=1。RI为接收中断标志位,当串行数据接收完成后,向CPU发出中断申请,在处理程序中,将该位清零,取消此中断申请。TI为发送中断标志位,当串行口发送数据结束后,向CPU发出中断申请,在处理程序中,将该位清零,取消此中断申请。

串口通信仿真实验

实验要求:通过串口控制发光二极管的状态。

在proteus仿真电子元器件库搜索“COMPIM”,添加串口器件到电路模型元器件库,添加一个串口器件到电路模型,Physical port设置为COM1,并设置Physical Baud rate为9600。

虚拟串口

Physical Baud rate为波特率,波特率通常单位是bit/s,即每秒传输的二进制位数。

实验电路如下图所示:

虚拟串口

实验电路非常简单,器件P1为串口器件,串口器件的TXD引脚接单片机的TXD引脚,串口器件的RXD引脚接单片机的RXD引脚,串口器件的其它引脚可以悬空。

单片机内运行的完整C程序如下:

#include
void init();
void main(){
 unsigned char temp=0xff;
 init();
 while(1){
    if(RI){ 
         RI=0;  
         temp=SBUF; 
     }else{
         P1=temp;
     }
 }
}
void init(){
 TMOD=0x20; 
 TH1=0xfd;
 TL1=0xfd;
 TR1=1;
           
 SM0=0;
 SM1=1; 
 REN=1;
}

函数init()用来设置单片机串行口工作方式、定时器、中断等控制项,TMOD=0x20设置定时器为计数器方式并设置初值,TR1=1启动T1定时器,SM0=0和 SM1=1设置串口工作方式为异步通信方式,REN=1允许串行口接收数据。

main()函数应用while循环结构监测串行口,判断SCON寄存器的RI中断标志位是否为1,若为1,说明串口已接收到数据,数据存储在SBUF缓冲寄存器,RI中断标志位清零,SBUF赋值给temp变量,若RI中断标志位为0,将temp变量的值赋值给P1口。

实验过程:

在proteus启动实验电路,启动虚拟串口和串口助手,串口助手设置为COM2,打开COM2串口,选择16进制发送,在发送窗口输入00,单击发送,实验电路的二极管点亮,再次发送ff可熄灭二极管。

虚拟串口

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分