Proteus仿真单片机实验.docx

上传人:b****0 文档编号:16933925 上传时间:2023-07-19 格式:DOCX 页数:58 大小:920.19KB
下载 相关 举报
Proteus仿真单片机实验.docx_第1页
第1页 / 共58页
Proteus仿真单片机实验.docx_第2页
第2页 / 共58页
Proteus仿真单片机实验.docx_第3页
第3页 / 共58页
Proteus仿真单片机实验.docx_第4页
第4页 / 共58页
Proteus仿真单片机实验.docx_第5页
第5页 / 共58页
Proteus仿真单片机实验.docx_第6页
第6页 / 共58页
Proteus仿真单片机实验.docx_第7页
第7页 / 共58页
Proteus仿真单片机实验.docx_第8页
第8页 / 共58页
Proteus仿真单片机实验.docx_第9页
第9页 / 共58页
Proteus仿真单片机实验.docx_第10页
第10页 / 共58页
Proteus仿真单片机实验.docx_第11页
第11页 / 共58页
Proteus仿真单片机实验.docx_第12页
第12页 / 共58页
Proteus仿真单片机实验.docx_第13页
第13页 / 共58页
Proteus仿真单片机实验.docx_第14页
第14页 / 共58页
Proteus仿真单片机实验.docx_第15页
第15页 / 共58页
Proteus仿真单片机实验.docx_第16页
第16页 / 共58页
Proteus仿真单片机实验.docx_第17页
第17页 / 共58页
Proteus仿真单片机实验.docx_第18页
第18页 / 共58页
Proteus仿真单片机实验.docx_第19页
第19页 / 共58页
Proteus仿真单片机实验.docx_第20页
第20页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Proteus仿真单片机实验.docx

《Proteus仿真单片机实验.docx》由会员分享,可在线阅读,更多相关《Proteus仿真单片机实验.docx(58页珍藏版)》请在冰点文库上搜索。

Proteus仿真单片机实验.docx

Proteus仿真单片机实验

引言 

单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。

以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。

在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。

利用Proteus我们可以很好地解决这个问题,由此我们可以快速地建立一个单片机仿真系统。

1.Proteus介绍

  Proteus是英国Labcenter Electronics公司开发的一款电路仿真软件,软件由两部分组成:

一部分是智能原理图输入系统ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是高级布线及编辑软件ARES(Advanced  Routing and Editing Software)也就是PCB。

1.1 Proteus VSM的仿真

Proteus可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。

 

Proteus可提供30多种元件库,超过8000种模拟、数字元器件。

可以按照设计的要求选择不同生产厂家的元器件。

此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。

除拥有丰富的元器件外,Proteus还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI调试器等虚拟终端。

支持图形化的分析功能等。

  Proteus特别适合对嵌入式系统进行软硬件协同设计与仿真,其最大的特点是可以仿真8051,PIA,AVR,ARM等多种系列的处理器。

Protues包含强大的调试工具,具有对寄存器和存储器、断点和单步模式IAR C-SPY,Keil,MPLAB等开发工具的源程序进行调试的功能;能够观察代码在仿真硬件上的实时运行效果;对显示,按钮,键盘等外设的交互可视化进行仿真。

1.2 Proteus PCB

Proteus 的PCB设计除了有自动布线仿真功能外,还集成了PCB设计,支持多达16个布线层,可以任意角度放置元件和焊接连线;集成了高智能的布线算法,可以方便地进行PCB设计。

2. 一个基于Protesus的单片机实例

2.1 软件的编写

本例题采用8个LED,编写程序使之闪烁起来。

软件的编写是采用汇编语言,芯片的型号选择AT89C51,编写LED.ASM文件,利用Proteus本身的51汇编功能进行编译,编译成功后生成LED.hex文件。

2.2 绘制电路图

运行Proteus的ISIS,进入仿真软件的主界面,如图1所示。

主界面分为菜单栏,工具栏,模型显示窗口,模型选择区,元件列表区等。

图1 ISIS启动界面

通过左侧的工具栏区的P(从库中选择元件)命令,在Pick devices窗口中选择系统所需元器件,还可以选择元件的类别,生产厂家等。

