Proteus仿真单片机实验Word格式文档下载.docx

上传人:b****4 文档编号:16992461 上传时间:2022-11-27 格式:DOCX 页数:44 大小:1.13MB
下载 相关 举报
Proteus仿真单片机实验Word格式文档下载.docx_第1页
第1页 / 共44页
Proteus仿真单片机实验Word格式文档下载.docx_第2页
第2页 / 共44页
Proteus仿真单片机实验Word格式文档下载.docx_第3页
第3页 / 共44页
Proteus仿真单片机实验Word格式文档下载.docx_第4页
第4页 / 共44页
Proteus仿真单片机实验Word格式文档下载.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

Proteus仿真单片机实验Word格式文档下载.docx

《Proteus仿真单片机实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Proteus仿真单片机实验Word格式文档下载.docx(44页珍藏版)》请在冰豆网上搜索。

Proteus仿真单片机实验Word格式文档下载.docx

软件的编写是采用汇编语言,芯片的型号选择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”按钮保存设计。

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

图 

单片机属性的设定

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

L1亮

L2亮

L3亮

L4亮

L5亮

L6亮

L7亮

L8亮

4.程序框图

 

图2

5.汇编源程序

ORG0

START:

MOVR2,#8

MOVA,#0FEH

SETBC

LOOP:

MOVP1,A

LCALLDELAY

RLCA

DJNZR2,LOOP

MOVR2,#8

LOOP1:

MOVP1,A

RRCA

DJNZR2,LOOP1

LJMPSTART

DELAY:

MOVR5,#20;

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

实验2多路开关状态指示

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

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

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

MOVA,P1

ANLA,#0F0H

RRA

ORlA,#0F0H

MOVP1,A

SJMPSTART

方法二(汇编源程序)

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

实验3报警产生器

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

3.1信号产生的方法

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

FLAGBIT00H

JBP1.7,START

JNBFLAG,NEXT

MOVR2,#200

DV:

CPLP1.0

LCALLDELY500

DJNZR2,DV

CPLFLAG

NEXT:

MOVR2,#200

DV1:

DJNZR2,DV1

DELY500:

MOVR7,#250

NOP

DJNZR7,LOOP

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

1.实验任务

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

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

2.电路原理图

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.程序框图

MOVR1,#00H

MOVA,R1

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

INCR1

CJNER1,#10,NEXT

MOVR5,#20

MOVR6,#20

MOVR7,#248

DJNZR6,D1

DJNZR5,D2

TABLE:

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

实验5按键识别方法之一

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

3程序设计方法

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

因此在按键按下的时候,

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

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

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

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

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

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

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

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

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

                 图3

图4

6.汇编源程序

MOVR1,#00H;

初始化R1为0,表示从0开始计数

MOVA,R1;

CPLA;

取反指令

MOVP1,A;

送出P1端口由发光二极管显示

REL:

JNBP3.7,REL;

判断SP1是否按下

LCALLDELAY10MS;

若按下,则延时10ms左右

JNBP3.7,REL;

再判断SP1是否真得按下

INCR1;

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

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

发光二极管显示

JNBP3.7,$;

等待SP1释放

SJMPREL;

继续对K1按键扫描

DELAY10MS:

MOVR6,#20;

延时10ms子程序

L1:

DJNZR6,L1

实验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.电路原理图

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.程序框图

IDEQU30H

SP1BITP3.7

L1BITP1.0

L2BITP1.1

L3BITP1.2

L4BITP1.3

MOVID,#00H

JBK1,REL

LCALLDELAY10MS

JBK1,REL

INCID

MOVA,ID

CJNEA,#04,REL

JNBK1,$

CJNEA,#00H,IS0

CPLL1

IS0:

CJNEA,#01H,IS1

CPLL2

IS1:

CJNEA,#02H,IS2

CPLL3

IS2:

CJNEA,#03H,IS3

CPLL4

IS3:

LJMPSTART

DJNZR6,LOOP1

MOVR5,#20

LOOP2:

LCALLDELAY10MS

DJNZR5,LOOP2

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

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

硬件电路如下图所示

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.程序框图

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

SECONDEQU30H

TCOUNTEQU31H

MOVSECOND,#00H

MOVTCOUNT,#00H

MOVTMOD,#01H

MOVTH0,#(65536-50000)/256

MOVTL0,#(65536-50000)MOD256

SETBTR0

DISP:

MOVA,SECOND

MOVB,#10

DIVAB

MOVA,B

MOVP2,A

WAIT:

JNBTF0,WAIT

CLRTF0

INCTCOUNT

MOVA,TCOUNT

CJNEA,#20,NEXT

INCSECOND

MOVA,SECOND

CJNEA,#60,NEX

MOVSECOND,#00H

NEX:

LJMPDISP

LJMPWAIT

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

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

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

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

3.程序设计内容

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

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

ORG 00H

LJMP START

ORG 0BH 

;

定时/计数器T0中断入口地址

LJMPINT_T0

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在闪烁;

当I

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1