Proteus中实现单片机双机通信实验
- 格式:doc
- 大小:25.50 KB
- 文档页数:3
两片单片机之间的串行通信(proteus仿真图+程序)两片单片机之间的串行通信(仿真图+程序)AT89C51+MAX232功能:(1)甲机P1口的开关控制乙机P1口的发光二级管,开关闭合发光二级管亮,开关断开发光二级管灭。
(2)乙机P2口的开关控制甲机P2口的数码管,按下4*4矩阵键盘,显示对应的键值0~F (3)乙机P0^0口的开关控制甲机P2口的数码管,按下按键,数码管从0~9循环显示;乙机P0^2口的开关控制甲机P2口的数码管,按下按键,数码管清零。
/****************************甲机控制与接收*********************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit K0=P1^0;sbit K1=P1^1;sbit K2=P1^2;sbit K3=P1^3;sbit K4=P1^4;sbit K5=P1^5;sbit K6=P1^6;sbit K7=P1^7;uchar i;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}void main(){ uchar i;P2=0x00;SCON=0x50; //串口模式1TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定6900TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断while(1){ if(K0==0) send('0'); else send('A');if(K1==0) send('1'); else send('B');if(K2==0) send('2'); else send('C');if(K3==0) send('3'); else send('D');if(K4==0) send('4'); else send('E');if(K5==0) send('5'); else send('F');if(K6==0) send('6'); else send('G');if(K7==0) send('7'); else send('H');}}void serial_int() interrupt 4 //甲机串口接收中断函数{ if(RI){ RI=0;if(SBUF>=0 &&SBUF<=15)P2=tab[SBUF];elseP2=0x00;if(SBUF=='x')if(i>=0&&i<9){i=i+1;P2=tab[i];}if(i==9) i=0;if(SBUF=='y'){P2=0x00;i=0;}}}/*****************************乙机控制与接收程序*****************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;sbit KEY1=P0^0;sbit KEY2=P0^2;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}uchar key() //按键扫描{ uchar keyon,temp;P2=0x0f;delay(1);temp=P2^0x0f;switch(temp){ case 1:keyon=3;break;case 2:keyon=2;break;case 4:keyon=1;break;case 8:keyon=0;break;default:keyon=16;}P2=0xf0;delay(1);temp=P2>>4^0x0f;switch(temp){ case 1:keyon+=0;break;case 2:keyon+=4;break;case 4:keyon+=8;break;case 8:keyon+=12;break;}return keyon;}void main(){ SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1 工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定: 9600TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断delay(100);while(1){ P2=0xf0; //矩阵键盘if(P2!=0xf0)send(key());if(KEY1==1) //独立按键{ delay(20);if(KEY1==0)send('x');}if(KEY2==0) //清零send('y');}}void serial_int() interrupt 4 //乙机串口接收中断函数{ if(RI) { RI=0;switch(SBUF){ case '0':L0=0;break;case '1':L1=0;break;case '2':L2=0;break;case '3':L3=0;break;case '4':L4=0;break;case '5':L5=0;break;case '6':L6=0;break;case '7':L7=0;break;case 'A':L0=1;break;case 'B':L1=1;break;case 'C':L2=1;break;case 'D':L3=1;break;case 'E':L4=1;break;case 'F':L5=1;break;case 'G':L6=1;break;case 'H':L7=1;break;}}}。
《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。
2.掌握Keil与Proteus的联调技巧。
3.掌握串行通信在单片机系统中的使用。
4.掌握调度器设计的基础知识:函数指针。
二、实验设备1.PC机一套2.Keil C51开发系统一套3.Proteus 仿真系统一套三、实验容1.甲机通过串口控制乙机LED闪烁(1)要求a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有的LED。
b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。
i.甲机发送“A”,控制乙机LED1闪烁。
ii.甲机发送“B”,控制乙机LED2闪烁。
iii.甲机发送“C”,控制乙机LED1,LED2闪烁。
iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。
c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。
两机的程序要分别编写。
d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下:i.设置串口模式(SCON)ii.设置定时器1的工作模式(TMOD)iii.计算定时器1的初值iv.启动定时器v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。
(2)电路原理图Figure 1 甲机通过串口控制乙机LED闪烁的原理图(3)程序设计提示a.模式1下波特率由定时器控制,波特率计算公式参考:b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。
2.单片机与PC串口通讯及函数指针的使用(1)要求:a.编写用单片机求取整数平方的函数。
b.单片机把计算结果向PC机发送字符串。
c.PC机接收计算结果并显示出来。
d.可以调用Keil C51 stdio.h 中的printf来实现字符串的发送。
单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。
《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。
Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。
本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。
电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。
2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。
主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。
串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。
3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。
首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。
然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。
总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。
基于Proteus仿真软件实现单片机与PC机多字节串行通信作者:王忠远张凤桐来源:《电脑知识与技术》2016年第36期摘要:Proteus电路设计仿真软件是世界上著名的EDA开发工具,在单片机中嵌入串行通信软件,利用仿真串口COMPIM与PC机通信。
本论文主要利用Proteus仿真软件制作单片机串行通信仿真电路,经过虚拟串口可以实现在同一台计算机上实现下位单片机与上位计算机仿真串行通信,上位计算机采用VB语言编辑界面,在单片机教学和电子产品开发中具有一定的参考价值。
关键词: Proteus;COMPIM;虚拟串口;MSComm中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)36-0261-02在单片机串行教学及电子产品开发时,通常涉及单片机(下位机)与计算机(上位机)的串行通信,利用串行通信上位机发送命令给下位机,下位机将待显示数据传到上位机上显示,本论文设计收发帧定长21个字节的串行通信,一帧包括2字节同步头、2字节结束字、1字节命令字、16字节数据。
上下位机通过一对虚拟串口进行连接实现双机通信。
1 Proteus仿真软件绘制串行通信电路(如图1)2 利用kile c51软件编写下位机程序代码#include#define uchar unsigned charsbit P1_1=P1^1;uchar Fhead=0xA5,Fend=0x5A,shead=0,send=0; //头尾字节,找到头尾标志uchar x,uartbuf,rdata[20]; //接收变量,接收缓冲21字节uchar temp,tdata[21]={0xa5,0xa5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x5a,0x5a};uchar scount; //接收有效数据main(){ TMOD=0x20; PCON=0x00; SCON=0x50; //设置波特率为9600b/s,10位异步收发,启动定时器1TH1=0xfd; TL1=0xfd; TR1=1;EA=1; ES=1; //开启中断while(1){ if(send==1||P1_1==0) //接收到正确数据或按键按下时下位机发送数据到上位机{ tdata[0]=0xa5;tdata[1]=0xa5;tdata[19]=0x5a;tdata[20]=0x5a;for(temp=0;temp{ SBUF=tdata[temp]; while(TI==0);TI=0; }send=0; scount=0;while(P1_1==0);} } }void uart() interrupt 4 using 1{ if(RI==1){x=SBUF;if(x==Fhead && x==uartbuf) //找同步头{shead=1;scount=0;}if(x==Fend && x==uartbuf) //找结束字{shead=0;;send=1;}if(shead==1) //是同步头非结束字保存数据{rdata[scount]=x;tdata[scount+1]=x;scount++;}uartbuf=x; RI=0;}}3 上位机串行通信界面设计利用VB设计数据收发控制界面如图2,在设计时需要增加外部控件:在工程-部件中选择microsoft comm control 6.0控件,添加后在工具箱中出现电话机图标,拖入窗体即可使用。
一.设计方案根据题目分析可知硬件电分为主机模块和从机模块。
主机模块中包含单片机子模块、lcd1602显示子模块和矩阵键盘模块,从机模块则包括单片机子模块、LED显示模块。
在主模块中由AT89C51单片机担任主机,LCD1602担任显示设备和由4位独立按键做矩阵键盘。
在整个系统中有一个从机模块,有一片AT89C51单片机担任从机模块的控制模块,串口采用单工及异步通信方式。
整个硬件结构原下图所示。
主机从机二.硬件分析(1)控制模块控制模块采用AT89C51作为主控芯片,11.0592MHZ的晶振频率作为时钟震荡电路。
基本电路图如下所示。
仿真图由于在protues里面,单片机内部默认自带晶振,所以不需要再连接振荡电路。
控制模块原理图(2)显示模块采用LCD1602作为显示模块,LCD1602用来显示当前从机LED的状态。
仿真图如下所示:仿真图在画原理图时,由于没有LCD1602的封装。
所以,本人直接用16跟引脚的排针代替。
然后在给相应的引脚表上网络位口。
但是再画PCB,必须控制好原件之间的距离,以免导致制版时,元件位置冲突。
原理图如下所示:原理图(3)矩阵键盘模块矩阵键盘用来给单片机输入一个电平值,然后再通过主机CPU发送给从机,最后从机CPU接收,并通过LED显示出结果。
当按键按下,相当于给主机CPU 送入一个低电平,主机再把这个电平值发送给从机。
因为LED是采用共阳连接的方式,所以可以点亮LED。
矩阵键盘仿真图,以及原理图如下所示:仿真图原理图(4)LED显示模块LED显示模块,主要用来显示主机送给从机的电平值是高电平还是低电平,同时也可以用来检测,整个通信系统是否能够正常工作。
为了整个电路简化,以及效果更明显,所以决定采用共阳连接的方式。
LED显示模块的仿真图,以及原理图如下所示:仿真图原理图三.软件分析根据题目分析可知硬件电分为主机模块和从机模块。
AT89C51单片机担任主机模块和从机模块的控制模块,串口采用单工及异步通信方式。
实验1 PROTUES环境及LED闪烁实验1.实验任务做一个闪烁灯:在P1.0端口上接一个发光二极管D1,使D1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒,重复循环。
2.电路原理图3.程序设计内容(1)延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大多是微秒级。
实验要求的闪烁时间间隔为0.2秒,所以在执行某一指令时,需要插入延时程序,来达到实验的要求。
延时子程序如下:DELAY: MOV R5, #20D1: MOV R6, #20D2: MOV R7, #248DJNZ R7, $DJNZ R6, D2DJNZ R5, D1RET(2)输出控制如上图所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
实验2 外部中断实验1.实验任务设计一个交通灯正常工作程序,并在有意外情况发生的情况下,能自动中断进入到中断服务程序运行,进行紧急事故处理,处理完成后能回到正常工作程序继续运行。
如原理图所示,P1接一位数码管用于显示时间,P2端口接东西方向和南北方向红绿灯,P3.2接一个按钮用于模拟一个外部中断源,当正常工作时,东西方向绿灯亮8秒,然后南北方向绿灯亮9秒;当模拟中断源发出中断信号时,东西和南北红灯亮5秒后返回正常工作程序。
(注:这里数码管选用了共阳极的数码管)数码管的段选码如下表所示:2.电路原理图3.程序设计内容(1)从proteus库中选取元器件:单片机AT89C51、磁片电容CAP、电解电容CAP-ELEC,晶振CRYSTAL、电阻RES、数码管7SEG-COM-CAT-GRN,按钮BUTTON,发光二极管等。
(2)设计延时程序。
实验3 T0波形发生器实验1.实验任务(1)首先用AT89C51单片机定时器/计数器0的定时功能构成一方波发生器,实现周期为400us的方波输出,如图所示,P3.5,p3.7是两个波形输出端,分别输出反相波形,两路波形输入虚拟示波器的A通道和B通道,用示波器观察方波的周期是否是400us。
两个单片机之间的简单异步串行通信2009-9-1 21:13提问者:feitian_001|悬赏分:10|浏览次数:898次我在proteus中用两个AT89C52单片机做了一个小设计,想以来来验证两个单片之间异步串行通信功能的实现。
下位机的TXD和上位机的RXD相连。
下位机发送0x07给上位机,然后上位机接受0x07这个数,并将收到的这个数赋给P1口(P1口连着八个发光二极管(共阴极)),按理说如果是正常通信的话,上位机收到下位机的数据应该是0x07,也就是说P1口连接着的八个发光二极管会点亮后三个,但是我编写程序加载到proteus中的单片机中运行程序,发现数码管亮的很乱,不是预期的那种亮法,实在是找不到问题出在了哪里。
下面我把程序贴一下,希望大家对异步串行通信比较懂的给我指点一下。
下位机(发送数据的单片机):#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoiduart_init(){TMOD=0x20; //T1 方式2TH1=0xFD; //baud rate 9600bit/sTL1=0xFD;TR1=1;REN=1; //允许接收SM0=0; //串口方式1SM1=1;TI=0;}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void main(){uart_init();while(1){SBUF=0x07;while(!TI);TI=0;delay(5000);}}上位机(接收发过来的数据的单片机):#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoiduart_init(){TMOD=0x20;TH1=0xFD; //baud rate 9600bit/sTL1=0xFD;TR1=1;REN=1;SM0=0; //串口方式1SM1=1;}void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void main(){uart_init();while(1){if (RI){RI=0;P1=SBUF;delay(3000);}}}问题补充:我的这个设计很简单的,就是两个AT89C52单片机异步串行端口交叉相连,然后上位机P1口接八个发光二极管,就这些东西最佳答案因为你是用查询方式进行通信的,而程序没有中没有设置两机通信的联络信号,即接受机接收到的第一位数据不一定是发送机发送的第一位数据,而有可能是第二、第三位数据,这样接受到的八位数据就可能是发送机发送多次数据中截取的八位数据,又因两机延时时间不同,因此接受到的第一位数据不可能固定不变的。
国家职业资格全国统一鉴定无线电调试员高级技师论文(国家职业资格一级)论文题目:《Proteus中实现单片机双机通信实验》姓名:龚安顺身份证号: 5010107197511142177 准考证号:所在省市:重庆市北碚区所在单位:重庆青年职业技术学院Proteus中实现单片机双机通信实验龚安顺重庆青年职业技术学院摘要:本文针对单片机项目设计中出现的问题和基本方法,提出了将Proteus 仿真软件和Keil软件引入到单片机项目式教学中。
以“单片机双机通信实验”项目为例,详细阐述Proteus软件在单片机课程教学中的使用方法和仿真调试过程。
实践证明,该方法能激发开发热情,锻炼创新能力和单片机软硬件综合开发能力,取得了良好的效果,是提高单片机开发效率和设计产品质量的一种有效方法。
关键字:单片机开发,Proteus软件,仿真调试目录引言 (1)一、Proteus介绍 (1)二、仿真项目教学案例 (1)(一)项目要求 (1)(二)任务分析 (1)(三)硬件仿真图绘制 (1)(四)软件系统流程图 (5)(五)Proteus ISIS载入仿真 (5)(六)本例仿真电路原理图及程序部分源代码 (6)三、结束语 (9)参考文献 (9)引言单片机开发是一项综合性、实践性、应用性很强的技术。
传统的单片机开发采用“先理论设计,再动手实验”的开发模式,该模式造成编程与之实验结果分离,不便于调试,且时间不划算,效果并不理想。
鉴于此,本文将Proteus和引入到单片机的项目式教学中,通过仿真的直观性和真实感,不仅节约了硬件资源的投入,而且提高了单片机开发效率和产品质量。
一、Proteus介绍Proteus软件是英国Labcenter electronics公司开发的电路分析与实物仿真软件,它除了具有其他EDA工具的原理布图、PCB自动或人工布线、电路仿真等功能外,Proteus最大的特点是基于微控制器的设计连同所有的外围电路一起仿真,可直接在单片机虚拟系统上对MCU编程,并可对软件源代码进行实时调试。
51单片机双机通信仿真
51单片机双机通信仿真需要使用仿真软件,例如Proteus等,同时还需要掌握51单片机的通信协议。
一般而言,可以通过串口通信、I2C总线、SPI总线等方式实现双机通信。
以下是基于串口通信的示例:
1. 确定双方的串口通信参数,例如波特率、数据位、校验位和停止位等。
2. 编写发送和接收程序,根据协议制定消息格式并进行数据打包和解析。
发送程序中将消息通过串口输出到对应的接收端口。
3. 在仿真软件中添加串口模块,设置对应的参数并连接发送端口和接收端口。
4. 运行仿真程序,可以使用oscilloscope等工具查看串口状态和数据传输情况。
以上仅为简单示例,具体实现还需考虑实际应用场景和通信需求。
单片机双机通信电路的PROTEUS设计与仿真设计任务:两片A T89C51单片机,工作在方式1,处于收发状态,波特率为1200,数据从P1口通过数字开关元件输入,从串行口发送。
接收数据从串行口入,通过处理后,由P2口输数码管进行显示。
编程实现A机发B机收,B机发A机收。
解题思路:A、B两块单片机的程序是一样的,设A、B都工作在方式1,波特率为1200,采用中断,主程序不断将P1口的数据对外发送,中断服务程序实现将接收到的数据送P2口显示。
电路设计:在PROTEUS中选择元器件,设计电路如图所示。
在仿真过程中,改变P1口的数据,发现另一块数码管随着发生变化,这说明双机串行通信成功。
01101110B=6EH 10101011B=ABH 解题思路:1、串行设置:主要是对SCON寄存器的设置,和波特率的设置。
需注意的是,RI和TI要手动软件清0.2、串行中断服务程序:其函数名为UART() interrupt 4,注意关键字interrupt 4 不能省略,且该函数无返回值。
#include<reg51.h>#include<intrins.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intmain( ){uchar com;SCON=0x50; //设置串行控制初始化01010000//SM0SM1=01,方式1;SM2=0;REN=1,允许接收;TMOD=0x20; // T1为方式2,波特率发生器;00100000;TH1=0xe6; //主频6MHZ时T1的初值,此时SMOD=1TL1=0xe6; //设置波特率PCON=0x80; //SMOD=1,波特率加倍EA=1;ES=1;TR1=1; //启动T1开始定时P1=0xff;_nop_();com=P1;SBUF=com; //启动串行发送while(!TI); //等待发送完毕TI=0;}void UART( ) interrupt 4 using 3 //串行中断服务程序编写{uchar dat;EA=0;if(TI==0){RI=0;dat=SBUF;P2=dat;}else{TI=0;}EA=1;}。
51单片机的串口双机通讯一、什么是串口串口是串行发送数据的接口,是相对于并口来说的,是一个广泛的定义。
本期我们说的串口指的是指UART或是RS232。
二、什么是波特率波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位。
一个字节需要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位。
9600bps用模式1传输时,每秒传输的字节数是9600÷10=960个字节,发送一个字节大概需要1ms时间。
三、51单片机串口相关寄存器1、SCON串口控制寄存器(1)SM0和SM1:方式选择寄存器SM0 SM1 工作方式功能波特率0 0 方式0 8位同步移位寄存器晶振频率/ 120 1 方式1 10位UART 可变1 0 方式2 11位UART 晶振频率/32或晶振频率/64 1 1 方式3 11位UART 可变多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。
当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。
(3)REN:允许接收位REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据。
(4)TB8:要发送的第9位数据位在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址。
(5)RB8:接收到的第9位数据位当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到RB8中。
方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。
(6)TI:发送中断标志位方式0中,不用管他。
实验四:双向通信一、实验要求实验目的:了解MCS-51单片机串行口(UART)的结构、工作方式、了解串行通信的原理和数据交换过程,掌握单片机之间进行串行通信的编程方法。
实验内容:将甲乙两台MCS-51单片机串行口连接,即甲机的TXD与乙机的RXD相连,甲机的RXD与乙机的TXD相连,并实现双机共地。
整个系统实现双向通信。
具体是:1、甲机的K1键可通过串行口分别控制乙机的LED1点亮、LED2点亮、LED1和LED2全亮或全灭。
2、乙机的K2按键可通过串行口向甲机发送数字,甲机将接收到的数字显示在P0段的LED数码管上。
二、实验原理串行口工作方式2MCS-51串行口工作方式2是9位异步通信接口。
每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位串行口工作为方式2时,被定义为9位异步通信接口。
其时序如图所示。
串行口工作方式2的波特率当采用方式2时,波特率仅仅与晶振频率有关。
在方式0中,波特率为时钟频率的1/12,即f osc/12,固定不变。
在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为f osc/64;当SMOD=1时,波特率为f osc/32。
双机通信硬件电路三、程序设计1、甲机程序ORG 0000HAJMP MAINTORG 0003HAJMP EX_INT0MAINT: MOV SCON, #90H ;串口工作方式2,允许接收MOV PCON, #80H ;波特率加倍MOV R0, #00HMOV SP, #40HMOV DPTR, #TABSETB IT0SETB EASETB EX0SETB ESHERE: SJMP HEREORG 0200HEX_INT0:MOV A, R0MOV SBUF, ACHECK: JBC TI, GOONSJMP CHECKGOON: CLR TIINC R0WAIT: JBC RI, NEXT ;接收部分SJMP W AITNEXT: MOV A,SBUFMOV R1, AMOVC A, @A+DPTRMOV P1,ACLR RIRETITAB: DB 0C0H, 0F9H, 0A4H, 0B0HEND2、乙机程序ORG 0000HAJMP RECSRECS: MOV SCON, #90HMOV PCON, #80HWAIT: JBC RI, NEXTSJMP W AITNEXT: MOV A, SBUFMOV B, #04HMOV P1, ADIV ABCLR RITRANS: MOV SBUF, BCHECK: JBC TI, WANLESJMP CHECKWANLE: LJMP RECSEND设计思路:用R0的最后两位共有00,01,10,11四种状态控制LED1、LED2的亮灭,将R0从甲机传到乙机的P0口,最后两位控制LED灯。
基于STM32单片机的SPI双机通信的Proteus仿真实现钱游; 刘振栋【期刊名称】《《电声技术》》【年(卷),期】2019(043)007【总页数】3页(P60-62)【关键词】DMA; SPI; 双机通信【作者】钱游; 刘振栋【作者单位】重庆城市业职业学院重庆永川402160【正文语种】中文【中图分类】TP368.1本文以STM32的SPI接口使用DMA方式实现了双机通信,并用Proteus进行了仿真实验,验证了该方法的正确性。
1 SPI通信的基本原理SPI接口是一种同步串行通讯接口,具备SPI接口的外围芯片十分丰富,应用非常广泛[1]。
SPI设备通常有四个引脚,主要是MISO、MOSI、SCK、NSS引脚。
其中MISO表示主机输入从机输出引脚;MOSI引脚表示主机输出从机输入引脚;SCK表示时钟信号,一般是由主机产生;NSS为片选引脚,主设备要和哪一个从设备通信,可以将从设备的NSS引脚拉成低电平。
2 STM32F103单片机的SPI接口STM32F103系列单片机一般带有3个SPI接口SPI1、SPI2、SPI3。
SPI1接口使用的引脚是PA4、PA5、PA6、PA7引脚,这四个引脚分别是NSS、SCK、MISO、MOSI功能引脚是一一对应的。
3 软件设计单片机实现按键每按下一次,实现加一操作,将加一操作的结果值送给SPI接口上,然后使用DMA机制从SPI接口来接收数据,实现了数据的高速准确访问。
void SPI1_Config(void){//设置SPI工作于全双工SPI_initialize.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//设置单片机工作于主机模式SPI_initialize.SPI_Mode = SPI_Mode_Master;// SPI_NSS设置为SPI_NSS_Soft模式SPI_initialize.SPI_NSS = SPI_NSS_Soft;//设置波特率SPI_initialize.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//4分频确定波特率……}上面程序给出了STM32单片机的SPI初始化程序。
基于Proteus的AT89C52双机通信仿真在一个Proteus工程中,添加两个AT89C52单片机,一个做主机,另一作从机。
现在要实现主机与从机之间的简单通信。
具体功能是:主机不停扫描矩阵键盘,如果有键被按下,则把相应按键的数字发送给从机,从机通过数码管显示它接受到的数据。
主机与从机之间的通信通过串行口实现。
构建Proteus仿真图时,如果感觉图纸不够大,放置元器件比较拥挤,可以通过System 选项 Set Sheet Side…选择A3图纸就合适了。
Proteus中的RS-232C标准接头COMPIM不需要连接MAX232,可以直接和单片机的RXD,TXD连接,因为COMPIM已经把MAX232集成在内部。
这里的串行通讯选择方式1,因为方式1的波特率与定时器T1的溢出率有关,所以可以通过设置定时器T1的初值来确定串行通信的波特率。
这里选择了波特率为9600,T1选择具有自动重装功能的方式2,那么TH1 和TL1 的初值通过计算得到0xfd。
具体的电路连接如下:主机电路:从机电路:要顺利实现双机通信重要的是要保持两机的波特率一致。
所以,下面的一些参数设置很重要。
1.利用虚拟串口软件Virtual Serial Port Driver,建立一对相连的虚拟串口。
如果没有安装这个软件可以网上下载安装。
这是实现仿真必须的。
这里的虚拟串口为COM1和COM4,下图可以看到两个端口是相连的。
2.设置主机RS-232接头P1的参数。
Physical port选择端口COM1,Physical Baud Rate选择9600,Virtual Baud Rate也选择9600。
其他参数默认,设置如下:3.设置从机RS-232接头P2的参数。
Physical port选择端口COM4,Physical Baud Rate选择9600,Virtual Baud Rate也选择9600。
其他参数默认,设置如下:4.晶振频率设置为11.0592MHz,它与上面设置波特率为9600是对应的。
Proteus中实现单片机双机通信实验
【摘要】本文针对单片机项目设计中出现的问题和基本方法,提出了将Proteus仿真软件和Keil软件引入到单片机项目式开发中。
以“单片机双机通信实验”项目为例,详细阐述Proteus软件在单片机课程教学中的使用方法和仿真调试过程。
实践证明,该方法能激发开发热情,锻炼创新能力和单片机软硬件综合开发能力,是提高单片机开发效率和设计产品质量的一种有效方法。
【关键词】单片机开发;Proteus软件;仿真调试
引言
单片机开发是一项综合性、实践性、应用性很强的技术。
传统的单片机开发采用“先理论设计,再动手实验”的开发模式,该模式造成编程与之实验结果分离,不便于调试,效果并不理想。
鉴于此,本文将Proteus和引入到单片机的项目式开发中,通过仿真的直观性和真实感,不仅节约了硬件资源的投入,而且提高了单片机开发效率和产品质量。
一、Proteus简介
Proteus软件是英国Labcenter electronics公司开发的电路分析与实物仿真软件,它除了具有其他EDA工具的原理布图、PCB自动或人工布线、电路仿真等功能外,Proteus最大的特点是基于微控制器的设计连同所有的外围电路一起仿真,可直接在单片机虚拟系统上对MCU编程,并可对软件源代码进行实时调试。
同时,它具有电路互动仿真功能,通过动态外设模型,如键盘、LED/LCD等,可实时显示系统输入、输出结果,以实现交互仿真,或配合Proteus配置的虚拟仪器如示波器、逻辑分析仪等,使单片机虚拟系统实现预期的实验效果。
此处还需要用Keil软件来协助。
Keil软件是美国Keil Software公司出品的兼容单片机C语言软件的开发系统,是目前世界上最好的51单片机开发工具之一。
它提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率高,多数语句生成的汇编代码很紧凑,容易理解。
Proteus和Keil各自都可以进行仿真调试,但效果不是很理想,如把两者结合起来相互配合,则可发挥Proteus和Keil的优势使其在仿真过程中的软件调试和硬件设计更加便捷、高效。
二、仿真项目教学案例
(一)项目要求
本项目要求用两片AT89C51单片机实现A机检测输入键盘信息,并通过串行通信方式,传送给B机,在B机用数码管显示A机所按下的对应按键代号,“0-9”
显示对应数字,其余按键显示“-”。
(二)任务分析
项目开发过程是紧紧围绕一个或多个完整的项目展开的,因此项目的设计,是单片机课程教学成败的关键。
按照本项目要求,通过分析,该项目实际上是一个双机单向通信项目,只要掌握了该项目,双向通信问题不难理解。
具体思路是:
1.A、B单片机均采用AT89C51,A机须完成矩阵键盘扫描识别、键盘代码串行传送两项任务。
B机须完成串行接收代码、数码显示两项任务。
本项目程序的关键就是串行通信程序部分。
2.A机通过检测P2口外接的矩阵键盘信息,并进行识别处理,产生相应的键盘代码,然后通过串行发送端TXD/P
3.1发送给B机;
3.B机收到A机发送的键盘代码后,通过处理,从P0口输出七段数码管段码信号,驱动共阳极七段数码管显示键盘代码。
图1
图2
图3
(三)硬件仿真图绘制
通过以上的任务分析,我们先设计出硬件电路,并将电路在Proteus中绘制出来。
电源电路用5V,具体电路省略。
时钟电路用来产生时钟信号供单片机工作,晶振采用12MHz,平衡电容采用33pF。
复位电路在系统上电或运行过程中对单片机进行初始化操作。
图4
图5
1.单片机最小系统
本案例所用单片机型号为AT89C51,其结构简单,控制灵活。
其最小系统主要包括主芯片、电源电路、时钟电路、复位电路。
2.本例单片机最小系统
在这里要特别说明的是,在Proteus中单片机可以默认以最小系统工作。
即可以不加上电源电路、复位电路、时钟电路也可以工作。
不过为了便于直观观察,
我们还是画出这些路。
在绘制时,双机只画出单机的这些电路,另一个不画。
并且为了不产生标号冲突,B机的引脚标号用数字表示。
本例中A机的主电路、电源电路、时钟电路、复位电路见附图。
B机的系统图和A机系统大同小异。
3.本例输入、输出系统及通信连接
本例中的输入系统是矩阵键盘电路,从A机输入。
利用P2口作为键盘检测口,P2.0-P2.3为行线扫描,P2.4-P2.7为列线检测。
本例中的通信连接是将双机的RXD和TXD两脚,即P3.0和P3.1交叉相边即可。
B机的这两脚标号和A机对应。
本例中的输出系统是单个LED共阳数码管显示电路,从B机P0输出段码控制信号。
4.本例硬件仿真总图见附1。
(四)软件系统流程图
A机主程序流程图如图1所示,键盘扫描检测程序流程图如图2所示,B机主程序流程图如图3所示。
具体的程序见附3。
编程输入Kei uVsion4软件并生成A机和B机的”.hex”格式可执行文件。
图6
图7
图8
附1 双机通信实验仿真电路原理图
附2 电源原理图
(五)Proteus ISIS载入仿真
1.加加载源程序和目标程序文件、目标代码文件、设置时钟频率
在ISIS菜单中单击Source(源程序),弹出下拉菜单,点击“Add/Remove Source File…”,弹出如图1.9所示的对话框,选取A机芯片,点击,加入源程序“双机通信实验A机发送程序.C”,如图4所示;选取B机芯片,点击,加入源程序“双机通信实验B机接收程序.C”,如图5所示。
点击确定。