51单片机使用74LS165实现并入串出(中断和轮询方法)
来源:互联网 发布:浙江贰贰网络 看准网 编辑:程序博客网 时间:2024/04/30 09:38
74LS165简介
主要引脚介绍:
SO:串行数据输出端
QH:反相串行数据输出端
D0~D7:并行数据输入端
CLK:时钟输入端(需要接时钟源,51单片机串口工作在方式0时接TXD(P3.1口))
INH:时钟禁止端(高电平有效,使用时设为低电平)
SH/LD :移位与置位控制端
SI:串行输入端(用于拓展多个74LS165)
使用方式
74LS165芯片上电后,首先设置SH/LD端为低电平,此时芯片将D0~D7脚上的高低电平数据存入芯片内寄存器Q0~Q7,然后设置SH/LD端为高电平,此时芯片将寄存器内数据通过SO串行发送(QH也会发送反相数据)。
实验电路
C语言代码
轮询写法:
#include<AT89X52.h>#define LED P0#define DATEGET P2_5 //对应74LS165数据载入位 SH/LDvoid DelayMS(unsigned int Time) //延时函数{ unsigned char Temp; while(Time--) { for(Temp = 0;Temp <= 160;Temp++); }}void Init() //初始化函数{ SCON = 0x10; }void main(){ Init(); //初始化 while(1) { DATEGET = 0; //数据载入位设为低电平开始读取按键输入 DelayMS(20); //延时一段时间确保读取完成 DATEGET = 1; //数据载入位设为高电平将数据写入串口寄存器 while(!RI); //等待直到寄存器接收完成 LED = SBUF; //使用寄存器数据驱动LED灯 RI = 0; //允许串口接收下一组数据 DelayMS(20); //延时一段时间等待按键输入 }}
中断写法:
#include<AT89X52.h>#define LED P0#define DATEGET P2_5 //对应74LS165数据载入位 SH/LDvoid DelayMS(unsigned int Time) //延时函数{ unsigned char Temp; while(Time--) { for(Temp = 0;Temp <= 160;Temp++); }}void Init() //初始化函数{ SCON = 0x10; EA = 1; ES = 1;}void DateGet() interrupt 4 //串口数据接收完成中断{ DATEGET = 0; //数据载入位设为低电平,将按键数据存入74LS165寄存器 DelayMS(50); //延时一会等待存入完成 LED = SBUF; //变更LED端口 DATEGET = 1; //数据载入位设为高电平,将74LS165寄存器数据写入串口寄存器 /*一定要在串口复位前将数据载入位设为高电平,使得在串口开始接收前发送74LS165寄存器内数据 如果先进行串口复位,串口寄存器因为通讯线路上无信号导致串口寄存器全部被写0, 寄存器误以为数据接收完成使得RI位置1,无法接收数据载入位设为高电平时发送的数据*/ RI = 0; //复位串口开始接收74LS165寄存器数据 /*跳出中断,执行主函数中while(!RI)等待数据接收完成*/}void main() //主函数{ /*开始进行第一次初始化接收*/ Init(); //执行初始化 DATEGET = 1; //数据载入位设为高电平,将74LS165寄存器初始数据写入串口寄存器 /*等待结束进行第一次初始化接收后转入中断*/ while(1) { while(!RI); //等待串口寄存器接收完成 /*接收完成后进入中断*/ }}
0 0
- 51单片机使用74LS165实现并入串出(中断和轮询方法)
- 74LS165 C51程序(并入传出芯片)
- vhdl 7输入并入串出
- 51单片机以定时中断的方法实现DS18B20时序
- 51单片机--计时器和中断
- 51单片机之中断的实现过程
- 单片机中断使用注意事项
- 51单片机中断和软件仿真
- 51单片机(二):单片机内部定时/计数器和中断系统
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- 单片机实验——0到60秒的计时器(使用硬件中断方式实现)
- 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
- 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
- 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
- STM32F103ZE单片机中FSMC Bank2~4中断(INT2~3和INTR引脚)的使用
- 单片机中断的运算方法
- 51单片机STC89C52 定时器(中断方式)
- 51单片机STC89C52 串口接收(中断)
- android开发(如何开发一个可以维护的好项目):一 、定义基类
- Centos7.2 thrift-0.9.3 安装使用(cpp服务端,go客户端)
- android Activity数据传递onActivityResult与setResut
- ubuntu14.04server初试
- Eclipse 项目导入Android Studio的几种方式
- 51单片机使用74LS165实现并入串出(中断和轮询方法)
- 开发一个好项目:二、actvity简便跳转,创建菜单按钮,正确使用fragment
- 关于TextView的setText()方法报resource not found exception的问题
- 我好久没有写博客了
- android 开发:InputMethodManager内存泄露解决
- 堆和栈的区别
- Makefile详解-程序的编译和链接
- tensorflow学习笔记(十四):tensorlfow操作gradient
- Python基础学习--字符串格式化