51单片机P1口输入输出实验实验报告
实验一 P1口输入输出实验一 实验目的
1 掌握P1口作为I/O口时的使用方法。
2 理解读引脚和读锁存器的区别。
实验原理 由 AT89C51 组成的单片机系统,通常情况下 P0 口分时复用作为地址、数据总线, P2 口提供 A15-A8 即高 8 位地址, P3 口用作第二功能,只有 P1 口用作 I/O 口。 P1 口是 8 位准双向口,它的每一位都可独立地定义为输入或输出。既可作为 8 位的并行 I/O 口,也可作为 8 个不同的输入输出端。 P1 口的结构如图 2.1 所示,当其工作在输入方式时,对应锁存器必须先写 1 ,才能正确地读到引脚上的信号,否则,若对应锁存器的值为 0 ,执行读引脚指令时,读到的结果永远为 0 。每个 I/O 端口都有两种读入,即读锁存器和读引脚,读引脚指令一般都是以 I/O 端口为源操作数的指令,如 MOV C , P1.3 ,而读锁存器指令一般为“读 - 修改 - 写”指令,如 ANL P1.3 , C 指令,请同学们在实验中体会。图 2 中, P1.2 作为输出口, P1.3 作为输入口。
实验内容与要求
编写程序实现当P1.3为低电平时(SW1闭合),发光管亮;P1.3为高电平时发光管灭。
修改程序在执行读P1.3之前,先执行CLR P1.3,观察结果是否正确,分析在第二种情况下程序为什么不能正确执行,理解读引脚和读锁存器区别。 ORG 0000H
MAIN: MOV SP,#60H ; 设置堆栈指针SP为60H
MOV P1,#0FFH ;当P1口用作输入时,所有位对应的锁存器必须先置1
LOOP: ;CLR P1.3
MOV C,P1.3 ;读P1.3
JC LIGHT
CLR P1.2 ;LED灭
SJMP LOOP
LIGHT: SETB P1.2 ;LED 亮
SJMP LOOP
RET
END
若在执行读P1.3之前,先执行CLR P1.3,观察结果正确在执行读P1.3之前,先执行CLR P1.3,观察结果正确,程序不能正确执行,锁存器读引脚和读锁存器区别第一种方式是将引脚作为输入,那是真正地从外部引脚读进输入的值,第二种方式是该引脚处于输出状态时,有时需要改变这一位的状态,则并不需要真正地读引脚状态,而只是读入锁存器的状态,然后作某种变换后再输出。