单片机实验报告 2
姓名 学号
时间 地点
评 阅 实验题目 I/O口输入、输出实验
一、实验目的
1. 学习I/O口的使用方法。
2. 学习延时子程序、查表程序的编写和使用。
二、实验仪器和设备
PC机、WAVE软件、仿真器+仿真头、实验板、电源等。
三、实验说明
本实验1通过单片机的I/O口控制LED的亮灭,从而观察I/O口的输出。实验2通过单片机的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 ----- S0 P0.1 ---- LED1 P1.1 ----- S1 P0.2 ---- LED2 P1.2 ----- S2 P0.3 ---- LED3 P1.3 ------ S3 P0.4 ---- LED4 P1.4 ------ S4 P0.5 ---- LED5 P1.5 ------ S5 P0.6 ---- LED6 P1.6 ------ S7 P0.7 ---- LED7 P1.7 ------ S8
实验1:P0口循环点灯 实验2:P1、P0口输入输出
a g
f b a
b c d e f g h(dp)
e
h(dp)
实验2: LED数码管各段与I/O的连接 d
c
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7
六、程序框图及程序
P0口循环点灯
ORG 0000H
MOV A,#07FH LP: MOV P0,A RR A LCALL DELAY LCALL DELAY SJMP LP
DELAY: MOV R2,#0FAH L1: MOV R3,#0FAH L2: DJNZ R3,L2 DJNZ R2,L1 RET
;设定程序汇编起始地址 ;设置初始值01111111 ;点亮LED0
;将A里面的值循环右移一位 ;调用延时子程序 ;循环点亮LED灯 ;0.25S的延时程序 ;2*250=500us
;500*250*2=250000us ;返回主程序
开始 设置初始值 数据输出 左移一位 延时 P1口输入/输出
ORG 0000 LOOP: MOV A,P1 CJNE A,0FFH,LED SJMP LOOP LED: MOV P0, A ACALL DELAY MOV R5 ,#00H LOOP1: RRC A JNC LOOP2 INC R5 SJMP LOOP1 LOOP2: MOV DPTR,#TAB MOV A,R5
;设定起始地址 ;读P1口
;查询是否有按键按下
;等待
;有键按下,将值读入P0 ;调用延时子程序 ;置计数初值=0 ;输入右移1位 ;若Cy=0,则数码显示 ;Cy=1,则计数加1 ;跳回继续移位 ;所查表的首地址赋给DPTR ;计数值做偏移量
MOV P1,#0FFH ;P1口置1
开始 P1口置1 读入P1口值 Y P1=0FFH? N 将读入的值输出到P0 置计数初值=0 MOVC A,@A+DPTR
MOV P2,A ;显示相应按键值 SJMP LOOP
TAB:DB 60H,0DAH,0F2H,66H ; DB 0B6H,0BEH,0E0H,0FEH ;
输入值右移1位到Cy Y Cy=0? N 计数值+1 DELAY: MOV R2,#0FAH L1: MOV R3,#0FAH L2: DJNZ R3,L2
DJNZ R2,L1 RET
;0.25S的延时程序 ;2*250=500us
;500*250*2=250000us ;返回主程序
以计数值查段码表
段码输出到P2 七、思考题
1、实验1欲改变LED循环的方向程序应如何修改?循环的时间间隔由什么决定?写出间隔时间为1秒的延时程序并说明计算方法。
答:改变LED循环的方向仅需要将(RR A)改成(RL A)即可。 循环的时间间隔由单条语句执行的时间和执行次数共同决定。
DELAY: ;1S的延时程序 DEL: MOV R7,#20 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)*20=998820us
2、51单片机I/O口的输入/输出逻辑电平是多少?其负载能力有多大?若用I/O口控制一个继电器(工作电压12V,工作电流100mA)电路该如何设计?
答:51单片机I/O口的输入/输出逻辑电平是5V。若要用I/O口控制一个继电器,可串接一个100欧的降压电阻实现驱动。