【单片机实验P1口实验一:简单I/O口扩展实验一】
实验一和实验二的主要目标是学习和掌握单片机中的P1口作为输入和输出接口的使用方式,以及如何通过编程控制硬件设备,如发光二极管和按键开关。在8051单片机中,P1口是一个准双向口,每个引脚可以独立设置为输入或输出模式。作为输入口时,需要先向相应的锁存器写入"1",确保数据能被正确读取。实验中,通过8个发光二极管和8个按键开关,能够直观地观察到P1口的输出和输入功能。
实验内容分为两个部分:
1. P1口作为输出口:将P1口的8位连接到8个发光二极管,编写程序使得二极管循环点亮。这需要利用循环和移位指令来改变P1口的数据,实现二极管逐个亮起的效果。例如,通过左移位指令RL A,可以使二极管按照顺序点亮,配合延时子程序实现闪烁效果。
2. P1口作为输入口:连接8个按键开关,并使用74LS273作为输出驱动,编写程序读取P1口的按键状态,并在二极管上显示。当P1口设置为输入,通过读取P1口的电平状态,可以获取按键开关的状态,然后利用74LS273驱动二极管显示。
实验中还涉及到延时程序的编写。在6.144MHz晶振的条件下,可以通过循环指令如DJNZ来实现延时。例如,设定一个0.1秒的延时程序,需要计算指令执行的总时间,以确定循环次数。通过计算得知,当R7初始化为#127,R6初始化为#200时,可以实现约0.100215秒的延时。
实验步骤包括:
1. 对于程序1,将P1.0~P1.7分别连接到L1~L8,执行程序后,二极管将循环点亮。
2. 对于程序2,P1.0~P1.7连接按键开关K1~K8,74LS273的SO0~SO7连接到L1~L8,CS273接到CS0。程序读取P1口的状态,并通过74LS273显示在二极管上。
参考程序示例:
- 循环点亮二极管程序(T1_1):
```汇编
; 省略部分...
LOOP: RL A ; 左移A,点亮下一个二极管
MOV P1,A ; 将A的内容写入P1口
LCALL DELAY ; 调用延时子程序
JMP LOOP ; 继续循环
; 省略部分...
```
- 显示P1口状态程序(T1_2):
```汇编
; 省略部分...
MOV P1,#0FFH ; 复位P1口为输入
MOV A,P1 ; 读取P1口状态
MOV DPTR,#OUT_PORT ; 设置输出地址
MOVX @DPTR,A ; 将状态写入地址
JMP START ; 继续监测P1口状态
; 省略部分...
```
通过这样的实验,学生能够深入理解单片机的I/O操作,以及如何通过编写汇编语言程序来控制硬件设备,同时熟悉8051单片机的P1口特性及其在实际应用中的作用。