MC74HC165A与PIC18LF26K80的SPI扩展输入方案
1. 为什么需要MC74HC165A与PIC18LF26K80的组合在工业控制和嵌入式系统中我们经常遇到需要监控大量开关量输入的场景。传统做法是为每个开关分配一个GPIO引脚当系统需要监测32个甚至64个开关状态时这种方案会迅速耗尽微控制器的引脚资源。我曾参与过一个自动化产线项目原设计使用STM32F103直接读取48个限位开关结果发现GPIO根本不够用最后不得不改用多片级联的74HC165方案。MC74HC165A是一款8位并行输入/串行输出移位寄存器它能够将8个并行输入信号转换为串行数据流输出。通过SPI接口与PIC18LF26K80这类微控制器连接可以显著减少引脚占用。具体来说每片74HC165只需要3个SPI引脚(SCK, MISO, SS)即可读取8位数据多片74HC165可以级联理论上只需3个引脚就能读取无限多个开关状态(实际受时钟速度限制)PIC18LF26K80的硬件SPI模块支持高达10MHz的时钟频率能实现快速数据采集实际项目中要注意74HC165的时钟最大频率为25MHz(5V供电时)但长距离传输时应适当降低时钟频率以避免信号完整性问题。我曾遇到过一个案例在3米长的排线上使用10MHz时钟导致数据错误降到2MHz后问题解决。2. 硬件电路设计要点2.1 典型连接电路下图展示了一个典型的双74HC165级联电路与PIC18LF26K80的连接方式PIC18LF26K80 MC74HC165A(1) MC74HC165A(2) GPIO0(SS) -------- SH/LD (两个并联) SPI_SCK -------- CLK (两个并联) SPI_MISO -------- Q7 (1) Q7 (1) -------- SER (2)关键设计细节所有74HC165的SH/LD引脚并联连接到同一个GPIO前级芯片的Q7输出连接到后级芯片的SER输入VCC需要添加0.1μF去耦电容每个芯片单独一个输入引脚建议通过10kΩ电阻上拉/下拉避免悬空2.2 电源与信号完整性在工业环境中电源噪声和信号干扰是需要特别关注的问题。根据我的经验使用独立的LDO为74HC165供电而不是直接从MCU的3.3V取电时钟和数据线走线尽量短必要时串联33Ω电阻匹配阻抗输入信号线上可添加TVS二极管防止ESD损坏对于长电缆连接建议使用差分信号转换器(如SN65176)一个实测有效的技巧在PCB布局时将74HC165尽量靠近连接器布置而把MCU放在较远位置。这样能减少输入信号线的长度降低引入干扰的风险。3. PIC18LF26K80的SPI配置3.1 寄存器设置PIC18LF26K80的SPI模块配置需要关注以下几个关键寄存器// SPI控制寄存器1 SSPCON1 0b00100010; // 使能SPI主模式时钟Fosc/64 // CKP0 (时钟空闲低电平) // CKE1 (数据在时钟上升沿传输) // SPI状态寄存器 SSPSTAT 0b01000000; // SMP0 (输入数据在中间采样) // CKE1 (已设置) // 中断控制(可选) PIE1bits.SSPIE 1; // 使能SPI中断 INTCONbits.PEIE 1;注意不同型号PIC单片机SPI寄存器可能略有差异务必查阅具体数据手册。我曾经因为混淆PIC16和PIC18的寄存器设置导致通信失败。3.2 数据读取流程读取级联74HC165的标准流程如下拉低SH/LD引脚将并行数据锁存到移位寄存器延时至少25ns(对于74HC165A)拉高SH/LD引脚准备移位通过SPI连续读取N个字节(N芯片数量)处理接收到的数据示例代码片段#define NUM_CHIPS 2 #define LD_PIN LATAbits.LATA0 uint8_t read_74hc165(void) { uint8_t data[NUM_CHIPS]; LD_PIN 0; // 加载并行数据 __delay_us(1); // 等待至少25ns LD_PIN 1; // 开始移位 for(int i0; iNUM_CHIPS; i) { data[i] spi_read(); // 连续读取两个字节 } return data; }4. 软件优化技巧4.1 中断驱动设计对于实时性要求高的系统建议使用中断驱动的设计模式volatile uint8_t switch_data[4]; // 存储4片74HC165的数据 volatile uint8_t data_ready 0; void __interrupt() isr(void) { if(PIR1bits.SSPIF) { static uint8_t chip_count 0; switch_data[chip_count] SSPBUF; if(chip_count 4) { data_ready 1; chip_count 0; } } } void poll_switches(void) { LD_PIN 0; __delay_us(1); LD_PIN 1; // 中断服务程序会自动处理数据接收 }这种设计避免了轮询等待SPI传输完成提高了CPU利用率。在我的一个项目中采用中断方式后系统响应时间从15ms降低到2ms。4.2 数据去抖动处理机械开关通常需要去抖动处理。对于74HC165读取的数据可以采用以下算法#define DEBOUNCE_TIME 20 // 20ms uint8_t debounced_state[4] {0}; uint8_t last_raw_state[4] {0}; uint32_t last_change_time[4][8] {0}; void debounce_handler(void) { for(int chip0; chip4; chip) { for(int bit0; bit8; bit) { uint8_t current (switch_data[chip] bit) 1; if(current ! ((last_raw_state[chip] bit) 1)) { last_change_time[chip][bit] get_system_tick(); } if(get_system_tick() - last_change_time[chip][bit] DEBOUNCE_TIME) { if(current) debounced_state[chip] | (1 bit); else debounced_state[chip] ~(1 bit); } } last_raw_state[chip] switch_data[chip]; } }5. 系统级设计考量5.1 扩展能力评估虽然理论上可以无限级联74HC165但实际应用中需要考虑以下限制时钟偏移随着级联数量增加时钟信号在不同芯片间的传播延迟会导致采样误差。经验法则是不要超过8片级联(64个输入)刷新速率每增加一片74HC165完整扫描所有输入的时间就增加8个时钟周期。例如1片10MHz: 0.8μs8片10MHz: 6.4μs32片10MHz: 25.6μs电源需求每片74HC165在10MHz时钟下约消耗5mA电流32片就是160mA需要合理设计电源电路5.2 故障诊断方法当系统出现数据异常时可以按照以下步骤排查检查电源测量各芯片VCC电压(应在4.5-5.5V之间)验证时钟用示波器查看SCK信号是否干净频率是否符合预期测试数据线确认MISO线上有数据变化无持续高/低电平隔离测试暂时只连接一片74HC165验证基本功能信号完整性检查各信号线是否有过冲、振铃现象一个实用的诊断技巧在软件中实现一个测试模式让MCU依次输出0xAA和0x55模式然后用逻辑分析仪观察移位过程可以快速定位硬件问题。