本例所需主要元器件有:

AT89C51芯片,电阻、电容、石英晶振和发光二极管,详见表1。

表1 元器件清单

选择元器件后连接图2所示电路。

图2  电路原理图

Microproccessor ICs类的芯片的引脚与实际的芯片基本相同, 唯一的差别是隐去了GND和VCC引脚,系统默认的是把它们分别连接到地和+5V直流电源。

故在电路连线时可以不考虑电源和地的连接。

电路连接完成后,选中AT89C51单击鼠标左键,打开“Edit Component”对话窗口如图3所示,可以直接在“Clock Frequency”后进行频率设定,设定单片机的时钟频率为12MHz。

在“Add/removesourcefile”栏中选择已经编好的LED.asm文件,然后单击“OK”按钮保存设计。

至此,就可以进行单片机的仿真。

图 3   单片机属性的设定

2.3Proteus仿真结果

单片机的仿真结果图如图4,模拟信号经A/D转换后,结果送入单片机,再在数码管上显示;通过调节可调电阻的阻值,可以得到不同的显示结果。

仿真结果表明,系统达到了预先的设计要求。

在仿真的过程中每个管脚旁边会出现一个小方块,红色的方快表示高电平,蓝色的表示低电平。

 通过方快颜色的变化可以很方便地知道每个管脚电平的变化,从而能对系统的运行有更直观的了解,这对程序的调试有很大的帮助。

 

图4 仿真结果

3.总结

本文结合一个LED闪烁的单片机电路详细说明了Proteus在单片机开发中的应用。

可以看出,Proteus功能十分强大,能仿真各种数字模拟电路,且操作简单,使用方便。

能快速地进行单片机仿真,加快系统开发的过程,降低开发成本。

实验1PROTUES环境及LED闪烁综合实验

1.实验任务

做单一灯的左移右移,硬件电路如图所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

2.电路原理图

图1

3.程序设计内容

我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。

每次送出的数据是不同,具体的数据如下表1所示:

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

说明

L8

L7

L6

L5

L4

L3

L2

L1

 

1

1

1

1

1

1

1

0

L1亮

1

1

1

1

1

1

0

1

L2亮

1

1

1

1

1

0

1

1

L3亮

1

1

1

1

0

1

1

1

L4亮

1

1

1

0

1

1

1

1

L5亮

1

1

0

1

1

1

1

1

L6亮

1

0

1

1

1

1

1

1

L7亮

0

1

1

1

1

1

1

1

L8亮

4.程序框图

 

 

 

 

 

 

图2

5.汇编源程序

ORG0

START:

MOVR2,#8

MOVA,#0FEH

SETBC

LOOP:

MOVP1,A

LCALLDELAY

RLCA

DJNZR2,LOOP

MOVR2,#8

LOOP1:

MOVP1,A

LCALLDELAY

RRCA

DJNZR2,LOOP1

LJMPSTART

DELAY:

MOVR5,#20;

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

实验2多路开关状态指示

1.实验任务

如图1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。

(开关闭合,对应的灯亮,开关断开,对应的灯灭)。

2.电路原理图

图1

3.程序设计内容

3.1开关状态检测

对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。

3.2输出控制

根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。

4.程序框图

 

读P1口数据到ACC中

ACC内容右移4次

ACC内容与F0H相或

ACC内容送入P1口

图2

5.解决方案

方法一(汇编源程序)

ORG00H

START:

MOVA,P1

ANLA,#0F0H

RRA

RRA

RRA

RRA

ORlA,#0F0H

MOVP1,A

SJMPSTART

END

方法二(汇编源程序)

ORG00H

START:

JBP1.4,NEXT1

CLRP1.0

SJMPNEX1

NEXT1:

SETBP1.0

NEX1:

JBP1.5,NEXT2

CLRP1.1

SJMPNEX2

NEXT2:

SETBP1.1

NEX2:

JBP1.6,NEXT3

CLRP1.2

SJMPNEX3

NEXT3:

SETBP1.2

NEX3:

JBP1.7,NEXT4

