单片机实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告二 姓名 学号 时间 地点
实验题目 I/O 口输入、输出实验
一、实验目的
1. 学习I/O 口的使用方法。
2. 学习延时子程序、查表程序的编写和使用。
二、实验主要仪器和环境
PC 机、W A VE 软件、仿真器+仿真头、实验板、电源等。
三、实验说明
本实验第一部分通过单片机的I/O 口控制LED 的亮灭,从而观察I/O 口的输出。实验第二部分通过单片机的I/O 口接受按键动作信息,然后通过LED 和数码管指示。通过本实验学生可以掌握单片机I/O 口输入输出的控制方法,同时也可以掌握单片机延时子程序、查表程序的编写和调试方法。要求预先编写好程序并通过伟福仿真软件调试。
四、实验内容
1、P0口做输出口,接八只LED ,编写程序,使LED 循环点亮,间隔0.5秒。
2、 P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,同时将开关号(0—7)显示在LED 数码管上。编程时应注意P1作为输入口时应先置1,才能正确读入值。
五、实验电路连线
P0.0 ---- LED0 P1.0 ----- S1 P0.1 ---- LED1 P1.1 ----- S2 P0.2 ---- LED2 P1.2 ----- S3 P0.3 ---- LED3 P1.3 ------ S4 P0.4 ---- LED4 P1.0 ------ S5 P0.5 ---- LED5 P1.0 ------ S6 P0.6 ---- LED6 P1.0 ------ S7 P0.7 ---- LED7 P1.0 ------ S8
实验1:P0口循环点灯 实验2:P1、P0口输入输出
评 阅
a b
c
d e f g h(dp)
a b c d e f g h(dp) P2.7 P2.6P2.5 P2.4P2.3P2.2P2.1 P2.0
实验2: LED 数码管各段与I/O 的连接
六、实验程序流程框图、实验程序
第一部分程序:ORG 0000H ;设定程序汇编起始地址
MOV A ,#03H ;设置初始值00000011 LOOP : MOV P0,A ;点亮LED0和LED1 ACALL DELAY ;调用延时子程序
RL A ;将A 里面的00000011左移一位成00000110 SJMP LOOP ;循环点亮LED 灯 DELAY: ;0.5S 的延时程序 DEL: MOV R7,#10 DEL1:MOV R6,#246 DEL2:MOV R5,#100
DEL3:DJNZ R5,DEL3 ;2*100=200μS
DJNZ R6,DEL2 ;(200+1+2)*246=49938μS DJNZ R7,DEL1 ;(49938+1+2)*10=499410us RET ;返回主程序
开始
延时
设置初始值
数据输出
左移一位
第二部分程序:
ORG 0000 ;设定起始地址 SJMP MAIN
MAIN: MOV P1,#0FFH ;P1口置1 SEARCH:MOV A,P1 ;读P1口
CJNE A,0FFH,LED ;查询是否有按键按下 SJMP SEARCH ;等待
LED: MOV P0, A ;有键按下,将值读入P0 ACALL DELAY ;调用延时子程序 MOV R5 ,#00H ;置计数初值=0 SHIFT: RRC A ;输入右移1位
JNC LOOKFOR ;若Cy=0,则数码显示 INC R5 ;Cy=1,则计数加1
SJMP SHIFT ;跳回继续移位 LOOKFOR:MOV DPTR,#TAB ;所查表的首地址赋给DPTR MOV A,R5 ;计数值做偏移量 MOVC A,@A+DPTR
MOV P2,A ;显示相应按键值 SJMP SEARCH
TAB:DB 60H,0DAH,0F2H,66H ; DB 0B6H,0BEH,0E0H,0FEH ;
DELAY: ;0.5S 的延时程序 DEL: MOV R7,#10 DEL1: MOV R6,#246 DEL2: MOV R5,#100
DEL3:DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 RET SJMP $ END
七、 实验及程序的分析和讨论(结合思考题)
1、实验1欲改变LED 循环的方向程序应如何修改?循环的时间间隔由什么决定?写出间隔时间为1秒的延时程序并说明计算方法。
答:要改变LED 循环的方向,只需将程序中的“RL A ”换成指令“RR A ”
循环的时间间隔由延时子程序决定 间隔时间为1秒的延时程序如下: DELAY:
DEL: MOV R7,#20 DEL1: MOV R6,#246
开始
读入P1口值
置计数初值=0
P1口置1
将读入的值输出到P0
P1=0FFH?
Y
N
输入值右移1位到Cy
Cy=0?
N
计数值+1
Y
以计数值查段码表
段码输出到P2
a b c d e
f g h(dp)
DEL2: MOV R5,#100
DEL3: DJNZ R5,DEL3 ;2*100=200μS DEL4: DJNZ R6,DEL2 ;(200+1+2)*246=49938μS DJNZ R7,DEL1 ;(49938+1+2)*20=998820
RET ;指令执行时间1μS 计算方法是:998820+1+1=99822us
2、结合实验板线路,说明如何调整LED 的亮度。
答:可以通过改变限流电阻的大小或适当改变供电直流电压来调整LED 的亮度。
3、MCS —51单片机I/O 口的输入/输出逻辑电平是多少?其负载能力有多大?若用I/O 口控制一个继电器(工作电压12V ,工作电流100mA )电路该如何设计? 答:MCS —51单片机I/O 口的输入逻辑低电平是-0.5V —0.8V ;输入高电平是2.0V —(VCC+0.5V )输出低电平是0.45V ;输出高电平是2.4V 。P0口的驱动能力较大,每位可驱动8个LSTTL 输入,即当其输出高电平时可提供400μA 的电流;当其输出低电平时则可提供3.2mA 的灌电流,如低电平允许提高,灌电流可相应加大。P1、P2、P3口的每一位只能驱动4个LSTTL ,即可提供的电流只有P0口的一半。
如下图所示即为I/O 口控制继电器的电路图
12V
7407
R1 9013
计算方法如下:由于工作电流为100mA 而9013放大倍数大于50所以通过R1的电流约2mA 。则R1的计算方法如下:输出最大为5V ,R1=(5-0.6)/2=2.2千欧姆。
九、程序测试报告:
经测试实验一可实现LED 灯循环点亮;
实验二按键后,LED 可正确显示,并且数码管可正确显示按键编号。比如当按下第四个键时,LED3灯熄灭,其余灯均亮,数码管显示4。如果修改连线为如下对应关系
a b c d e f g h(dp) P2.0 P2.1 P2.2 P2.3P2.4 P2.5P2.6 P2.7
则只需将列表改为TAB: DB 06H,5bH,4fH,66H 6dH,7dH,07H,7fH ,也可完成实验要求。
十、体会
做实验时我单步执行指令“MOV P1,#0FFH ”后发现仿真软件中的P1寄存器始终为F7,并没有变为FF ,经指导才知道PC 与硬件已连接时,程序首先下载到51芯片中,仿真结果与硬件执行后结果一致,P1寄存器始终为F7是因为我已经按下了硬件中第四个键。
8051
P1.0
K