IO口控制实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:单片机I/O口控制实验

实验目的:

利用单片机的P1口作为I/O口,学会利用P1口作为输入和输出口。

实验原理:

一、 C51的IO口系统:

P0~P3端口功能总结:

(1)P0~P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MUX,以进行转换。

而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无MUX。P0口的MUX的一个输入端为“地址/数据”信号。

P2口的MUX的一个输入信号为“地址”信号。

(2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。

原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,P0口的输出缓冲器应为三态门。P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。

P1~P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的-准双向口。

(3)P3口的口线具有第二功能,为系统提供一些控制信号。

因此P3口增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。

二、C51的中断系统

单片机能及时地响应和处理单片机外部事件或内部事件所提出的中断请求。

1.五个中断请求源:

(1)INT0*—外部中断请求0,由引脚INT0*输入,中断请求标志为IE0。

(2)INT1*—外部中断请求1,由引脚INT1*输入,中断请求标志为IE1。

(3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。

(4)定时器/计数器T1溢出中断请求,中断请求标志为TF1。

(5)串行口中断请求,中断请求标志为TI或RI。由特殊功能寄存器TCON和SCON的相应位锁存。

2.中断控制:

中断允许寄存器IE:CPU对中断源的开放或屏蔽,由片内的中断允许寄存器IE控制。字节地址为A8H,可位寻址。

IE对中断的开放和关闭为两级控制。

总的开关中断控制位EA(IE.7位):

EA=0,所有中断请求被屏蔽。

EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由IE中的5个中断请求允许控制位决定。

IE中各位的功能如下:

(1)EA:中断允许总控制位

0:CPU屏蔽所有的中断请求(CPU关中断);

1:CPU开放所有中断(CPU开中断)。

(2)ES:串行口中断允许位

0:禁止串行口中断;

1:允许串行口中断。

(3)ET1:定时器/计数器T1的溢出中断允许位

(4)EX1:外部中断1中断允许位

(5)ET0:定时器/计数器T0的溢出中断允许位

(6)EX0:外部中断0中断允许位。

中断优先级寄存器:

两条基本规则:

(1)低优先级可被高优先级中断,反之则不能。

(2)同级中断不会被它的同级中断源所中断。

IP各个位的含义:

(1)PS——串行口中断优先级控制位

1:高优先级中断;

0:低优先级中断。

(2)PT1——定时器T1中断优先级控制位

1:高优先级中断;

0:低优先级中断。

(3)PX1——外部中断1中断优先级控制位

1:高优先级中断;

0:低优先级中断。

(4)PT0——定时器T0中断优先级控制位

1:高优先级中断;

0:低优先级中断。

(5)PX0——外部中断0中断优先级控制位

1:高优先级中断;

0:低优先级中断。

由软件可改变各中断源的中断优先级。

IT0/IT1——触发方式选择位:

0:低电平触发方式,-INT0/1低电平时IE0/IE1=0,-INT0/1高电平时IE0/IE1=1。

1:下降沿触发方式,检测到下降沿,则使IE0/IE1=1,CPU相应中断后自动清除IE0/IE1。

实验内容:

1、编写程序,用P1.0-P1.2口连接LED,查询拨键开关SW1的状态来控制LED的亮和

灭(P1.7接SW1)。

2、编写程序,用P1.0-P1.2口连接LED,用按键开关KEY1作为外部中断输入INT0控制

LED的亮和灭(按一次按键LED状态取反一次)。

实验1:采用查询方式,流程图如下所示:

代码及注释:

ORG 8000H ;硬件仿真调试程序

LJMP MAIN

ORG 8100H ;硬件仿真调试程序

MAIN: SETB P1.0 ;给LED一个初态,熄灭

SETB P1.1

SETB P1.2

BACK: SETB P1.7 ;对输入位P1.7置1

JB P1.7,BACK1 ;开关断开,跳转至BACK1

CLR P1.0 ;开关闭合,所有LED灯亮

CLR P1.1

CLR P1.2

SJMP BACK ;返回继续查询

BACK1: SETB P1.0 ;开关断开,所有LED灯熄灭

SETB P1.1

SETB P1.2

SJMP BACK ;返回继续查询

END

电路图:

实验结果及分析:

LED灯的初始状态为熄灭状态,当闭合拨键开关时,三个LED灯同时点亮,当断开拨键开关时,三个LED灯同时熄灭。

在这个实验中是通过软件不断查询P1.7口的状态来控制LED灯的亮灭,实验前应注意先设置LED灯的状态。可通过将LED灯与电源或地线直接相连来观测LED是共阴极还是共阳极。实验时将LED灯和电源直接相连时,灯亮,说明此LED灯为共阴极的,即低电平点亮,故初始化时将LED灯置1为熄灭状态。当开关断开时,P1.7为高电平,P1.0~P1.2输出高电平,LED灯熄灭;当开关闭合时,P1.7为低电平,P1.0~P1.2输出低电平,LED灯亮。由此便可通过JB跳转指令对开关状态进行检测后,来确定P1.0~P1.2的输出状态。

预习报告中的电路图只画了LED灯和开关的连接,不太完整。修改后的电路图将晶振部分和复位部分的电路图也画上了,如上图所示。

实验2:采用中断方式,流程图如下所示:

相关文档
最新文档