串行通信UART和PROTEUS仿真设计
两片单片机之间的串行通信(proteus仿真图+程序)
两片单片机之间的串行通信(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;}}}。
RS-232简单串口主从系统设计及Proteus的仿真
毕业设计说明书(论文)RS-232简单串口主从系统设计及Proteus的仿真毕业设计说明书(论文)中文摘要毕业设计说明书(论文)外文摘要1 绪论 (3)1.1引言 (3)1.2研究背景及意义 (3)1.3论文主要工作 (5)2 计算机接口介绍 (6)2.1并行口与串行口的介绍 (6)2.2单片机串行接口 (8)2.2.1 单片机的串口结构 (8)2.2.2 串口的工作方式 (9)2.2.3 波特率的计算 (13)2.3RS-232C串行接口标准[7] (14)2.4小节 (15)3 单片机硬件电路设计 (16)3.1单片机最小系统 (16)3.2LED显示电路 (17)3.3串口输入电路 (18)3.4小节 (18)4 本文的软件设计与调试 (19)4.1设计要求 (19)4.2上位机程序设计 (19)4.2.1 Windows环境下的串口通信程序设计 (19)4.2.2 上位机软件的实现 (20)4.3下位机的程序设计 (20)4.4虚拟串口 (21)4.5系统调试 (22)4.6小结 (25)结束语 (26)致谢 (27)参考文献 (28)1 绪论1.1 引言计算机技术、自动化技术和通信技术是现代信息科学技术的重要组成部分,是现代学技术中的核心先导技术。
计算机控制是计算机技术与自动控制理论、自动化技术紧密合并应用于实际的结果,它的应用领域非常广泛。
随着高性能计算机、网络技术及单片机技术的不断发展,不仅使计算机应用向网络化、综合化、集成化、智能化发展,而且使单片机的应用也从独立的单机控制向多机联网的方向发展,这就需要将各单机进行组网并进行相互通信。
单一的PC机已经无法满足需要,PC机与各单片机构成的多机系统、计算机网络和利用计算机实时监控已经被越来越多的用于工业企业当中。
从简单的集中式控制逐渐向复杂分分布形式发展,出现了以通信网络技术为基础的新的控制形式。
从最早的25针D头的并口,到后来9针的RS-232C串口,再到现在随处可见的USB接口,计算机接口技术已经深入我们生活的每个角落。
建立Proteus的单片机串口仿真平台
建立Proteus的单片机串口仿真平台本文详细介绍如何建立Proteus和PC机串口通信软件之间,进行通信仿真的平台。
这个平台由三个部分组成。
它们是:Proteus的单片机仿真电路,PC机串口通信软件,连接前两部分的虚拟串口软件。
1.Proteus的单片机仿真电路为了尽量简单明了,仿真电路只包含单片机和Proteus的COMPIM两个器件。
本文的单片机采用AVR M16。
运行Proteus的ISIS。
加入两个器件如下:类别:Microprocessor ICs器件:ATMEGA16库:A VR2描述:-类别:Miscellaneous器件:COMPIM库:ACTIVE描述:COM Port Physical Interface model仿真电路,如图1图1 Proteus串口仿真实例电路这里需要说明两点:首先,不需要串口电平转换电路。
例如:MAX232等;其次,连线不必交叉。
交叉任务交给虚拟串口去完成。
串口功能:中断接收到一个字节(0—255)无符号整数后,立即将收到的数据发送回去。
所以,程序非常简单。
重点在于建立仿真通信平台,因此不厌其烦地叙述建立平台的过程,以尽量避免初学者在某处卡住。
设置ATMEGA16的属性。
单击A TMEGA16变红色,再单击,弹出编辑元件窗口,如图2图2 ATMEGA16编辑元件窗口只要编辑红框圈起来的参数:Program File建议选择.cof文件,这样可以单步调试。
当然,对本项目过于简单没什么可调试的。
也可以选择.hex文件。
千万注意,当文件目录改版后,一定要重新选择文件路径!另一个参数CKSEL Fuses按图上的选择。
注意:程序中,初始化串口时,波特率因子也得按主频8M来选择!设置COMPIM的属性。
单击COMPIM变红色,再单击,弹出编辑元件窗口,如图3图3 COMPIM编辑元件窗口按红框内的选择即可。
当然可以改变。
但是,必须记下这些参数。
PC机的串口通信软件的参数,除了串口号必须和(例如CMO1)不同外,其它4项参数(波特率,数据位数,停止位数,校验码)必须一致。
单片机串行通信实验报告(实验要求、原理、仿真图及例程)
《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求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来实现字符串的发送。
串行口数据传输的仿真和硬件实现实验
串行口数据传输的仿真和硬件实现实验1.串行口数据传输的仿真实验(1)设计电路图:使用Proteus打开一个新的项目,然后在电路图中添加一个微控制器(如8051)和其他相应的电路元件,以及一个串口调试助手(如Tera Term)。
确保电路图中的元件连接正确。
(2)配置串行口:在Proteus的工具栏中选择"Settings",然后选择"Peripherals",在弹出的对话框中选择串行口,并进行相应的配置,如波特率、数据位、停止位等。
(3)编写程序:在Proteus的工具栏中选择"Source Code",然后在弹出的对话框中编写相应的程序,程序中应包含串行口数据的发送和接收操作。
(4)运行仿真:保存并运行程序后,点击Proteus的工具栏中的"Play"按钮,程序将开始执行。
同时,打开串口调试助手,可以观察到串行口数据的传输情况。
通过以上步骤,可以完成串行口数据传输的仿真实验。
可以根据需要,修改程序和仿真参数,以实现不同的功能和验证不同的传输场景。
(1)准备硬件:准备一个Arduino开发板和一个串口调试助手(如Tera Term),并将它们连接在一起。
可以根据需要,添加其他的电路元件。
(2)编写程序:使用Arduino IDE编写相应的程序,程序中应包含串行口数据的发送和接收操作。
根据具体的应用场景,可以添加其他的功能。
(3)上传程序:将编写好的程序上传到Arduino开发板上,确保程序正确运行。
可以通过串口调试助手观察串行口数据的传输情况。
(4)进行实验:根据需求调整程序和硬件连接,进行实验并收集数据。
可以根据需要,进行数据分析和结果展示。
通过以上步骤,可以完成串行口数据传输的硬件实验。
实验过程中,可以根据需要,添加其他的电路元件和外部设备,来实现更复杂的功能和场景。
总之,串行口数据传输的仿真和硬件实现实验是学习和研究串行口数据传输的重要手段。
串行通信UART及PROTEUS仿真设计
串行通信UART及PROTEUS仿真设计C51跟atmega64的串行通信。
相关理论知识这里就不多说,只提几个:51的UART所用的几个寄存器SCON:SM0 SM1 SM2 REN RB8 TX8 RI TIPCON: SMOD -- -- -- --- --- PD IDLET2CON: TF2 EXF2 RCLK TCLK EXEN2 TR2 C/_T CP/_RL2TH2,TL2波特率为9600bpsavr:atmega64的USART的两个所用到的寄存器这里用的是uart0,所以初始化时应该设置相关的寄存器有:UCSR0A : RXC TXC UDRE FE DOR UPE U2X MPCMUCSR0C :-- UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOLUBRR0H 、 UBRR0L、UCSR0B :RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8别问我这些都是代表什么含义,不懂自己翻书去。
PROTEUS仿真如下图:仿真结果如下图所示:其中要注意的是:因为我在仿真中只能选择atmega64的CKSEL Fuse中的8MHz,所以在AVR的程序中初始化波特率是按8MHz来计算的。
所以仿真归仿真,注意实际中应用。
51单片机用定时器1来产生波特率时,看书据说模式2下,12MHz时最高只能到达4800bps。
这里就只好用定时器2来。
不过也挺好用的。
仿真时用的是8052核。
否则没反应不要怪我哦。
最后把程序附上,里面有些变量声明了没有用到,当初只是实验。
51的:#include "reg52.h"#define AA 0x61#define commun_symbol 0x31sbit LED="P2"^0;unsigned char Tx[]={"my name is seven!"};void uart_init(void){ SCON = 0x50; RCAP2H = 0xFF; RCAP2L = 0xD9; TH2 = 0xFF; TL2 = 0xD9; T2CON = 0x34; } void uart_send(unsigned char byData){ TI=0; SBUF=byData; while(TI==0); TI=1;} unsigned char uart_receive(void){ RI=0; while(RI==0); RI=1; return(SBUF);} void main(){ unsigned char byBuff,i; uart_init(); uart_send(commun_symbol); while(1) { byBuff="uart"_receive(); LED="1"; if(byBuff==0x31) { for(i=0;i<20;i++) { P1=byBuff; uart_send(Tx[i]); } } }}atmega64的程序:两个文件,一个是将函数模块化,别一个是主函数,调用(- -!最近习惯将程序模块化。
proteus模拟串行口通信
Proteus仿真——51单片机串口转RS232口单片机串口是单片机通信的基本途径,可以进行多单片机间的通信,也可以通过接口转换实现与计算机间的通信。
其中与计算机通信可以通过计算机的串口(232口)或USB口实现。
本文是本人做的一个小实验,内容是在Proteus ISIS中仿真51单片机串口转RS232口,实现单片机通过串行口与计算机通信。
单片机串行口有四种不同的工作方式:方式0:移位寄存器输入/出方式,波特率固定为:f osc/12。
方式1:10位UART(通用异步接口电路),一帧数据包括1位起始位(0),8位数据位和1位停止位(1)。
波特率可变,公式为:其中X为定时器T1的初值,当然我们一般都是先确定波特率然后算初值的,所以我们更想知道X等于多少。
把上面的式子变一下就可以得到初值X了:方式2/3:这两种方式都是11位的UART,它们比方式1多了一个第9位数据。
他们不同的是:方式2波特率固定为f osc/32或f osc/64,由SMOD位决定。
方式3:波特率同方式1;本例中采用方式1,波特率为9600(计算机默认值),根据波特率算出初值X=253(定时器T1工作方式2)。
我们以9600的波特率向计算机循环发送00H;proteus中的接口转换电路如下:计算机端用串口调试软件接收;不过我们要说明一下,为了实现串口的连接,我们要用计算机串口模拟软件模拟出两个232口,模拟出的这两个232口是设计为连接着的。
我们用Virtual Serial Port Driv er这个软件(到网上去搜,很容易找到)。
安装好后打开,界面如下:在上图里可以看出我的机器有一个物理口COM1,现在已经模拟出了两个口COM2和COM3,而且他们是一组是连接着的。
我们在proteus中的compim默认是连到com1的,在我们这边改成com2,然后在串口调试软件中测试com3,如下两个图现在硬件连接已经到位,下面就是软件了:通过串口以波特率为9600的速度发送00H,程序如下:ORG 0000HLJMP STARTORG 0030HSTAR T: SETB EASETB ESSETB ET1CLR SM0;串行口工作于方式1:sm0=0,sm1=1SETB SM1MOV PCON,#00H;波特率不加倍MOV TMOD,#20H;T1定时器方式2MOV TL1,#253MOV TH1,#253SETB TR1MOV A,#00HLOOP: MOV SBUF,A JNB TI,$;等待发送完CLR TI;清除中断标志LJMP LOOP;循环END结果如下:。
串行方式使用12864的proteus仿真实例
程序如下:
/*取模方式:行列式逆向阴码*/
/*参数A0=0时表示发命令A0=1时表示发送示数据*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_SI=P3^0;//clock input同步时钟输入端
LCD_write(0x04|(0x0f&column_f),0); //设定列地址低4位为0
for(j=0;j<column_sum;j++)
{
LCD_write(BMP[d_where],1);
d_where++;
}
}
}
//------------------------------------------------------------------------------
sbit LCD_SCL=P3^1;//data input/output串行数据输入、输出端
sbit LCD_A0=P3^2;//选择命令还是数据
sbit LCD_RST=P3^3;//复位
sbit LCD_CS=P3^4;//片选
uchar code BMP[]=
{0xFB,0xDB,0xBB,0x7B,0x9B,0x63,0xBF,0xCF,0xF0,0x37,0xF7,0xF7,0xD7,0xE7,0xFF,0xFF,
LCD写函数
void LCD_write(数据或者命令,A0选择)
****************************************************************/
(完整word版)proteus串口仿真
利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机的串行通信在前面的博文“利用 PROTEUS 软件调试串口通信最简单实用的方法”中,做而论道介绍了利用 Virtual Terminal(虚拟终端)调试串口通信的方法。
但是 Virtual Terminal 有一定的局限性,只是适合于调试使用键盘输入少量数据的情况。
如果是需要利用 PC 机器的串行口,和其它的软件进行串行通信,Virtual Terminal 就办不到了。
下面,做而论道将介绍两种另外两种仿真调试串口通信的方法。
1、利用 COMPIM 组件在 PROTEUS 软件中,可以找到一个 COMPIM 组件,它的图形、以及默认属性可见下图:把 COMPIM 放在仿真电路图中,当仿真运行起来之后,送到 COMPIM 3 号引脚的串行数据,将会通过 PC 机的 COM1 串行口输出,如果在 PC 机的 COM1 串行口外接一条电缆,可将串行数据送到其它的硬件设备上。
同样道理,其它的硬件设备送到 PC 机的 COM1 的串行数据,也会在 COMPIM 的2号引脚出现,送到仿真电路里面。
COMPIM 组件内部,自带 RS-232 和 TTL 的电平转换功能,因此不需要再使用电平转换芯片。
利用 COMPIM,就可以用一台 PC 机,仿真带有串行口的单片机系统,通过外接的电缆,和另外一台 PC 机进行全双工的串行通信。
十分轻松的就实现了对远程测量、控制系统进行仿真调试。
2、利用 Virtual Serial Port Driver 软件上述的调试方法,可以说是很完备的了,但是还是必须在两个串行口之间连接一条串行通信电缆。
为了省去这条电缆,就应该看看虚拟串口软件。
Virtual Serial Port Driver 软件可以为 PC 机增加一些两两连接的虚拟串行口。
该软件运行起来如下图所示:在图中可以看到,COM1、COM2 就是“一对连接好虚拟串行口”;PC 机原来就有的实际的串行口,称为物理串行口,为 COM3。
基于PROTEUS的单片机串口通信的实例设计与仿真
【 关键 词】rtu 软件 ; Poes 串口通信 ; 仿真
O
引言
Viul e a P r r a S r l ot XP软 件 是 一 种 高级 的 配置 工 具 。用 于模 拟 RS 3 t i s 22
串 口通 信 , 以使 用 它 为 应 用 程 序 提 供 虚 拟 串 口 . 个 虚 拟 串 口的 功 可 这 Poe s 件 是 由英 国 L bC ne lcrnc 司 开 发 的 E A 工 rtu 软 a etr et i E o s公 D 能 就像 标 准 的硬 件 串 口一 样 , 研 发 人 员 提 供便 利 。 为 具 软件 , 已有 近 2 0年 的 历 史 , 全 球 已得 到广 泛 使 用 。 它不 仅 是模 拟 在 使 用 软件 V r a ei o sX , 开 软 件 后 . 图 2所 示 .OM3 iu l r l r P 打 t S aPt 如 C 电 路 、 字 电路 、 数 混 合 电路 的 设 计 与 仿 真平 台, 是 目前 最 先进 的 数 模, 也 是 电脑 上 实 际 的 物 理 串 口 , 击 “ d ar可 立 即 添加 一 对 虚 拟 串 口 单 A dp i ” 实 现嵌 入 式 系 统 在 计 算 机 上 完 成从 原 理 图设 计 、代 码调 试 与仿 真 、 系 C M1和 C M2 这 样 就 连 接 好 一对 虚 拟 串 口 。 O O , 统 测 试 与 功 能 验 证 到 形 成 P B的完 整 的设 计 、 真 和 研 发 的 平 台 。在 C 仿 22 上位 机 软 件 设 置 . 缺 乏 硬 件 的情 况 下 , 是 一 款 非 常 实用 的仿 真 软 件 , 仿 真 的原 理 图 经 这 其 P C与 单 片 机 的通 信 常 用 V B或 V 中的 MS o C C mm控 件 编写 . 设 本 验证后可直接应用到现实中。 计 使 用 “ 口调 试 助 手 ” 实 现 P 对 Poe s 联 系媒 介 。 如 图 3所 串 来 C rtu 的 目前 , 多 高 校 已引 入 这 套 软 件 , 为理 论 教 学 和 实 践 教 学 的 必 很 作 示 , 类 软件 的使 用 一 定 要 注 意 串 口通 信 的 参 数 的 设 置 ( 串 口 , 特 该 如 波 要补充 , 践证明效果很好 ; 且 , 实 而 在一 些 像 海 尔 等知 名 公 司也 已将 它 率 , 据位 , 验 位 , 止 位 )它 们 必 须 与 单 片 机 程 序 总 的 串 E设 置 相 数 校 停 , l 作 为仿 真 和 研 发 平 台 , 大 提 高 了 工作 效 率 , 短 了研 发 周 期 。 大 缩 对 应 。串 口调 试 助 手 则 可 以 真 实 的模 拟 上 位 机 与 单 片 机 进 行 通 信 。正 本 文 通 过 实 例 , A 8 C 1 片 机 为 核 心 , 计 了一 个 P 以 T9 5 单 设 c与 单 确 地使 用 所 有 的信 号 线 和 模 拟 波 特 率 的 工作 , 以 和 使 用 真 实 串 口一 可 片机 的进 行 串 口通信 的 功 能 , 详 细 说 明 了 在 P O E 并 R T US平 台 下 进 行 样 传输 文 件 、 据 。 数 串 口使 用 和 调 试 的 基 本 方 法 。
基于Proteus的51单片机应用-单片机串口通信设计
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.绪论1.1课题背景及意义目前,单片机的发展速度大约每两、三年要更新一代,集成度增加一倍,功能翻一番。
其发展速度之快、应用范围之广已达到了惊人的地步,它已渗透到生产和生活的各个领域,应用非常广泛。
在汽车、通信、智能仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着非常重要的角色[1]。
因此单片机的设计开发具有广阔的前景。
所以,对于电气类学生而言,学习一种单片机的开发是十分必要的。
而51系列的单片机,随着半导体技术的发展,其处理速度更快,性能更优越,在工业控制领域上占据十分重要的地位,通过对51系列单片机的学习而掌握单片机开发的过程是一种不错的选择。
然而单片机是一门综合性、实践性都很强的学科,其学习涉及的实验环节比较多,硬件设备投入比较大,对于大多数人而言很难投入大笔资金去购买实验器件。
而且要进行硬件电路测试和调试,必须在电路板制作完成、元器件焊接完毕之后进行,但这些工作费时费力。
因此引入EDA软件仿真系统建立虚拟实验平台,不仅可以大大提高单片机的学习效率,而且大大减少硬件设备的资金投入,同时降低对硬件设备的维护工作。
EDA设计思路是:从元器件的选取到连接、直至电路的调试、分析和软件的编译,都是在计算机中完成,所用的工作都是虚拟的。
虽然现在的电路设计软件已经很多,诸如PROTEL、ORCAD、EWB 、Multisim等,不过这些软件之间的差别都不大:都有原理图和PCB制作功能,都能进行诸如频率响应,噪音分析等电路分析,主要用于模拟电路、数字电路、模数混合电路的性能仿真与分析,但对于单片机设计及软件编程,最重要的是两者的联调,这些软件都无法实现,所以造成了单片机系统设计周期长、设计费用高等缺点[2]。
新款的EDA软件Proteus解决了上述软件的不足,成为目前最好的一款单片机学习仿真软件。
Proteus 软件是由英国Lab Center Electronics 公司开发的EDA 工具软件。
Labview及Protues软件环境下串口通讯的仿真方法
Labview及Protues软件环境下串口通讯的仿真方法Labview及Proteus 软件环境下单片机串口通讯的仿真方法介绍一种在纯软件环境的上下位机串口通讯的仿真方法。
通过虚拟串口软件VSPD XP ,在Labview 和Proteus 软件环境中,对走DS18b20温度采集电路的串口通信进行了联调,仿真运行的结果表明这一方法是可行的。
同时本文编制了该实例的上位机Labview 监控程序,设计了下位机的程序框图和Protues 硬件原理图。
这种方法的采用可以提高设计效率,降低设计成本,辅助开发者开发出价格低廉,功能专一的测控设备,具有很好的实用性。
言 0 引Labview 是美国国家仪器公司(NI 公司) 推出的专为数据采集、仪器控制、它是一个开放的开发环境, 具有PCI , 数据分析与数据表达的图形化编程环境, GPIB , PXI ,VXI ,RS232/ 485 ,USB 等各种仪器通讯总线标准的所有功能函数,开发者可以利用这些函数与不同总线标准接口的数据采集硬件交互工作。
但现实中的数据采集卡很多是利用美国NI 公司提供的专用数据采集卡,价格较贵,不利于普及Labview 软件测控的学习和应用。
Proteus 软件支持51 单片机,集程序编辑,原理图绘制和程序仿真于一体,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路,具有电路互动仿真功能,通过动态外设模型,如键盘、开关、发光二极管、数码管、液晶和传感器、电机等,可实时显示单片机系统输入、输出结果;另外还配置了多种虚拟仪器如示波器、逻辑分析仪等方便对实验图形和数据的测量。
基于Labview 和Proteus 的特性,本文利用Proteus 仿真下位机运行,而Labview 实现上位机对下位机运行的监控,两软件采用虚拟串口进行RS232 串口通讯,在纯软件环境下,完成基于Labview 软件数据采集系统的组建。
这种方法成本低,效率高,可以方便地应用到测控技术的学习和设计中。
uart发送和接收字符串(可proteus仿真)
//此程序主要用于uart发送字符和字符串(proteus终端不能显示汉字,但串口助手可以),输入换行符结束#include<reg52.h>void uart_init(void);//串行口初始化unsigned char getbyte(void);void sendbyte(unsigned char c);void sendstring(unsigned char *string);void getstring(unsigned char *string);int main(void){unsigned char c,string[100];uart_init();while(1){//发送字符c=getbyte();sendbyte(c);//换两行sendbyte('\r');//'\r'为终端换行符sendbyte('\r');//发送字符串getstring(string);sendstring(string);}return 0;}void uart_init(void){TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2TH1=0xfd;//设置波特率为9600TL1=0xfd;TR1=1;//启动定时器/计数器1SCON=0x50; //0101 0000.串口工作方式1,允许串行控制PCON=0x00;//设置SMOD=0IE=0X90; //CPU允许中断,串行允许中断}void sendbyte(unsigned char c){SBUF=c;while(!TI);//等待发送完成TI=0;}unsigned char getbyte(void){unsigned char c;while(!RI);//等待接收器不忙c=SBUF;RI=0;return c;}void sendstring(unsigned char *string)//此处*string相当于数组{while(*string!='\0')//判断是否到字符串末尾{sendbyte(*string);string++;}}void getstring(unsigned char *string)//读取字符串存入string中{while( (*string=getbyte()) !='\r')//换行符结束输入{string++;}}下面是proteus仿真图(虚拟终端不能发送和显示汉字,但串口助手可以)。
proteus仿真51单片机串口双机通讯
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中,不用管他。
基于Proteus的单片机串口通信仿真
Proteus班级:电信13-2姓名:段学亮邓成智崔俊杰邓石磊陈亮高金玉成绩:电子与信息工程学院信息与通信工程系1.设计要求1.1甲单片机向乙单片机机发送控制命令字符,甲单片机同时接收乙单片机机发送的数字,并显示在数码管上。
1.2乙机程序接收甲机发送字符并完成相应动作乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
2. 仿真电路图串口通信仿真电路图如图一图1:串口通信仿真电路图3.串口通信C51程序/* 名称:甲机串口程序说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0;sbit LED2=P1^3;sbit K1=P1^7;uchar Operation_No=0; //操作代码//数码管代码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//向串口发送字符void Putc_to_SerialPort(uchar c){SBUF=c;while(TI==0);TI=0;}//主程序void main(){LED1=LED2=1;P0=0x00;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90; //允许串口中断while(1){DelayMS(100);if(K1==0) //按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No) //根据操作代码发送A/B/C或停止发送{case 0: Putc_to_SerialPort('X');LED1=LED2=1;break;case 1: Putc_to_SerialPort('A');LED1=~LED1;LED2=1;break;case 2: Putc_to_SerialPort('B');LED2=~LED2;LED1=1;break;case 3: Putc_to_SerialPort('C');LED1=~LED1;LED2=LED1;break;}}}}//甲机串口接收中断函数void Serial_INT() interrupt 4{if(RI){RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];else P0=0x00;}}/* 名称:乙机程序接收甲机发送字符并完成相应动作说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
基于PROTEUS仿真的UART的多级通信
摘要通信技术和通信产业是20世纪80年代以来发展最快的领域之一。
不论是在国际还是在国内都是如此。
这是人类进入信息社会的重要标志之一。
通信包括人与人之间的语言表达,更包括电子产业中的通信。
特别是在在嵌入式行业中,CPU与外设,CPU与CPU之间的信息交换等。
在这些通信中,涉及到各种通信协议以及通信方式。
包括串行通信:I2C,SPI,UART等,并行通信。
本系统是基于PROTEUS软件仿真的UART的多机通信,即实现三个80C51单片机的通信。
关键词: 80C51,UART多机通信,PROTEUS目录第1章系统的设计模块选择 (4)1.1 I2C总线通信 (4)1.2 SPI通信 (4)1.3 UART通信 (5)1.4 模块选取 (5)第2章系统硬件模块概述 (6)2.1单片机80C51简介 (6)2.1.1硬件结构 (7)2.1.280C51中断控制系统 (7)2.1.380C51的串行通信 (8)2.2MAX487串行通信接口简介 (9)2.3DAC0832芯片简介 (9)第3章系统具体设计概述 (11)3.1 系统结构流程图 (11)3.2 系统硬件设计 (12)3.3 系统软件设计 (12)第4 章系统性能测试 (12)4.1主机向从机1发送数据测试 (12)4.2主机向从机2发送数据测试 (13)总结 (14)附录A (15)1主机程序: (15)2从机1程序: (16)3从机2程序: (17)第1章系统的设计模块选择1.1 I2C总线通信I2C总线系统的硬件结构图如图所示。
其中,SDA是数据线,SCL是时钟线。
连接到总线上的器件的输出级必须是集电极或漏极开路,以形成线“与”功能,因此SDA和SCL均需接上拉电阻。
总线处于空闲状态下均保持高电平,连接总线上的任一器件输出的低电平都将使总线的信号变低。
I2C总线支持多主和主从两种工作方式。
通常采用主从工作方式,因为不出现总线竞争和仲裁,所以工作方式简单,在主从工作方式中,主器件启动数据的发送,产生时钟信号,发出停止信号。
基于Proteus虚拟串口通信的设计与仿真
0引言串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
就单片机来说,这种通信方式是实现与PC 机、智能仪器仪表连接的重要手段,常见的通信标准有RS232和RS485,其中RS232有三线制接法和九线制接法,RS-485接口则是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好,这两种方式因接线简单,通信协议灵活而得到广泛的应用[1-2]。
1Proteus 虚拟串口Proteus 软件是英国Lab Center Electronics 公司出版的EDA 工具软件,它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前比较好的仿真单片机及外围器件的工具,是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台[3-4]。
通常情况下,虚拟仿真系统是不能与物理环境交互通信的,但是Proteus 虚拟系统模拟了这种功能,它使Proteus 仿真环境下的系统能与实际的物理环境直接交互,Proteus 的COMPIM 组件是一种串行接口组件,当由CPU 或UART 软件生成的数字信号出现在PC 物理COM 接口时,它能缓冲所接收的数据,并将它们以数字信号的形式发送给Proteus 仿真电路,如果不使用物理串口而使用虚拟串口,使用串口调试助手软件能与Proteus 单片机串口直接交互,此时需要安装虚拟串口驱动软件VSPD 。
2仿真实例选用AT89C52型号单片机,运行在PC 机中的串口调试软件,实现单片机与PC 机双向通信。
2.1硬件电路设计2.1.1安装虚拟串口驱动程序VSPD 并运行在First port 中选择COM3,在Second port 中选择COM4,单击“Add Pair ”按钮,这两个端口立即出现在左边的Virtual Ports 分支下,且用蓝色虚线将它们连接起来,在PC 的设备管理器中,也会出现两个串口的显示[5-6]。
AVR串口通信与proteus仿真
{
if(data == '\n')
{
Usart_PutChar('\r');
}
UDR0 = data;
while(!(UCSR0A &(1<<UDRE0)));
}
void Usart_PutString(unsigned char *Str)
Usart_Init();
Usart_PutString("What's your name?\n");
Usart_PutString("My name is ljb.");
while(1)
{
}
}
//USART寄存器配置函数
void Usart_Init(void)
{
UCSR0A = 0X00;
UCSR0B |= (1 << RXCIE0) | (1 << RXEN0) | (1 << TXEN0); //发送使能
}
avr串口通信与proteus仿真proteus串口通信仿真proteus串口仿真proteus串口通信avr串口通信proteusavr1680athtdtdthahrefs
#include <avr/io.h>
#include <avr/interrupt.h> //中断函数头文件
//常量声明
#define BAUD 9600 //波特率定义
//函数声明
void Usart_Init(void); //USART寄存器设置
void Usart_PutChar(unsigned char c); //字节发送函数
单片机与PC通信-(proteus与虚拟串口驱动软件以及串口调试助手地仿真)
实验:单片机与PC通信(proteus与虚拟串口驱动软件以及串口调试助手的仿真)实现内容:设置单片机串行口为工作方式一,波特率为9600。
PC从串口发送字符1、2、3或4到单片机串行口,单片机接收到该字符后,首先在P2口显示字符,然后根据字符不同返回不同字符串,具体要求如下表:一、proteus仿真图:(此proteus仿真图可免费下载,下载网址:)1、图1.12、注意:(1)51单片机属性的时钟频率(clock frequency)必为11.0592mhz,否则无法仿真。
请按下图设置AT89SC52图1.23、在仿真图中P1即(元件名称:COMPIN)模块为集成电平转换的串行通信接口(如下图)(1)图1.3(2)设置参数如下图1.44、虚拟串口驱动设置在右侧选择端口一:“COM3”端口二:“COM4”,然后按“添加端口”,此时左侧的Virtual ports下出现:图1.5表示添加了COM3,COM4一对虚拟串行口,且已连接,故我们把单片机和PC选择COM3和COM4。
(如图1.4中的physical port选项:COM4;图中:串口号COM3)。
接着再在右侧选择端口一:“COM1”端口二:“COM2”,则为下图,图1.6虚拟串口驱动设置完毕5、串口调试助手设置如图1.7图1.76、(1)将“程序”在Keil软件中编译生成“HEX”文件,加载到仿真图中的AT89C52中,启动仿真图1.9(2)按下图1.7中串口调试助手的“连接”按钮,在串口调试助手的”发送窗口”,依次输入1、2、3、4和5,发送后可以看到单片机返回的字符串一次显示在接收窗口。
如下图所示实验程序#include <reg52.h>#include <stdio.h>#include <intrins.h>#include <Absacc.h>#include <string.h>#include <ctype.h>#define byte unsigned char#define uchar unsigned char#define word unsigned int#define uint unsigned int#define ulong unsigned long#define BYTE unsigned char#define WORD unsigned int#define TRUE 1#define FALSE 0void time(unsigned int ucMs);void initUart(void);void sendString(uchar *ucString);void main(void){time(1);initUart();IE=0x90;while(TRUE){}}void initUart(void){SCON =0x50; //选择串口工作方式,打开接收允许RCAP2H=(65536-(3456/96))>>8;RCAP2L=(65536-(3456/96))%256;T2CON=0x34;//启动定时器T1}void serial0_int(void) interrupt 4{uchar rChar;uchar code str1[]="What do you plan to do this Friday?";uchar code str2[]="I plan to go to the concert.";uchar code str3[]="What are you doing next week?";uchar code str4[]="I'm think of going to my grandma's.";uchar code strdefault[]="Please select a character '1','2','3'or '4'!";EA=0;RI=0;rChar=SBUF;P2=rChar;switch(rChar){case '1':SBUF='1';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str1);break;case '2':SBUF='2';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str2);break;case '3':SBUF='3';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str3);break;case '4':SBUF='4';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str4);break;default:SBUF='d';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(strdefault);break;}EA=1;}void sendString(uchar *ucString){uchar i,stringLength=strlen(ucString);REN=0;for(i=0;i<stringLength;i++){SBUF=ucString[i];while(TI==0); TI=0;}SBUF=0x0d;while(TI==0) ; TI=0;SBUF=0x0a;while(TI==0) ; TI=0;SBUF=0x0a;while(TI==0) ; TI=0;REN=1;}void delay_5us(void){_nop_() ;_nop_() ;}void delay_50us(void){unsigned char i;for(i=0;i<4;i++);{delay_5us();}}void delay_100us(void){delay_50us();delay_50us();}void time(unsigned int ucMs) {unsigned char j;while(ucMs>0){for(j=0;j<10;j++);delay_100us();ucMs--;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行通信UART和PROTEUS仿真设计
C51 跟atmega64 的串行通信。
相关理论知识这里就不多说,只提几个:
51 的UART 所用的几个寄存器
SCON:SM0 SM1 SM2 REN RB8 TX8 RI TI
PCON: SMOD -- -- -- --- ---PD IDLE
T2CON: TF2 EXF2 RCLK TCLK EXEN2 TR2 C/_T CP/_RL2
TH2,TL2
波特率为9600bps
avr:atmega64 的USART 的两个
所用到的寄存器
这里用的是uart0,所以初始化时应该设置相关的寄存器有:
UCSR0A:RXC TXC UDRE FE DOR UPE U2X MPCM
UCSR0C :-- UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
UBRR0H、UBRR0L、
UCSR0B :RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
别问我这些都是代表什么含义,不懂自己翻书去。
proteus 仿真如下图:
仿真结果如下图所示:
其中要注意的是:
因为我在仿真中只能选择atmega64 的CKSEL Fuse 中的8MHz,所以在AVR 的程序中初始化波特率是按8MHz 来计算的。
所以仿真归仿真,注意实际中应用。
51 单片机用定时器1 来产生波特率时,看书据说模式2 下,12MHz 时最高。