CLRP1.3

SJMPNEX4

NEXT4:

SETBP1.3

NEX4:

SJMPSTART

END

实验3报警产生器

1.实验任务

用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。

2.电路原理图

图1

3.程序设计内容

3.1信号产生的方法

500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次;

 

4.程序框图

图2

5.汇编源程序

FLAGBIT00H

ORG00H

START:

JBP1.7,START

JNBFLAG,NEXT

MOVR2,#200

DV:

CPLP1.0

LCALLDELY500

LCALLDELY500

DJNZR2,DV

CPLFLAG

NEXT:

MOVR2,#200

DV1:

CPLP1.0

LCALLDELY500

DJNZR2,DV1

CPLFLAG

SJMPSTART

DELY500:

MOVR7,#250

LOOP:

NOP

DJNZR7,LOOP

RET

END

实验4I/O并行口直接驱动LED显示

1.实验任务

如图1所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。

在数码管上循环显示0-9数字,时间间隔0.2秒。

2.电路原理图

图1

3程序设计内容

(1)LED数码显示原理

七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。

LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码见表2

“0”

3FH

“8”

7FH

“1”

06H

“9”

6FH

“2”

5BH

“A”

77H

“3”

4FH

“b”

7CH

“4”

66H

“C”

39H

“5”

6DH

“d”

5EH

“6”

7DH

“E”

79H

“7”

07H

“F”

71H

(2)由于显示的数字0-9的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。

这样我们按着数字0-9的顺序,把每个数字的笔段代码按顺序排好!

建立的表格如下所示:

TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。

4.程序框图

 

 

 

 

 

 

 

 

图2

5.汇编源程序

ORG0

START:

MOVR1,#00H

NEXT:

MOVA,R1

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

LCALLDELAY

INCR1

CJNER1,#10,NEXT

LJMPSTART

DELAY:

MOVR5,#20

D2:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

DJNZR5,D2

RET

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

实验5按键识别方法之一

1.实验任务

每按下一次开关SP1,计数值加1,通过AT89S51单片机的P1端口的P1.0到P1.3显示出其的二进制计数值。

2.电路原理图

3程序设计方法

(1)其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不要有干扰进来,因为,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。

因此在按键按下的时候,

 

 

图2

要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰

信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。

具体的一个按键从按下到释放的全过程的信号图如上图所示:

从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。

从而提高了系统的可靠性。

由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。

(1)对于按键识别的指令,我们依然选择如下指令JB BIT,REL指令是用来检测BIT是否为高电平,若BIT=1,则程序转向REL处执行程序,否则就继续向下执行程序。

或者是 JNB BIT,REL指令是用来检测BIT是否为低电平,若BIT=0,则程序转向REL处执行程序,否则就继续向下执行程序。

(2)但对程序设计过程中按键识别过程的框图如右图所示:

                 图3

4.程序框图

图4

6.汇编源程序

ORG0

START:

MOVR1,#00H;初始化R1为0,表示从0开始计数

MOVA,R1;

CPLA;取反指令

MOVP1,A;送出P1端口由发光二极管显示

REL:

JNBP3.7,REL;判断SP1是否按下

LCALLDELAY10MS;若按下,则延时10ms左右

JNBP3.7,REL;再判断SP1是否真得按下

INCR1;若真得按下,则进行按键处理,使

MOVA,R1;计数内容加1,并送出P1端口由

CPLA;发光二极管显示

MOVP1,A;

JNBP3.7,$;等待SP1释放

SJMPREL;继续对K1按键扫描

DELAY10MS:

MOVR6,#20;延时10ms子程序

L1:

MOVR7,#248

DJNZR7,$

DJNZR6,L1

RET

END

实验6一键多功能按键识别技术

1.实验任务

如图1所示,开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。

2.电路原理图

图1

3.程序设计方法

(1)设计思想由来

在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。

(2)设计方法

