电气化自动技术 实验10 74LS165并入串出移位实验指导书.docx
《电气化自动技术 实验10 74LS165并入串出移位实验指导书.docx》由会员分享,可在线阅读,更多相关《电气化自动技术 实验10 74LS165并入串出移位实验指导书.docx(11页珍藏版)》请在冰豆网上搜索。
电气化自动技术实验1074LS165并入串出移位实验指导书
实验十74LS165并入串出移位实验
一、实验概述
通过AT89C52接收来自74LS165的串行数据,再用LED显示出。
二、实验目的
掌握串口用于并行输入端口扩充的编程方法;理解74LS165的工作原理。
三、实验预习要求
1、主要知识点概述:
本实验用到了两个主要知识点是:
74LS165的工作机制、简单的单片机串口输入。
2、实验结果说明:
通过74LS165来读取8位键值并通过LED显示。
四、实验原理
图:
74LS165
主要引脚介绍:
SO:
串行数据输出端
QH:
反相串行数据输出端
D0~D7:
并行数据输入端
CLK:
时钟输入端(需要接时钟源,51单片机串口工作在方式0时接TXD(P3.1口))
INH:
时钟禁止端(高电平有效,使用时设为低电平)
SH/LD:
移位与置位控制端
SI:
串行输入端(用于拓展多个74LS165)
74LS165是八位并行输入、串行输出移位寄存器,74LS165芯片上电后,首先设置SH/LD端为低电平,此时芯片将D0~D7脚上的高低电平数据存入芯片内寄存器Q0~Q7,然后设置SH/LD端为高电平,此时芯片将寄存器内数据通过SO串行发送(QH也会发送反相数据)。
查阅74LS165的datasheet可以找到它的时序图和真值表。
图:
74LS165时序图
图:
74LS165真值表
上面的真值表和时序图中我们要特别注意几个端口的变化,真值表中SH/LD只有在高电平的时候方才有效;CLK、INH只有当其中一个为低电平的时候,另一个时钟才能正确的输入(一般的我们在使用时,可以将其中的一个直接接地,另一个做时钟输入端口使用)。
五、Proteus使用的元器件
1.74LS165//八位并行输入,串行输出移位寄存器。
2.AT89C52//51单片机。
3.BUTTON//按键,用于最小系统复位。
4.CAP//电容,用于搭建复位电路。
5.CAP-ELEC//电解电容,用于搭建复位电路。
6.CRYSTAL//晶振,给单片机提供时钟信号。
7.LED-GREEN//绿色LED灯。
8.RES//电阻。
六、实验要求
利用74LS165、8个按键和8个LED,实现并转串的输入扩充实验。
七、硬件连接图
1.硬件电路
图:
74LS165并入串出移位
图:
8位独立开关
图:
8位独立LED
2.硬件连接表
MCU-AT89S52
74LS165并入串出移位
8位独立开关
8位独立LED
P30
SO
P31
CP
P32
SH
P10~P17
D1~D8
QA~QH
SW1~SW8
3.Proteus仿真图
图:
Proteus仿真图
八、实验程序
/*******************************************************************************
文件名称:
main.c
作者:
版本:
V1.00
说明:
74LS165并入串出移位实验
修改记录:
--------------------------------------------------------------------------------
功能描述:
*控制74LS165
*实现并行数据输入,串行数据输出
--------------------------------------------------------------------------------
*接线说明:
P30-SO,P31-CP,P32-SH,P10~P17——D1~D8,SW1~SW8——QA~QH,
*******************************************************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineDoutP1
sbitSH=P3^2;
/*********主函数***************************************************************/
voidmain(void)
{
SCON=0X10;//设定UART方式0,允许接收数据
while
(1)
{
SH=0;//载入数据
_nop_();
_nop_();
_nop_();
SH=1;//数据输出
RI=0;
while(!
RI);//判断是否接收完数据
RI=0;
Dout=SBUF;//输出接收到的数据
}
}
九、实验步骤
1、打开Proteus8环境,在快捷工具栏中点击源代码按纽,然后在菜单栏选择系统-编译器配置。
找到Keilfor8051,点击下载,下载完成后点击OK退出。
2、点击源码选择新建工程,出现新固件项目对话框,在系列一栏中选择8051,在控制器一栏选择AT89C52,编译器一栏中选择Keilfor8051,然后点击确定,新工程创建完成。
3、然后在工程对话框下,右键单击AT89C52,在出现的下拉列表中选中工程设置,将工程选项下EmbedFiles后的勾选去掉,然后点击确定完成工程设置。
4、在快捷工具栏中的下拉列菜单Debug/Release/配置选项中,选择Release。
5、将需要编译的程序代码输入到main.c文件中,输入好程序代码后,然后在工程中,右键单击AT89C52,在出现的下拉列表中选中构建工程,编译完成返回
LINK/LOCATERUNCOMPLETE.0WARNING(S),0ERROR(S)
编译成功。
表示工程编译成功。
6、编译成功后,切换到原理图状态下点击运行按纽,可通过人机接口观察程序的仿真结果。
7、连接ISP下载器一端到USB接口,另一端连到目标板。
打开实验台电源,参考产品说明书中的ISP下载软件使用方法对程序进行下载。
8、接下来大家就可以按照硬件连接表连线了,然后测试程序,观察实验现象,理解程序,最后自己修改程序提高编程能力。
视频
十、实验现象
点击开始仿真运行,按下按键(K1-K8)开关,相应的LED(LED1-LED8)灯亮。
图:
实验现象
十一、实验总结
1.使用Proteus仿真,可以观察到,8按下按键,相应的LED就会点亮。
和程序是相符合的。
while
(1)
{
SH=0;//载入数据
_nop_();
_nop_();
_nop_();
SH=1;//数据输出
RI=0;
while(!
RI);//判断是否接收完数据
RI=0;
Dout=SBUF;//输出接收到的数据
}
上面这段代码是main里面的,不难看出,程序初始化之后,P1不断输出特殊寄存器SBUF的值,而单片机的TXD是连接着74LS165的SO,所以SBUF的值就是输入74LS165的值。
2.点击Proteus的左下角的
,此时就会显示下图的页面。
图:
单步执行
在这个页面点击菜单栏Debug-3.8051CPU-Variables,页面下方会弹出一个窗口,可以观察到各个变量的值的变化。
而点击菜单栏的Debug-3.8051CPU-Registers弹出的窗口则可以观察到各个寄存器的值。
继续点击
会直行下一条指令,观察寄存器的变化,感受74LS165的使用方法。
3.将程序烧进实验箱内,观察与仿真结果是否有差异。
十二、作业
本实验使用的是轮询的方法,尝试改成使用中断的方法来进行读取数据。
【提示】中断服务函数如下:
voidDateGet()interrupt4//串口数据接收完成中断
{
SH=0;//数据载入位设为低电平,将按键数据存入74LS165寄存器
DelayMS(50);//延时一会等待存入完成
DOUT=SBUF;//变更LED端口
SH=1;//数据载入位设为高电平,将74LS165寄存器数据写入串口寄存器
/*一定要在串口复位前将数据载入位设为高电平,使得在串口开始接收前发送74LS165寄存器内数据
如果先进行串口复位,串口寄存器因为通讯线路上无信号导致串口寄存器全部被写0,
寄存器误以为数据接收完成使得RI位置1,无法接收数据载入位设为高电平时发送的数据*/
RI=0;//复位串口开始接收74LS165寄存器数据
/*跳出中断,执行主函数中while(!
RI)等待数据接收完成*/
}
十三、实验思考题
思考74LS165适应的情况和场合。