单片机作业.docx

上传人:b****4 文档编号:4994407 上传时间:2022-12-12 格式:DOCX 页数:21 大小:2.11MB
下载 相关 举报
单片机作业.docx_第1页
第1页 / 共21页
单片机作业.docx_第2页
第2页 / 共21页
单片机作业.docx_第3页
第3页 / 共21页
单片机作业.docx_第4页
第4页 / 共21页
单片机作业.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机作业.docx

《单片机作业.docx》由会员分享,可在线阅读,更多相关《单片机作业.docx(21页珍藏版)》请在冰豆网上搜索。

单片机作业.docx

单片机作业

八课时部分

实验一开关状态指示闪烁灯

实验目的:

1.掌握编译工具keil和单片机模拟器proteus的使用。

2.掌握简单位操作指令写法。

3.掌握单片机I/O口的输入输出功能。

4.学习延时子程序的编写和使用。

实验设备:

预装了keil及proteus的PC机。

实验内容:

1.在AT89C51单片机的P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

2.监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。

电路原理图如下图所示:

3.AT89C51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7

接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。

(开

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

电路原理图如下图所示:

四.实验步骤:

1.任务一:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex

文件加入到单片机中,观察发光二极管的闪烁情况。

2.任务二:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex

文件加入到单片机中,合上开关,二极管发光,打开开关,二极管熄灭。

3.任务三:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex

文件加入到单片机中,合上开关,对应的二极管发光,打开开关,对应的二极管熄灭。

五.实验要求:

1.根据实验任务要求,编写源程序。

任务一的代码:

ORG2000H

START:

CLRP1.0

LCALLDELAY

SETBP1.0

LCALLDELAY

SJMPSTARTEND

任务三代码:

ORG2200H

START:

MOVA,P1

;取开关值

;开关对应发光二极管

ANLA,#0F0HRRA

RRA

RRA

RRA

ORLA,#0F0H

MOVP1,A

SJMPSTARTEND

2.上机调试程序。

六.思考:

1.并行输入/输出接口中P0、P1、P2、P3口各有什么功能?

并加以比较

对比

P0口不接片外存储器与不扩展I/O口时,可作为准双向I/O口。

接片外存储器或扩展I/O口时,P0口分时复用低8位地址总线和双向数据总线。

P1口可以作为准双向I/O口使用,另外对于52子系列,P1.0有第二功能:

定时/计数器2的计数脉冲输入端T2;P1.1也有第二功能:

定时/计数器2的外部控制端T2EX。

P2口可以作为准双向I/O口使用以及高8位地址总线。

P3口可以作为准双向I/O口,并且每一位都有第二功能。

见下表

引脚

第二

■功能

P3.0

RxD:

串行口接收数据输入端

P3.1

TxD:

串行口发送数据输出端

P3.2

INT0:

外部中断申请输入端0

P3.3

INT1:

外部中断申请输入端1

P3.4

T0:

外部计数脉冲输入端0

P3.5

T1:

外部计数脉冲输入端1

P3.6

WR:

与外设控制信号输出端

P3.7

RD:

读外设控制信号输出端

2.有关端口操作的指令有哪些?

了解这些指令的功能

这四个端口均各有一个锁存器(即特殊功能寄存器P0~P3),故可以具有所有包含直接寻址方式的指令

如:

数据传送指令MOVP0#data,PUSHP0等

算术运算指令ADDCAP0等

逻辑运算指令ANLA,P0等

条件转移指令CJNEA,P0,rel等

另外这四个端口可以按位使用,即每一位均能独立作输入输出用,故可以使用位操作指令

如:

位传送指令MOVCP0.1;位逻辑操作指令CPLP0.3;位条件转移指令JBP0.2,rel等

3.要求任务1中,将延时时间改为1分钟,则改程序将作如何的修改?

由于本题中,设定振荡频率为12MHz,指令周期为1us,而DJNZ指令为双周期指令,故执行每条该指令需花费2us时间。

1分钟为60000000us故需要执行30000000次DJNZ指令,所以这里可以将代码修改为

DELAY:

MOVR4,#30

D1:

MOVR5,#100涎时子程序,延时60秒

D2:

MOVR6,#100

D3:

MOVR7,#100

DJNZR7,$

DJNZR6,D3

DJNZR5,D2

DJNZR4,D1

RET

实验二广告灯

实验目的:

1.学习P1口的使用方法。

2.学习延时子程序的设计方法。

3.学习移位指令的用法。

实验设备:

预装了keil及proteus的PC机。

实验内容:

1.八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.XP1.1—P1.2—P1.3-—TP1.7—P1.6-—TP1.0亮,重复循环。

2.利用取表的方法,使端口P1做单一灯的变化:

左移2次,右移2次,闪烁2次(延时的时间0.2秒)。

电路原理图如下图所示:

4.实验步骤:

1.任务一:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,观察二极管的闪烁情况是否符合实验要求。

2.任务二:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,观察二极管的闪烁情况是否符合实验要求。

5.实验要求:

1.根据实验任务要求,编写源程序;

任务一的代码:

ORG2000H

START:

MOVR2,#8

MOVA,#0FEH;最开始L1亮

SETBC

LOOP:

MOVP1,A

LCALLDELAY

RLCA;L2,L8依次亮

DJNZR2,LOOP

MOVR2,#8

LOOP1:

DELAY:

D1:

TABLE:

MOVDPTR,#TABLE

CLRA

MOVCA,@A+DPTR

CJNEA,#10H,LOOP;执行到表中数据为10H时结束

JMPSTART

MOVP1,A

MOVR3,#20

LCALLDELAY

INCDPTR

JMPLOOP

MOVR4,#20;延时子程序

MOVR5,#248

DJNZR5,$

DJNZR4,D1

DJNZR3,DELAY

RET

DB0FEH,0FDH,0FBH,0F7H;按顺序排列码值

DB0EFH,0DFH,0BFH,07FH

DB0FEH,0FDH,0FBH,0F7H

DB0EFH,0DFH,0BFH,07FH

DB07FH,0BFH,0DFH,0EFH

DB0F7H,0FBH,0FDH,0FEH

DB07FH,0BFH,0DFH,0EFH

DB0F7H,0FBH,0FDH,0FEH

DB00H,0FFH,00H,0FFH

DB10H

END

2.上机调试程序。

六.思考:

1.修改程序,使发光二极管闪亮时间改变。

修改闪亮时间即是将代码中的延时子程序修改,这里修改为0.1秒闪

亮1次,则将延时子程序改为:

DELAY:

MOVR4,#10

D1:

MOVR5,#248

DJNZR5,$

DJNZR4,D1

DJNZR3,DELAY

RET

2.修改程序,使发光二极管闪亮移位方向改变。

对于任务一,可以将RLCA和RRCA的顺序调整,实现发光二极管自L8—L1—L8依次变亮

对于任务二,根据如图所示电路,从程序中可以看出发光二极管的移位方向是自上而下两次,在自下而上两次,最后全亮全灭两次结束。

这里将其修改为

自上而下—自下而上—自上而下—自下而上—全亮—全灭—结束

将TABLE表数据改为:

TABLE:

DB0FEH,0FDH,0FBH,0F7H

DB0EFH,0DFH,0BFH,07FH

DB07FH,0BFH,0DFH,0EFH

DB0F7H,0FBH,0FDH,0FEH

DB0FEH,0FDH,0FBH,0F7H

DB0EFH,0DFH,0BFH,07FH

DB07FH,0BFH,0DFH,0EFH

DB0F7H,0FBH,0FDH,0FEH

DB00H,0FFH

DB10H

END

试验三报警产生器

1.实验目的:

掌握利用单片机产生音频信号的方法。

2.实验设备:

预装了keil及proteus的PC机。

3.实验内容:

用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求

1KHz信号响100ms,500Hz信号响200ms交替进行,P1.7接一开关进行控制,

当开关合上响报警信号,当开关断开告警信号停止,编出程序。

55分钟

电路原理图如下图所示:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,报警器产生报警信号,按下SP1,报警信号停止。

五.实验要求:

1.根据实验任务要求,编写源程序;

ORG2000H

FFBITP1.5;设置频率转换标志位

SETBFF;首先将频率置为1KHz

START:

JBP1.7,START

1.要求1KHz信号响200ms,500Hz信号响100ms,应该如何调整程序?

本题中,500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz

的信号周期为1ms,信号电平每500us变反1次。

若要更改程序,达到1KHz信号响200ms,500Hz信号响100ms。

只需将程序上半段产生500Hz信号的持续时间改为:

MOVR2,#100

程序下半段产生1KHz信号的持续时间改为:

MOVR2,#10DV1:

MOVR1,#40DV2:

CPLP1.0

DJNZR1,DV2

DJNZR2,DV1

2.若使两种信号交替有间隔的响,应该如何调整程序?

假设间隔为100毫秒,则在FIRST和NEXT之前加入如下程序:

MOVR2,#200

LOOPO:

LCALLDELY500

DJNZR2,LOOP0

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

1.实验目的:

1.掌握七段数码管的显示原理。

2.掌握通过AT89C51驱动七段数码管的方法。

2.实验设备:

预装了keil及proteus的PC机。

3.实验内容:

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

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

四.实验步骤:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,数码管循环显示0-9数字。

五.实验要求:

1.根据实验任务要求,编写源程序;

实验代码为:

ORG2000H

START:

NEXT:

MOVR1,#00H

MOVA,R1

MOVDPTR,#TABLE

MOVCA,@A+DPTR;从0开始显示

MOVP0,A

LCALLDELAY

INCR1

CJNER1,#10,NEXT;判断是否显示到9

LJMPSTART

DELAY:

D2:

MOVR5,#20;延时子程序

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

DJNZR5,D2

RET

TABLE:

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

END

2.上机调试程序。

六.思考:

调整程序,试让数码管所显示数字递减循环。

只需将表TABLE中数据颠倒一下变为从9-0的段选码即可。

为:

 

TABLE:

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

实验五按键识别

实验目的:

1.了解按键识别的方法。

2.掌握一键多功能的原理。

实验设备:

预装了keil及proteus的PC机。

实验内容:

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

2.开关SP1接在P3.7/RD管脚上,在AT89C51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,

3.

4.实验步骤:

1•任务一:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,每次按下开关,计数加一,二极管都会用二进制形式显示结果。

2.任务二:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex

文件加入到单片机中,运行仿真,按周实验内容的要求,按下开关,观察二极管的亮灭是否符合要求。

5.实验要求:

3.根据实验任务要求,编写源程序;

任务一的代码:

ORG2000H

START:

MOVR1,#00H

;从0开始计数

MOVA,R1

CPLA

MOVP1,A

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

REL:

JNBP3.7,REL

;判断SP1是否按下

LCALLDELAY

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

JNBP3.7,REL

INCR1

MOVA,R1CPLA

MOVP1,A

JBP3.7,$

SJMPRELDELAY:

MOVR6,#20L1:

MOVR7,#248

DJNZR7,$

DJNZR6,L1

RET

END任务二的代码:

FLAGEQUP2.0

L1BITP1.0

L2BITP1.1

L3BITP1.2L4BITP1.3

ORG2000H

MOVFLAG,#00HSTART:

JBP3.7,REL

LCALLDELAY1

JBP3.7,RELINCFLAGMOVA,FLAG

CJNEA,#04,REL

MOVFLAG,#00H

REL:

JNBP3.7,$

MOVA,FLAG

CJNEA,#00H,IS0

;计数内容加1

;发光二极管显示

;等待SP1释放

;延时10ms子程序

;定义标志位

;开始时标志位置0,从L1亮起;调用延时程序1判断是否真的按键;每按一次键,二极管移位一次;判断是否按到连续按到第五次

;按到第5次标志位清0

CPLL1;按到第一次则执行

LCALLDELAY

SJMPSTART

IS0:

CJNEA,#01H,IS1

CPLL2

;按到第二次则执行

LCALLDELAY

SJMPSTART

IS1:

CJNEA,#02H,IS2

CPLL3

LCALLDELAYSJMPSTART

;按到第三次则执行

IS2:

CJNEA,#03H,IS3

CPLL4

LCALLDELAYSJMPSTART

;按到第四次则执行

IS3:

LJMPSTART

;按到第五次重新开始

DELAY1:

MOVR6,#20

;延时10毫秒程序

LOOP1:

MOVR7,#248

DJNZR7,$

DJNZR6,LOOP1

RET

DELAY:

MOVR5,#20

;延时200毫秒程序

LOOP2:

LCALLDELAY1

DJNZR5,LOOP2RET

END

4.上机调试程序。

六.思考:

1.在任务一中,我们做的是加法显示,如果要求是减法显示,应如何调整程序?

减法显示只需将上述程序改为:

MOVR1,#0FFH

JJJJJJJJ

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

DECR1;若真按下,计数内容减1

2.在任务二中,如果要求二极管闪烁的顺序颠倒过来,应如何调整程序?

当最开始判断时,CJNEA,#00H,IS0

若相等,则CPLL4

F面依次执行CPLL3、CPLL2、CPLL1即可

实验六计数器与计时器

实验目的:

1.学习单片机计数器的使用和编程。

2.熟悉计数器中断处理程序的编程。

实验设备:

预装了keil及proteus的PC机。

实验内容:

1.利用AT89C51单片机来制作一个手动计数器,在AT89C51单片机的

P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0—

P2.7接一个共阴数码管,作为00—99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00—99计数的十位数显示。

2.在AT89C51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。

电路原理图如下图所示:

四.实验步骤:

1•任务一:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,按照实验要求,按下开关,计数加一,观察数码管显示数字是否正确。

2.任务二:

使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,观察数码管是否显示秒表计时,到达59秒时,是否归零。

五.实验要求:

1.根据实验任务要求,编写源程序;任务一的代码:

SP1BITP3.7

ORG2000H

START:

MOVR1,#00H;设初值0

NEXT:

MOVA,R1

MOVB,#10

DIVAB;得到计数值的十位

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,B;得到计数值的个位

MOVCA,@A+DPTR

MOVP2,A

WT:

JNBSP1,WT

WAIT:

JBSP1,WAIT;判断键是否按下

LCALLDELY1

JBSP1,WAIT

INCR1;计数值加1

MOVA,R1

CJNEA,#100,NEXT;判断是否加到100

LJMPSTART

DELY1:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1RET

TABLE:

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

END

 

任务二的代码:

ORG0

START:

MOVR0,#00H;设初值0

NEXT:

MOVA,R0

MOVB,#10

TABLE:

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

END

2.上机调试程序。

六.思考:

1.实验电路中只有2位数码管,当需要多位数码管时,电路应如何连接?

在这里我们可以采用动态显示方式,将所有位的段选线并接在一个

I/O口上,而利用另一个I/O口来选择哪一位显示。

这样从段选线I/O口上按位依次分别送显示字符的段选码,在位选控制口也按相应的次序分别选通相应的显示位,选通位显示相应字符,并保持几毫秒的延时,未选通位则不显示字符。

因为人的视觉滞留,看不出这种变化,各位显示器能连续稳定地显示不同的字符。

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

当前位置:首页 > 求职职场 > 简历

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

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