51单片机使用74LS165实现并入串出(中断和轮询方法)

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/LD

void 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/LD

void 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);     //等待串口寄存器接收完成
        /*接收完成后进入中断*/   
    }
}
  • 10
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值