找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 131|回复: 2
收起左侧

有没有大佬提供一种多线检测短路的芯片

[复制链接]
ID:747872 发表于 2025-6-20 15:16 | 显示全部楼层 |阅读模式
现在有四十根线,需要检测任意两根线之间有没有短路,有没有大佬提供一下可用的芯片和大概方法
回复

使用道具 举报

ID:688692 发表于 2025-6-21 21:29 | 显示全部楼层
40个IO做二分法
回复

使用道具 举报

ID:1133081 发表于 2025-6-22 08:21 | 显示全部楼层
没有遇到过这种用途的专用芯片,但可用单片机自制。曾经为某产品专用排线制作过26芯排线检测装置。是利用手头现成材料,薅嘉立创羊毛打板,编程测试满足需求。你只要选择有更多IO口的芯片,套用这个程序就可以了。

无标题.jpg
无标题1.jpg


  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define ulong unsigned long

  6. sbit K1 = P5^4;
  7. sbit K2 = P5^5;
  8. sbit LED1= P4^1;
  9. sbit LED2= P4^2;
  10. sbit FM = P4^5;

  11. //全局变量声明
  12. uchar Key_value;//键值
  13. uchar error;//错误
  14. uchar Buzzer_sign;//蜂鸣器计次数
  15. //本地函数声明
  16. void Delay_ms(uint t);
  17. void Timer1Init();
  18. void key_scan();   //按键扫描函数
  19. //主函数
  20. void main()
  21. {
  22.         P0M0 = 0x00;
  23.         P0M1 = 0x00;
  24.         P1M0 = 0x00;
  25.         P1M1 = 0x00;
  26.         P2M0 = 0x00;
  27.         P2M1 = 0x00;
  28.         P3M0 = 0x00;
  29.         P3M1 = 0x00;
  30.         P4M0 = 0x20;//P4.5推挽
  31.         P4M1 = 0x00;
  32.         P5M0 = 0x00;
  33.         P5M1 = 0x00;
  34.         FM=0;//蜂鸣器初始0
  35.         Timer1Init();
  36.         while(1)
  37.         {
  38.                 key_scan();      //按键扫描函数
  39.         }
  40. }

  41. void key_scan()
  42. {            
  43.         uchar i;
  44.         ulong a,b,c,d;
  45.         ulong num,num1;

  46.         if(!K1)
  47.         {
  48.                 Delay_ms(10);
  49.                 if(!K1)//短路测试
  50.                 {
  51.                         num=0xfffffffe;
  52.                         for(i=25;i>0;i--)
  53.                         {
  54.                                 P3=num>>24;
  55.                                 P2=num>>16;
  56.                                 P1=num>>8;
  57.                                 P0=num;
  58.                                 a=P3;b=P2;c=P1;d=P0;
  59.                                 _nop_();_nop_();
  60.                                 num1=0xfc000000|(a<<24)|(b<<16)|(c<<8)|d;
  61.                                 if(num==num1)
  62.                                 {
  63.                                         num=num<<1|1;
  64.                                         error=1;
  65.                                 }
  66.                                 else
  67.                                 {
  68.                                         i=1;
  69.                                         error=2;
  70.                                 }
  71.                                 Delay_ms(1);
  72.                         }
  73.                         if(error==1){Buzzer_sign=1;}
  74.                         if(error==2){Buzzer_sign=3;}
  75.                         TR1 = 1;
  76.                         while(!K1);
  77.                 }
  78.         }
  79.         if(!K2)//开路测试
  80.         {
  81.                 Delay_ms(10);
  82.                 if(!K2)
  83.                 {
  84.                         P3=0x03;P2=0xff;P1=0xff;P0=0xff;
  85.                         _nop_();_nop_();
  86.                         a=P3;b=P2;c=P1;d=P0;
  87.                         num1=(a<<24)|(b<<16)|(c<<8)|d;
  88.                         if(num1 == 0x00000000)
  89.                         {
  90.                                 error=1;
  91.                         }
  92.                         else
  93.                         {
  94.                                 error=2;
  95.                         }
  96.                         if(error==1){Buzzer_sign=1;}
  97.                         if(error==2){Buzzer_sign=3;}
  98.                         TR1 = 1;
  99.                         while(!K2);
  100.                 }
  101.         }
  102. }


  103. //T1中断服务函数
  104. void InterruptTimer1() interrupt 3
  105. {
  106.         static uint i=0;                        //中断计数变量

  107.         if(++i>=1000)//200ms
  108.         {
  109.                 i=0;
  110.                 Buzzer_sign--;
  111.                 if(Buzzer_sign==0)
  112.                 {
  113.                         FM=1;
  114.                         LED1=1;
  115.                         LED2=1;
  116.                         error=0;
  117.                         TR1 = 0;
  118.                 }
  119.         }
  120.         if(i<500)
  121.         {
  122.                 FM=~FM;
  123.                 if(error==1)LED1=0;
  124.                 if(error==2)LED2=0;
  125.         }
  126.         else                                         //蜂鸣器端口清0         
  127.         {
  128.                 FM=0;
  129.                 LED1=1;
  130.                 LED2=1;                                        //定时器1关闭               
  131.         }


  132. }
  133. /*---------------------------------------------
  134.   定时器1初始化,时钟1T、16位重载模式
  135. ----------------------------------------------*/
  136. void Timer1Init(void)                //200微秒@11.0592MHz
  137. {
  138.         TMOD &= 0x0F;                //设置定时器模式
  139.         TMOD |= 0x20;                //设置定时器8位自动重装模式
  140.         TL1 = 0x48;                //设置定时初始值
  141.         TH1 = 0x48;                //设置定时重载值
  142.         TF1 = 0;                //清除TF1标志
  143. //        TR1 = 1;                //定时器1开始计时
  144.         EA  = 1;
  145.         ET1 = 1;
  146. }
  147. /*****************************
  148.         延时函数
  149. *****************************/
  150. void Delay_ms(uint t)//1T@11.0592MHz
  151. {
  152.         uint i,j;
  153.         for(i=t;i>0;i--)
  154.                 for(j=1100;j>0;j--);
  155. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表