基于Proteus的单片机串口通信仿真

合集下载

建立Proteus的单片机串口仿真平台

建立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项参数(波特率,数据位数,停止位数,校验码)必须一致。

proteus与keil Cx51的单片机仿真(串行通信口)

proteus与keil Cx51的单片机仿真(串行通信口)

proteus 与keil Cx51 的单片机仿真(串行通信口)单片机串行口工作于方式0,通过74LS164 实现串并转换,来控制共阳极数码管的显示,当按下K01 按钮显示2010,按下K02 键显示1987,按下K03键显示0606,按下K04 键显示1988,按下K05 键显示1224。

其中数字显示可由自己设定.电路图:C 程序:#include#include#include#define uchar unsigned char//宏定义sbit P1_1=P1;sb it P1_2=P1 ;sbit P1_3=P1;sb it P1_4=P1;sb it P1_5=P1 ;sbit P2_0=P2;uchar code discode[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//串行方式下共阳极数码管段码表0~9unsigned char leddis[4]={0,1,2,3};//显存,有几个数码管进行定义void display(void)//数码管显示函数{unsigned char count;//数码管个数P2_0=0;//P2.0 引脚输出清零信号,对74LS164 清零_nop_();_nop_();//延时,保证清零完成P2_0=1;//结束对74LS164 清零for(count=4;count>0;count--){SBUF=discode[leddis[count-1]];while(TI==0);TI=0;}}void main(){SCON=0x00;//设定UART 的工作方式为方式0leddis[0]=0;leddis[1]=1;leddis[2]=2;leddis[3]=3;//显示内容初始化display();//显示函数while(1){if(P1_1==0)//K01 按下,即P1_1被按下,显示2010{leddis[0]=2;leddis[1]=0;leddis[2]=1;leddis[3]=0;display();P1_1=1;}if(P1_2==0)//K02 按下,即P1_2 被按下,显示1987{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=7;display();P1_2=1;}if(P1_3==0)//K03 按下,即P1_3 被按下,显示0606{leddis[0]=0;leddis[1]=6;leddis[2]=0;leddis[3]=6;display();P1_3=1;}if(P1_4==0)//K04 按下,即P1_4 被按下,显示1988{leddis[0]=1;leddis[1]=9;leddis[2]=8;leddis[3]=8;display();P1_4=1;}if(P1_5==0)/ /K05 按下,即P1_5 被按下,显示1224{leddis[0]=1;leddis[1]=2;leddis[2]。

基于Proteus的单片机系统的仿真设计

基于Proteus的单片机系统的仿真设计

如 模 拟 分 析 、 字 分析 、 合 信 号 分 析 、 率 分 析 等 有 各种 虚 拟 数 混 频
仪器 , 如示 波 器 、 辑 分 析 仪 、 号 发 生 器 、 数 器 、 表 等 。 和 可 简 化单 片机 程序 在 目标 硬 件 上 的调 试 工 作 .加 快 工 程 项 目的 逻 信 计 电 能 K i Ma a e , f b等 编 译 软 件 整 合 使 用 。 到 更 好 的 仿 真效 果 。 仿 真 开 发 过 程 , 低 开 发 成 本 。 需 要 注 意 的 是 , 真 不 能 完 全 代 替 实 l l 达 该 降 仿
空航 天 大 学 出版社 . 0 . 2 6 0 3 王锋 . 于 P oe s 数 字 时 钟 设 计 与 仿 真 卟 福 建 电 脑 ,0 91 : 5 . 基 rtu 的 2 0 ,01 - 3
1 6 3 .
4王 瑞 萍 . 于 Poe s 单 片 机 虚 拟 开 发 环 境 o. 代 电 子 技 术 , 0 ,: . 基 rtu 的 】现 2 98 0
16 4

建 电

