单片机作业.docx
- 文档编号:11883849
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:20
- 大小:122.63KB
单片机作业.docx
《单片机作业.docx》由会员分享,可在线阅读,更多相关《单片机作业.docx(20页珍藏版)》请在冰豆网上搜索。
单片机作业
●八课时部分
实验一开关状态指示闪烁灯
一.实验目的:
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
LJMPSTART
DELAY:
MOVR5,#20;延时子程序,延时0.2秒
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
任务二的代码:
ORG2100H
START:
JBP3.0,LIG
CLRP1。
0
SJMPSTART
LIG:
SETBP1。
0
SJMPSTART
END
任务三代码:
ORG2200H
START:
MOVA,P1
ANLA,#0F0H;取开关值
RRA
RRA
RRA
RRA
ORLA,#0F0H;开关对应发光二极管
MOVP1,A
SJMPSTART
END
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等
算术运算指令ADDCA,P0等
逻辑运算指令ANLA,P0等
条件转移指令CJNEA,P0,rel等
另外这四个端口可以按位使用,即每一位均能独立作输入输出用,故可以使用位操作指令
如:
位传送指令MOVC,P0.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.0→P1。
1→P1。
2→P1.3→┅→P1。
7→P1。
6→┅→P1。
0亮,重复循环。
2.利用取表的方法,使端口P1做单一灯的变化:
左移2次,右移2次,闪烁2次(延时的时间0.2秒).
电路原理图如下图所示:
四.实验步骤:
1.任务一:
使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,观察二极管的闪烁情况是否符合实验要求.
2.任务二:
使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,观察二极管的闪烁情况是否符合实验要求。
五.实验要求:
1.根据实验任务要求,编写源程序;
任务一的代码:
ORG2000H
START:
MOVR2,#8
MOVA,#0FEH;最开始L1亮
SETBC
LOOP:
MOVP1,A
LCALLDELAY
RLCA;L2…L8依次亮
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
任务二的代码:
ORG2100H
START:
MOVDPTR,#TABLE
LOOP:
CLRA
MOVCA,@A+DPTR
CJNEA,#10H,LOOP;执行到表中数据为10H时结束
JMPSTART
LOOP1:
MOVP1,A
MOVR3,#20
LCALLDELAY
INCDPTR
JMPLOOP
DELAY:
MOVR4,#20;延时子程序
D1:
MOVR5,#248
DJNZR5,$
DJNZR4,D1
DJNZR3,DELAY
RET
TABLE:
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
试验三报警产生器
一.实验目的:
掌握利用单片机产生音频信号的方法。
二.实验设备:
预装了keil及proteus的PC机.
三.实验内容:
用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
JNBFF,NEXT
FIRST:
MOVR2,#200;设置响的秒数
DV:
CPLP1。
0;信号电平变反
LCALLDELY500
LCALLDELY500
DJNZR2,DV
CPLFF
NEXT:
MOVR2,#200
DV1:
CPLP1。
0
LCALLDELY500;调用延时程序实现1KHz频率
DJNZR2,DV1
CPLFF
SJMPSTART
DELY500:
MOVR7,#250
LOOP:
NOP
DJNZR7,LOOP
RET
END
2.上机调试程序。
六.思考:
1.要求1KHz信号响200ms,500Hz信号响100ms,应该如何调整程序?
本题中,500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次。
若要更改程序,达到1KHz信号响200ms,500Hz信号响100ms。
只需将程序上半段产生500Hz信号的持续时间改为:
MOVR2,#100
程序下半段产生1KHz信号的持续时间改为:
MOVR2,#10
DV1:
MOVR1,#40
DV2:
CPLP1。
0
:
……………
DJNZR1,DV2
DJNZR2,DV1
2.若使两种信号交替有间隔的响,应该如何调整程序?
假设间隔为100毫秒,则在FIRST和NEXT之前加入如下程序:
MOVR2,#200
LOOP0:
LCALLDELY500
DJNZR2,LOOP0
实验四I/O并行口直接驱动LED显示
一.实验目的:
1.掌握七段数码管的显示原理。
2.掌握通过AT89C51驱动七段数码管的方法。
二.实验设备:
预装了keil及proteus的PC机.
三.实验内容:
利用AT89C51单片机的P0端口的P0.0-P0。
7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地.在数码管上循环显示0-9数字,时间间隔0。
2秒。
电路原理图如下图所示:
四.实验步骤:
使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,数码管循环显示0-9数字。
五.实验要求:
1.根据实验任务要求,编写源程序;
实验代码为:
ORG2000H
START:
MOVR1,#00H
NEXT:
MOVA,R1
MOVDPTR,#TABLE
MOVCA,@A+DPTR;从0开始显示
MOVP0,A
LCALLDELAY
INCR1
CJNER1,#10,NEXT;判断是否显示到9
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
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管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1。
1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1。
2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1。
3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。
电路原理图如下图所示:
四.实验步骤:
1.任务一:
使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,每次按下开关,计数加一,二极管都会用二进制形式显示结果。
2.任务二:
使用keil编辑程序,生成hex文件,打开DSN文件,把hex文件加入到单片机中,运行仿真,按周实验内容的要求,按下开关,观察二极管的亮灭是否符合要求。
五.实验要求:
3.根据实验任务要求,编写源程序;
任务一的代码:
ORG2000H
START:
MOVR1,#00H;从0开始计数
MOVA,R1
CPLA
MOVP1,A;送出P1端口由发光二极管显示
REL:
JNBP3.7,REL;判断SP1是否按下
LCALLDELAY;若按下,则延时10ms左右
JNBP3。
7,REL
INCR1
MOVA,R1;计数内容加1
CPLA;发光二极管显示
MOVP1,A
JBP3。
7,$;等待SP1释放
SJMPREL
DELAY:
MOVR6,#20;延时10ms子程序
L1:
MOVR7,#248
DJNZR7,$
DJNZR6,L1
RET
END
任务二的代码:
FLAGEQUP2.0;定义标志位
L1BITP1.0
L2BITP1。
1
L3BITP1。
2
L4BITP1。
3
ORG2000H
MOVFLAG,#00H;开始时标志位置0,从L1亮起
START:
JBP3.7,REL
LCALLDELAY1;调用延时程序1判断是否真的按键
JBP3。
7,REL
INCFLAG;每按一次键,二极管移位一次
MOVA,FLAG
CJNEA,#04,REL;判断是否按到连续按到第五次
MOVFLAG,#00H;按到第5次标志位清0
REL:
JNBP3。
7,$
MOVA,FLAG
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;按到第五次重新开始
DELAY1:
MOVR6,#20;延时10毫秒程序
LOOP1:
MOVR7,#248
DJNZR7,$
DJNZR6,LOOP1
RET
DELAY:
MOVR5,#20;延时200毫秒程序
LOOP2:
LCALLDELAY1
DJNZR5,LOOP2
RET
END
4.上机调试程序.
六.思考:
1.在任务一中,我们做的是加法显示,如果要求是减法显示,应如何调整程序?
减法显示只需将上述程序改为:
MOVR1,#0FFH
……………………
JNBP3.7,REL;判断SP1是否真得按下
DECR1;若真按下,计数内容减1
2.在任务二中,如果要求二极管闪烁的顺序颠倒过来,应如何调整程序?
当最开始判断时,CJNEA,#00H,IS0
若相等,则CPLL4
下面依次执行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,D1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
任务二的代码:
ORG0
START:
MOVR0,#00H;设初值0
NEXT:
MOVA,R0
MOVB,#10
DIVAB;得到秒数的十位
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,B;得到秒数的个位
MOVCA,@A+DPTR
MOVP2,A
LCALLDELAY;调用延时1秒程序
INCR0
MOVA,R0
CJNEA,#60,NEXT;判断秒数是否达到60
LJMPSTART
DELAY:
MOVR5,#100;1秒延时程序
D2:
MOVR6,#20
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
DJNZR5,D2
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
2.上机调试程序。
六.思考:
1.实验电路中只有2位数码管,当需要多位数码管时,电路应如何连接?
在这里我们可以采用动态显示方式,将所有位的段选线并接在一个I/O口上,而利用另一个I/O口来选择哪一位显示。
这样从段选线I/O口上按位依次分别送显示字符的段选码,在位选控制口也按相应的次序分别选通相应的显示位,选通位显示相应字符,并保持几毫秒的延时,未选通位则不显示字符。
因为人的视觉滞留,看不出这种变化,各位显示器能连续稳定地显示不同的字符。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 作业