从上面的要求我们可以看出,L1到L4发光二极管在每个时刻的闪烁的时间是受开关SP1来控制,我们给L1到L4闪烁的时段定义出不同的ID号,当L1在闪烁时,ID=0;当L2在闪烁时,ID=1;当L3在闪烁时,ID=2;当L4在闪烁时,ID=3;很显然,只要每次按下开关K1时,分别给出不同的ID号我们就能够完成上面的任务了。

下面给出有关程序设计的框图。

4.程序框图

 

 

 

 

 

 

 

 

 

 

 

图2

5.汇编源程序

IDEQU30H

SP1BITP3.7

L1BITP1.0

L2BITP1.1

L3BITP1.2

L4BITP1.3

ORG0

MOVID,#00H

START:

JBK1,REL

LCALLDELAY10MS

JBK1,REL

INCID

MOVA,ID

CJNEA,#04,REL

MOVID,#00H

REL:

JNBK1,$

MOVA,ID

CJNEA,#00H,IS0

CPLL1

LCALLDELAY

SJMPSTART

IS0:

CJNEA,#01H,IS1

CPLL2

LCALLDELAY

SJMPSTART

IS1:

CJNEA,#02H,IS2

CPLL3

LCALLDELAY

SJMPSTART

IS2:

CJNEA,#03H,IS3

CPLL4

LCALLDELAY

SJMPSTART

IS3:

LJMPSTART

DELAY10MS:

MOVR6,#20

LOOP1:

MOVR7,#248

DJNZR7,$

DJNZR6,LOOP1

RET

DELAY:

MOVR5,#20

LOOP2:

LCALLDELAY10MS

DJNZR5,LOOP2

RET

END

实验7定时计数器T0作定时应用技术

1.实验任务

用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。

硬件电路如下图所示

2.电路原理图

3.程序设计内容

AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。

只要通过设置特殊功能寄存器TMOD,即可完成。

定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。

现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。

对于这20次我们就可以采用软件的方法来统计了。

因此,我们设定TMOD=00000001B,即TMOD=01H

下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出

TH0=(216-50000) / 256

TL0=(216-50000) MOD 256

当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。

5.程序框图

 

 

 

 

 

 

 

 

 

 

 

 

图2

6.汇编源程序(查询法)

SECONDEQU30H

TCOUNTEQU31H

ORG00H

START:

MOVSECOND,#00H

MOVTCOUNT,#00H

MOVTMOD,#01H

MOVTH0,#(65536-50000)/256

MOVTL0,#(65536-50000)MOD256

SETBTR0

DISP:

MOVA,SECOND

MOVB,#10

DIVAB

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,B

MOVCA,@A+DPTR

MOVP2,A

WAIT:

JNBTF0,WAIT

CLRTF0

MOVTH0,#(65536-50000)/256

MOVTL0,#(65536-50000)MOD256

INCTCOUNT

MOVA,TCOUNT

CJNEA,#20,NEXT

MOVTCOUNT,#00H

INCSECOND

MOVA,SECOND

CJNEA,#60,NEX

MOVSECOND,#00H

NEX:

LJMPDISP

NEXT:

LJMPWAIT

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

实验8定时计数器T0作定时应用技术

1.实验任务

用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。

0.2秒的闪烁速率也由定时/计数器T0来完成。

2.电路原理图

3.程序设计内容

(1)由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中断入口地方加入长跳转指令来执行中断服务程序。

书写汇编源程序格式如下所示:

ORG 00H

LJMP START

ORG 0BH ;定时/计数器T0中断入口地址

LJMPINT_T0

START:

NOP ;主程序开始

.

INT_T0:

PUSHACC ;定时/计数器T0中断服务程序

PUSHPSW

POPPSW

POPACC

RETI ;中断服务程序返回

END

(2)定时2秒,采用16位定时50ms,共定时40次才可达到2秒,每50ms产生一中断,定时的40次数在中断服务程序中完成,同样0.2秒的定时,需要4次才可达到0.2秒。

对于中断程序,在主程序中要对中断开中断。

(3)由于每次2秒定时到时,L1-L4要交替闪烁。

采用ID来号来识别。

当ID=0时,L1在闪烁,当ID=1时,L2在闪烁;当ID=2时,L3在闪烁;当ID=3时,L4在闪

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2