21 0 0年 第 6期
基 于 Po u 的 单 片 机 系统 的仿真 设计 rt s e
刘 艳 ,张 文 超 ,秦 鑫
(新 乡 医 学 院生 命 科 学技 术_ 河 南 新 乡 4 3 0 系 5 0 31 【 摘 要 】 介 绍 了利 用 P o u 开 发 单 片机 系 统 的 仿 真 设 计 方 法 。基 于 Po u 的 单 片 机 虚 拟 开 发 环 境 可 以 完 成 单 片 : rt s e rt s e
l i是 德 国 K i公 司 开发 的单 片机 编译 器 .是 一 种 集 成 化 (l e e l 参考文献: . 沈 郭 8 1单 片机 实 践 与 应 用 [ . 京 : 华 大学 0 M】北 清 的 文 件 管 理 编 译 环 境 , 编 辑 、 译 和 程 序 仿 真 等 于 一 体 。 用 1昊 金 戌 , 庆 阳春 , 庭 吉 . 5 集 编 可

proteus模拟串行口通信

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结果如下:。

单片机用proteus仿真双机串口通信总结体会

单片机用proteus仿真双机串口通信总结体会

单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。

《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。

Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。

本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。

电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。

2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。

主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。

串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。

3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。

首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。

然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。

总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。

《STM32单片机开发—基于Proteus虚拟仿真与HAL_LL》课件4.6 串口通信之单字节通信

《STM32单片机开发—基于Proteus虚拟仿真与HAL_LL》课件4.6  串口通信之单字节通信

4.6.2 单片机与计算机的串口通信
(1)STM32单片机串口
STM32串口通信采用TTL电平,由TxD(发送)、RxD(接收)、GND(信号/电源
地)三条线构成,高电平+3.3V代表逻辑“1”,低电平0V代表逻辑“0”。
(2)计算机RS-232串口 RS-232是一种重要的计算机串口通信技术,有25线与9线(简化)两种常见接口,
异步通信发送端与接收端双方采用不同的时钟信号,一般来说波特率误差相差 不超过1%均可顺利通信。
② 同步通信 (本书不做介绍…)
(4)串行通信的数据传输模式
终 端 发送器
1
终 接收器 端
2
终 发送器 端 1 接收器
发送器 终 端
接收器 2
终 发送器 端 1 接收器
接收器 终 端
发送器 2
单工
半双工
全双工
实际上与单片机做串口通信时经常只用到其中的三条线:TxD(发送)、RxD(接收 )、GND(信号/电源地)。
RS-232标准规定-3~-15V代表逻辑“1”,+3~+15V代表逻辑“0”,通信逻辑与单片机一 致。
(3)单片机与计算机之间的串口通信 单片机与计算机RS-232通信逻辑一致,但逻辑电平不匹配,因此仅需要在计算机
4.6 串口通信之单字节通信
能力目标:
理解并掌握STM32单片机通过串口接收/发送单个字节的方法。
任务要求:
将单片机实验板通过串口数据线与计算机相连,打开计算机上的串口助手,通过串 口助手发送单字节数据,单片机收到该字节数据后,交换高四位与低四位,将新的数
据通过串口发回串口助手。(例如:串口助手发送数据“AB”,单片机返回数据“BA” 。)

基于Proteus仿真软件实现单片机与PC机多字节串行通信

基于Proteus仿真软件实现单片机与PC机多字节串行通信

基于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控件,添加后在工具箱中出现电话机图标,拖入窗体即可使用。

8051单片机Proteus仿真实例3(原理图+C程序)

8051单片机Proteus仿真实例3(原理图+C程序)
while(key==0);
}
}
}
void timer_0() interrupt 1
{
doorbell=~doorbell;
p++;
if(p<400)
{
TH0=(8192-700)/32;
case 1: transmit('B');break;
case 2: transmit('C');break;
}
delay(10);
}
}
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF>=0&&SBUF<=9)
P0=led_code[SBUF];
else P0=0x00;
ET0 = 1;
TR0 = 1;
P2=0x01;
while(1);
}
void timer_0() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
count++;
if(count==10)
{
P2=_crol_(P2,1);
count=0;
}
}
6.继电器
原理图:
程序:
#include <reg51.h>
1.单片机之间通过串口进行通信
原理图:
程序:
#include <reg51.h>
sbit key=P1^0;
unsigned char code led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 'C':LED1=LED2=0;//全亮
}
}
}
4.交通灯仿真效果
4.1按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED1和乙单片机的LED3亮如下图4-1。
4-1:甲机的LED1和乙机的LED3分别点亮
4.2再次按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED2和乙单片机的LED4亮如下图4-2。
{
if(RI)//如收到则LED则动作
{
RI=0;
switch(SBUF)//根据所收到的不同命令字符完成不同动作
{
case 'X':LED1=LED2=1;break;//全灭
case 'A':LED1=0;LED2=1;break;//LED1亮
case 'B':LED2=0;LED1=1;break;//LED2亮
2.仿真电路图
串口通信仿真电路图如图一
图1:串口通信仿真电路图
3.串口通信C51程序
/*名称:甲机串口程序
说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
{
LED1=LED2=1;
P0=0x00;
SCON=0x50;//串口模式1,允许接收
TMOD=0x20;//T1工作模式2
PCON=0x00;//波特率不倍增
TH1=0xfd;
TL1=0xfd;
TI=RI=0;
TR1=1;
IE=0x90;//允许串口中断
while(1)
{
DelayMS(100);
sbit 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()
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K2=P1^7;
uchar NuБайду номын сангаасX=-1;
//延时
void DelayMS(uint ms)
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;
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;
4-4:甲机的数码管点亮,显示‘0’
4.5不停按下和松开乙单片机的按钮向单片机甲发送数据,甲单片机的数码管显示从‘0’到9,以此循环。当数码管显示‘9’时,如下图4-5。
4-4:甲机的数码管点亮,显示‘9’
5.总结
在进行串口通信仿真任务的时候,我们通过在网上查阅单片机串口通信的基本原理,搞懂了其工作原理后,便开始了对串口通信的电路进行了构建,再Proteus设计原理图的过程中也遇到了一些困难和仿真上的错误,不过经过细心检查和网上的查阅最终解决了错误和困难,成功的完成了该次仿真任务。同时提高了对单片机引脚的的应用能力,通过C51编程,也提高了自己对单片机的编程能力。
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
LED1=LED2=1;
SCON=0x50;//串口模式1,允许接收
TMOD=0x20;//T1工作模式2
TH1=0xfd;//波特率9600
TL1=0xfd;
PCON=0x00;//波特率不倍增
4-2:甲机的LED2和乙机的LED4分别点亮
4.3再次按下甲单片机的按钮向单片机乙发送数据,再松开甲单片机的按钮,此时甲单片机的LED1、LED2和乙单片机的LED3、LED4亮如下图4-3。
4-3:甲机的LED1、LED2和乙机的LED3、LED4全部点亮
4.4按下乙单片机的按钮向单片机甲发送数据,再松开乙单片机的按钮,此时甲单片机的数码管显示‘0’如下图4-4。此乙单片机的串口程序可以控制甲单片机的数码管从0显示到9.
Proteus
班级:
电信13-2
姓名:
段学亮
邓成智
崔俊杰
邓石磊
陈亮
高金玉
成绩:
1.设计要求
1.1甲单片机向乙单片机机发送控制命令字符,甲单片机同时接收乙单片机机发送的数字,并显示在数码管上。
1.2乙机程序接收甲机发送字符并完成相应动作乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
break;
}
}
}
}
//甲机串口接收中断函数
void Serial_INT() interrupt4
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];
else P0=0x00;
}
}
/*名称:乙机程序接收甲机发送字符并完成相应动作
说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
RI=TI=0;
TR1=1;
IE=0x90;
while(1)
{
DelayMS(100);
if(K2==0)
{
while(K2==0);
NumX=++NumX%11;//产生0~10范围内的数字,其中10表示关闭
SBUF=NumX;
while(TI==0);
TI=0;
}
}
}
void Serial_INT() interrupt 4
相关文档
最新文档