相关新闻

这一期讲一下佳能清零软件的问题,常见报错5B00,5B02,5B04,1700,1702,1704,P07,E08这些,其实这些故障只需有手就会修,哈哈。我用的是佳能V6.200原版清零软件,亲测完美

这一期讲一下佳能清零软件的问题,常见报错5B00,5B02,5B04,1700,1702,1704,P07,E08这些,其实这些故障只需有手就会修,哈哈。我用的是佳能V6.200原版清零软件,亲测完美

蓝凑云:点这里下载 密码:00 百度云:点这里下载 备用:https://wwaxr.lanzouw.com/ig11k3s4cpad 密码:00 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G151…

2026/7/3 18:00:07 阅读更多 →
2026高考志愿填报必备资料包(专科+本科通用)

2026高考志愿填报必备资料包(专科+本科通用)

📚 核心资料清单(均为百度网盘链接) - 最新高职高专专业目录:https://pan.baidu.com/s/1msj12egrVRe8hfjW5d8g2A 提取码:t15p - 张雪峰志愿填报合集①:https://pan.baidu.com/s/1T7sDQ8s3KUJH3q9EIwEv-…

2026/7/3 17:58:06 阅读更多 →
GESP2026年6月认证C++六级( 第三部分编程题(1、条形蛋糕))精讲

GESP2026年6月认证C++六级( 第三部分编程题(1、条形蛋糕))精讲

🍰 第一幕:蛋糕王国来了一个新店长1、暑假到了。蛋糕王国里,新开了一家蛋糕店。每天早晨,师傅都会做好一整条长长的蛋糕。(1)例如今天做了一条:════════════════ 长度&#xff…

2026/7/3 17:58:06 阅读更多 →

最新新闻

为什么遇到分式可以“颠倒”过来算?

为什么遇到分式可以“颠倒”过来算?

为什么可以“颠倒”过来算? 这种“颠倒”操作看起来有些不可思议,但它背后有非常严密的数学逻辑支撑。 简单来说:“颠倒”其实是在利用极限的倒数性质。只要极限不为 0,我们就可以把整个算式翻转过来算,最后再把结果翻…

2026/7/3 18:52:49 阅读更多 →
2026Word文件压缩全解:文档体积缩小、图片轻量化与打包操作完整指南

2026Word文件压缩全解:文档体积缩小、图片轻量化与打包操作完整指南

2026 年日常办公场景里,经常会遇到 Word 文档体积过大,无法通过社交软件、企业邮箱正常传输的情况,绝大多数大容量文档的根源是内嵌高清图片、冗余修订批注、未精简字体素材,本文整合本地办公软件内置功能、网页线上工具、微信小程…

2026/7/3 18:52:49 阅读更多 →
AI工作流自动化工具链深度评估 —— n8n/Zapier/Make实战能力对比

AI工作流自动化工具链深度评估 —— n8n/Zapier/Make实战能力对比

AI工作流自动化工具链深度评估 —— n8n/Zapier/Make实战能力对比 一、工作流触发条件的设计范式 自动化工作流的核心起点是触发器设计。不同场景需要不同的触发策略。常见模式包括四种。 Webhook触发器适合外部系统回调。比如GitHub PR事件、支付回调通知。n8n提供原生的Webho…

2026/7/3 18:50:48 阅读更多 →
特征提取总结:常用特征算法的对比与选型建议

特征提取总结:常用特征算法的对比与选型建议

特征提取总结:常用特征算法的对比与选型建议📚 本章学习目标:深入理解常用特征算法的对比与选型建议的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《计算机视觉教程》特征提取与边缘检…

2026/7/3 18:50:48 阅读更多 →
市面上口碑好的标识标牌源头销售厂家有哪些?

市面上口碑好的标识标牌源头销售厂家有哪些?

市面上口碑好的标识标牌源头销售厂家有大地标识等。以下为你详细介绍:大地标识大地标识深耕标识行业 25 年,是专业靠谱的源头生产工厂。拥有自建 3 万平米标准化标识产业园、150 余人专业技术服务团队,打通了设计、研发、生产、销售、售后全链…

2026/7/3 18:48:47 阅读更多 →
信号(二)

信号(二)

离散时间信号完全指南:分类、核心特征、数学公式与计算实战(附 Python 代码详解) 专栏定位:数字信号处理(DSP)核心基础篇,面向 DSP 入门学习者、考研备考者、嵌入式 / 音频 / 通信工程开发人员,从定义到公式、从手动计算到代码实现逐层拆解。 理论参考来源:《离散时间…

2026/7/3 18:46:45 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