1、电气化自动技术 实验10 74LS165并入串出移位实验指导书实验十 74LS165并入串出移位实验一、实验概述通过AT89C52接收来自74LS165的串行数据,再用LED显示出。二、实验目的掌握串口用于并行输入端口扩充的编程方法;理解74LS165的工作原理。三、实验预习要求1、主要知识点概述: 本实验用到了两个主要知识点是:74LS165的工作机制、简单的单片机串口输入。2、实验结果说明:通过74LS165来读取8位键值并通过LED显示。四、实验原理图:74LS165主要引脚介绍: SO:串行数据输出端 QH:反相串行数据输出端 D0D7:并行数据输入端 CLK:时钟输入端(需要接时钟源
2、,51单片机串口工作在方式0时接TXD(P3.1口)) INH:时钟禁止端(高电平有效,使用时设为低电平) SH/LD :移位与置位控制端 SI:串行输入端(用于拓展多个74LS165)74LS165是八位并行输入、串行输出移位寄存器,74LS165芯片上电后,首先设置SH/LD端为低电平,此时芯片将D0D7脚上的高低电平数据存入芯片内寄存器Q0Q7,然后设置SH/LD端为高电平,此时芯片将寄存器内数据通过SO串行发送(QH也会发送反相数据)。查阅74LS165的datasheet可以找到它的时序图和真值表。图:74LS165时序图图:74LS165真值表上面的真值表和时序图中我们要特别注意几
3、个端口的变化,真值表中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、
4、8个按键和8个LED,实现并转串的输入扩充实验。七、硬件连接图1. 硬件电路图:74LS165并入串出移位图:8位独立开关图:8位独立LED2.硬件连接表MCU-AT89S5274LS165并入串出移位8位独立开关8位独立LEDP30SOP31CPP32SHP10 P17D1 D8QA QHSW1 SW83.Proteus仿真图图:Proteus仿真图八、实验程序/* 文件名称: main.c 作 者: 版 本: V1.00说 明: 74LS165并入串出移位实验 修改记录: - 功能描述: * 控制74LS165 * 实现并行数据输入,串行数据输出 -*接线说明:P30-SO,P31-CP,
5、P32-SH,P10P17D1D8,SW1SW8QAQH, */#include #include #define uchar unsigned char#define uint unsigned int#define Dout P1sbit SH=P32;/*主函数*/void main(void) SCON=0X10; /设定UART方式0,允许接收数据 while(1) SH=0; /载入数据 _nop_(); _nop_(); _nop_(); SH=1; /数据输出 RI=0; while(!RI); /判断是否接收完数据 RI=0; Dout=SBUF; /输出接收到的数据 九、实
6、验步骤1、打开Proteus 8环境,在快捷工具栏中点击源代码按纽,然后在菜单栏选择系统-编译器配置。找到Keil for 8051,点击下载,下载完成后点击OK退出。2、点击源码选择新建工程,出现新固件项目对话框,在系列一栏中选择8051,在控制器一栏选择AT89C52,编译器一栏中选择Keil for 8051,然后点击确定,新工程创建完成。3、然后在工程对话框下,右键单击AT89C52,在出现的下拉列表中选中工程设置,将工程选项下Embed Files后的勾选去掉,然后点击确定完成工程设置。4、在快捷工具栏中的下拉列菜单Debug /Release/配置选项中,选择Release。5、将
7、需要编译的程序代码输入到main.c文件中,输入好程序代码后,然后在工程中,右键单击AT89C52,在出现的下拉列表中选中构建工程,编译完成返回LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)编译成功。表示工程编译成功。6、编译成功后,切换到原理图状态下点击运行按纽,可通过人机接口观察程序的仿真结果。7、连接ISP下载器一端到USB接口,另一端连到目标板。打开实验台电源,参考产品说明书中的ISP下载软件使用方法对程序进行下载。8、接下来大家就可以按照硬件连接表连线了,然后测试程序,观察实验现象,理解程序,最后自己修改程序提高编程能力。视频十、
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的值就是
9、输入74LS165的值。2.点击Proteus的左下角的,此时就会显示下图的页面。图:单步执行在这个页面点击菜单栏Debug-3.8051 CPU-Variables,页面下方会弹出一个窗口,可以观察到各个变量的值的变化。而点击菜单栏的Debug-3.8051 CPU-Registers弹出的窗口则可以观察到各个寄存器的值。继续点击会直行下一条指令,观察寄存器的变化,感受74LS165的使用方法。3.将程序烧进实验箱内,观察与仿真结果是否有差异。十二、作业本实验使用的是轮询的方法,尝试改成使用中断的方法来进行读取数据。【提示】中断服务函数如下:void DateGet() interrupt
10、4 /串口数据接收完成中断 SH = 0; /数据载入位设为低电平,将按键数据存入74LS165寄存器 DelayMS(50); /延时一会等待存入完成 DOUT = SBUF; /变更LED端口 SH = 1; /数据载入位设为高电平,将74LS165寄存器数据写入串口寄存器 /*一定要在串口复位前将数据载入位设为高电平,使得在串口开始接收前发送74LS165寄存器内数据 如果先进行串口复位,串口寄存器因为通讯线路上无信号导致串口寄存器全部被写0, 寄存器误以为数据接收完成使得RI位置1,无法接收数据载入位设为高电平时发送的数据*/ RI = 0; /复位串口开始接收74LS165寄存器数据 /*跳出中断,执行主函数中while(!RI)等待数据接收完成*/十三、实验思考题思考74LS165适应的情况和场合。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1