单片机实验二

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档