单片机实验报告
姓名 张晓波
学号 1115104059
时间 11 月 14
地点 机电大楼
实验题目 实验二 I/O 口输入、输出实验
评
阅
一、实验目的
1. 学习 I/O 口的使用方法。
2. 学习延时子程序、查表程序的编写和使用。
二、实验主要仪器和环境
PC 机、WAVE 软件、仿真器+仿真头、实验板、电源等。
三、实验说明
本实验第一部分通过单片机的 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
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
---- LED0
---- LED1
---- LED2
---- LED3
---- LED4
---- LED5
---- LED6
---- LED7
实验 1:P0 口循环点灯
P1.0
P1.1
P1.2
P1.3
P1.0
P1.0
P1.0
P1.0
----- S1
----- S2
----- S3
------ S4
------ S5
------ S6
------ S7
------ S8
实验 2:P1、P0 口输入输出
a
g
d
b
c
f
e
a
b
c
d
e
f
g
h(dp)
P2.0 P2.1 P2.2 P2.3P2.4 P2.5P2.6 P2.7
h(dp)
实验 2: LED 数码管各段与 I/O 的连接
六、实验程序流程框图、实验程序
第一部分程序:
;调用延时子程序
;将 A 里面的 00000011 左移一位成 00000110
;循环点亮 LED 灯
;0.5S 的延时程序
;设定程序汇编起始地址
;设置初始值 00000011
ORG 0000H
MOV A ,#03H
LOOP: MOV P0,A ;点亮 LED0 和 LED1
ACALL DELAY
RL A
SJMP LOOP
DELAY:
MOV
DEL:
DEL1:MOV
DEL2:MOV
DEL3:DJNZ
DJNZ
DJNZ R7,DEL1 ;(49938+1+2)*10=499410us
RET
R7,#10
R6,#246
R5,#100
R5,DEL3 ;2*100=200μS
R6,DEL2 ;(200+1+2)*246=49938μS
;返回主程序
开始
设置初始值
数据输出
左移一位
延时
第二部分程序:
ORG 0000
SJMP MAIN
MAIN: MOV P1,#0FFH
SEARCH:MOV A,P1
;设定起始地址
;P1 口置 1
;读 P1 口
LED:
CJNE A,0FFH,LED ;查询是否有按键按下
SJMP SEARCH
MOV P0, A
ACALL DELAY
MOV R5 ,#00H
;等待
;有键按下,将值读入 P0
;调用延时子程序
;置计数初值=0
;输入右移 1 位
;若 Cy=1,则数码显示
;Cy=1,则计数加 1
;跳回继续移位
SHIFT: RRC A
JC LOOKFOR
INC R5
SJMP SHIFT
LOOKFOR:MOV DPTR,#TAB ;所查表的首地址赋给 DPTR
;计数值做偏移量
;显示相应按键值
MOV A,R5
MOVC A,@A+DPTR
MOV P2,A
SJMP SEARCH
06H,5bH,4fH,66H ;
6dH,7dH,07H,7fH ;
;0.5S 的延时程序
R7,#10
R6,#246
R5,#100
R5,DEL3
R6,DEL2
R7,DEL1
TAB:DB
DB
DELAY:
DEL:
MOV
DEL1: MOV
DEL2: MOV
DEL3:DJNZ
DJNZ
DJNZ
RET
SJMP $
END
Y
Y
开始
P1 口置 1
读入 P1 口值
P1=0FFH?
N
将读入的值输出到 P0
置计数初值=0
输入值右移 1 位到 Cy
Cy=0?
N
计数值+1
以计数值查段码表
段码输出到 P2
七、 实验及程序的分析和讨论(结合思考题)
1、实验 1 欲改变 LED 循环的方向程序应如何修改?循环的时间间隔由什么决定?写出间隔时
间为 1 秒的延时程序并说明计算方法。
答:要改变 LED 循环的方向,只需将程序中的“RL A”换成指令“RR A”
循环的时间间隔由延时子程序决定
间隔时间为 1 秒的延时程序如下:
DELAY:
DEL: MOV
DEL1: MOV
DEL2: MOV
DEL3: DJNZ
DEL4: DJNZ
DJNZ
RET
R7,#20
R6,#246
R5,#100
R5,DEL3 ;2*100=200μS
R6,DEL2 ;(200+1+2)*246=49938μS
R7,DEL1 ;(49938+1+2)*20=998820
;指令执行时间 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 口控制继电器的电路图
8051
P1.0
7407
R1
12V
K
9013
计算方法如下:由于工作电流为 100mA 而 9013 放大倍数大于 50 所以通过 R1 的电流约 2mA。
则 R1 的计算方法如下:输出最大为 5V,R1=(5-0.6)/2=2.2 千欧姆。
九、程序测试报告:
经测试实验一可实现 LED 灯循环点亮;
实验二按键后,LED 可正确显示,并且数码管可正确显示按键编号。比如当按下第四个键
时,LED3 灯亮,其余灯均熄灭,数码管显示 4。
十、体会
一开始时程序写成 SHIFT: RRC A
JNC LOOKFOR
INC R5
SJMP SHIFT
结果为低电平触发,测试时关闭开关时灯灭,
其他灯都亮,后改为 SHIFT: RRC A 为高电平触发,符合实验要求,打开开关后,对应
JC LOOKFOR
INC R5
SJMP SHIFT
的灯亮,其他灯灭,数码管也显示对应的编号。