找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2756|回复: 31
收起左侧

51单片机毒程序,大家看看

  [复制链接]
ID:1091094 发表于 2023-8-11 09:19 | 显示全部楼层 |阅读模式
事情是这样的 ,我在调试一个程序,功能:按键向电脑串口助手发数据,电脑也可以发数据给单片机控制led灯。
用的是开发板。  大家可以帮忙看看,单片机还有没有救。
源程序和有毒部分代码都标出来了。
第一次发帖,如有不妥,还望多包涵。

代码有毒的部分,已被屏蔽

代码有毒的部分,已被屏蔽

13、电脑单片机UART通信 - 副本.rar

21.21 KB, 下载次数: 13

回复

使用道具 举报

ID:1091094 发表于 2023-8-11 09:39 | 显示全部楼层
忘记说了:就是烧录了这个程序后,就无法再烧录程序了。单片机相当于报废了
回复

使用道具 举报

ID:143767 发表于 2023-8-11 12:16 | 显示全部楼层
有那么严重吗?没听说过单片机中毒
回复

使用道具 举报

ID:773929 发表于 2023-8-11 12:35 | 显示全部楼层
试试按住复位键,点下载程序,松开复位键
回复

使用道具 举报

ID:690831 发表于 2023-8-11 12:43 来自手机 | 显示全部楼层
烧录程序是用厂家固化的引导文件,和你的用户程序没任何关系。
回复

使用道具 举报

ID:213173 发表于 2023-8-11 13:20 | 显示全部楼层
危言耸听
回复

使用道具 举报

ID:94031 发表于 2023-8-11 14:11 | 显示全部楼层
我把你发的程序下载到普中的开发板,普中开发板一切正常,不要紧张慢慢找原因。
回复

使用道具 举报

ID:491577 发表于 2023-8-11 14:33 | 显示全部楼层
也可能是连接线质量太差造成,下载程序时波特率默认115200太大了,改成4900就可以了,我遇到过这样的问题,改波特率就可以了。
回复

使用道具 举报

ID:41656 发表于 2023-8-11 16:18 | 显示全部楼层
不知道你用的什么单片机  要是STC的话使用串口是不影响下载程序的,冷启动过程中是先运行ISP代码的,你的程序这时候还没开始运行,注意别通过串口引脚的电流给单片机供电了就行
回复

使用道具 举报

ID:517951 发表于 2023-8-12 07:57 | 显示全部楼层
芯片烧录不进去, 多数情况就是使用不当单片机损坏了. 比如过压, 反向接入电压.ESD打坏等原因
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 09:16 | 显示全部楼层
aidianzi 发表于 2023-8-11 16:18
不知道你用的什么单片机  要是STC的话使用串口是不影响下载程序的,冷启动过程中是先运行ISP代码的,你的程 ...

如果是串口一直在发送数据,标志位一直都在,会不会干扰烧录程序,因为程序烧录也是用串口
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 09:22 | 显示全部楼层
xuyaqi 发表于 2023-8-11 14:11
我把你发的程序下载到普中的开发板,普中开发板一切正常,不要紧张慢慢找原因。

你把我屏蔽的那部分 给释放出来了吗     

程序运行的也不怎么正常,断电或复位,会出现按键只能发送一次,或两次的情况,然后就什么也操作不了了。
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 09:25 | 显示全部楼层
rayin 发表于 2023-8-12 07:57
芯片烧录不进去, 多数情况就是使用不当单片机损坏了. 比如过压, 反向接入电压.ESD打坏等原因

但是什么功能都正常的芯片来的,而且是开发板,自己没有连错线,坏的几率非常小
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 09:34 | 显示全部楼层
iamluckman 发表于 2023-8-11 12:43
烧录程序是用厂家固化的引导文件,和你的用户程序没任何关系。

如果是串口被占用了,会不会呢 不是很懂
回复

使用道具 举报

ID:899981 发表于 2023-8-12 10:27 | 显示全部楼层
STC在烧录过程中的确可以遇到多种问题,但是要找方法,必要时请求厂家解决。不会坏的。
回复

使用道具 举报

ID:94031 发表于 2023-8-12 11:09 | 显示全部楼层
3038838599 发表于 2023-8-12 09:22
你把我屏蔽的那部分 给释放出来了吗     

程序运行的也不怎么正常,断电或复位,会出现按键只能发送一 ...

我把你屏蔽的释放出来进行编译,然后下载,正常,再下载还是正常,没有对你的程序进行研究。
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 11:17 | 显示全部楼层
aidianzi 发表于 2023-8-11 16:18
不知道你用的什么单片机  要是STC的话使用串口是不影响下载程序的,冷启动过程中是先运行ISP代码的,你的程 ...

用的是stc89c52 系类        普中的开发板,电路的话,是通过CH340控制mos管直接接通USB的5v的。
不知道你说的:串口引脚的电流是什么,但是开发板的TXD/RXD有上拉电阻,上拉到5V,和单片机电源的是同一个5V.
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 11:19 | 显示全部楼层
ZHAOBAO511 发表于 2023-8-12 10:27
STC在烧录过程中的确可以遇到多种问题,但是要找方法,必要时请求厂家解决。不会坏的。

怎么找厂家  是去炼丹炉的官网吗  我试试
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 11:24 | 显示全部楼层
xuyaqi 发表于 2023-8-12 11:09
我把你屏蔽的释放出来进行编译,然后下载,正常,再下载还是正常,没有对你的程序进行研究。

那我也不清楚了,我有三块单片机,现在那块还是烧录不了,你用的是普中的开发板吗
试一试功能如何,我感觉自己写的中断服务程序、中断配置没有什么问题,不知道为什么,还是效果不理想,
有时候重新上电就只能发送一次,就卡住了,什么反应都没有,然后复位或者重新上电就正常了。
是因为程序跑飞了吗?不是很懂跑飞。
回复

使用道具 举报

ID:195496 发表于 2023-8-12 11:36 | 显示全部楼层
电路断电不彻底也会导致下载失败,主要调波特率,断电。
回复

使用道具 举报

ID:1091094 发表于 2023-8-12 11:53 | 显示全部楼层
大漠落日 发表于 2023-8-12 11:36
电路断电不彻底也会导致下载失败,主要调波特率,断电。

我有两套开发板都下载不了  也不清楚什么情况
回复

使用道具 举报

ID:690831 发表于 2023-8-12 14:23 来自手机 | 显示全部楼层
p2p3都接地试试
回复

使用道具 举报

ID:74687 发表于 2023-8-12 17:55 | 显示全部楼层
程序一般不会干扰烧录的,我倒碰过电压低的时候按复位键下载不了,但是关电源再打开电源可以烧录的。
回复

使用道具 举报

ID:94031 发表于 2023-8-12 18:42 | 显示全部楼层
3038838599 发表于 2023-8-12 11:24
那我也不清楚了,我有三块单片机,现在那块还是烧录不了,你用的是普中的开发板吗
试一试功能如何,我感 ...

我是用普中开发板做的测试,我看到有“单片机毒程序”特意试了试。
回复

使用道具 举报

ID:1010435 发表于 2023-8-12 19:15 | 显示全部楼层
这是一个最基本的串口1中断函数吧
回复

使用道具 举报

ID:213173 发表于 2023-8-13 08:14 | 显示全部楼层
3038838599 发表于 2023-8-12 11:17
用的是stc89c52 系类        普中的开发板,电路的话,是通过CH340控制mos管直接接通USB的5v的。
不知道 ...

如果你确实用的是普中的开发板和stc89c52,用两根杜邦线把P1.0、P1.1接GND。STC-ISP正确选择芯片型号,硬件选项全默认不做任何修改,用下面修改的程序下载,不出意外成功率100%。
  1. /***************************************
  2. *实现电脑和单片机互相通信
  3. *按K4单片机给电脑发8位数据
  4. *用电脑助手给单片机发数据
  5. ****************************************/
  6. #include "reg52.h"

  7. typedef unsigned char u8;//重定义
  8. typedef unsigned int u16;

  9. //定义独立按键K4控制脚
  10. sbit key4=P3^3;

  11. bit busy = 0;

  12. /*******************************************************************************
  13. * 函 数 名       : delay_10us
  14. * 函数功能                 : 延时函数,ten_us=1时,大约延时10us
  15. * 输    入       : ten_us
  16. * 输    出             : 无
  17. *******************************************************************************/
  18. void delay_10us(u16 ten_us)
  19. {
  20.         while(ten_us--);       
  21. }
  22. /*********************************
  23. *函数名   :uart_init()
  24. *函数功能 :uart通信配置初始化
  25. *输入     :baud(给TL1、TH1赋值配置T1定时器的溢出率)
  26. *输出     :无
  27. *********************************/
  28. void uart_init(u8 baud)
  29. {
  30.         //配置溢出率
  31.         TL1 = baud;
  32.         TH1 = baud;//赋值
  33.         TMOD |= 0X20;//定时器1为工作方式2
  34.         TR1 = 1;//打开定时器
  35.         //配置uart串口寄存器
  36.         SCON = 0X50;//串口工作方式1
  37.         PCON = 0X80;//波特率加倍
  38.         EA = 1;//打开总中断
  39.         ES = 1;//打开串口中断
  40.         ET1 = 0;//禁止定时器1中断
  41.         busy = 0;

  42. }

  43. /*******************************
  44. *函数名  :external_interruption_1()
  45. *函数功能:外部中断1的初始化
  46. *输入    : 无
  47. *输出    : 无
  48. *******************************/
  49. /*
  50. void external_interruption_1(void)
  51. {
  52.         IT1 = 1; //设为下降沿触发
  53.         EX1 = 1; //打开外部中断1 中断允许位
  54.         EA  = 1; //打开总中断
  55. }
  56. */
  57. /************************
  58. *主函数
  59. *******************************/
  60. void main()
  61. {
  62.         u8 dat = 0;
  63.         u8 count = 0;
  64.         uart_init(0xfa);
  65. //        external_interruption_1();
  66.         while(1)
  67.         {
  68.                 if(key4 == 0)
  69.                 {
  70.                         delay_10us(1000); //按键消抖
  71.                         if(key4 == 0)
  72.                         {
  73.                                 count++;
  74.                                 while (busy);
  75.                                 busy = 1;
  76.                                 SBUF = count;
  77.                                 while(!key4);
  78.                         }
  79.                 }
  80.         }
  81. }

  82. /*******************************
  83. *函数名  :Int1_Routine()
  84. *函数功能:外部中断1中断服务函数
  85. *输入    : 无
  86. *输出    : 无(给电脑发送8位数据)
  87. ********************************/
  88. /*
  89. void Int1_Routine(void) interrupt 2
  90. {
  91.         delay_10us(3000); //按键消抖
  92. //        while(key4==0); //如果按键还没放开,就一直留在这
  93.         if(key4 == 0)   // 关掉串口的中断申请后,加这个稳定多了 如果没有这句,那么上面delay_10us()是没用的,
  94.         {
  95.                 SBUF = 0XFF;
  96.                 while(TI==0)  //等待串口数据发送完成
  97.                 TI = 0;
  98.         }
  99.         while(key4==0);    //等待按键弹起
  100.         delay_10us(5000); //按键消抖
  101.                
  102. }*/

  103. /*****************
  104. 串口中断
  105. ******************/
  106. void for_safe() interrupt 4
  107. {
  108.         if (TI)
  109.         {
  110.                 TI = 0;
  111.                 busy = 0;
  112.         }
  113.         if (RI)
  114.         {
  115.                 RI = 0;               
  116.                 P2 = ~SBUF;
  117.         }
  118. }
复制代码
回复

使用道具 举报

ID:420836 发表于 2023-8-13 09:37 | 显示全部楼层
该问题应该是由其他原因引起的,我们从未听说过影响单片机的病毒。
回复

使用道具 举报

ID:946795 发表于 2023-8-14 01:02 来自手机 | 显示全部楼层
应该是勾选了,下次冷启动时P3.2,P3.3为0才可以下载程序了,我以前刚学单片机的时候也这样过
回复

使用道具 举报

ID:879348 发表于 2023-8-14 08:12 | 显示全部楼层
烧录程序是固化代码,理论上你无法修改,自然无法有病毒,如果你发现了,应该可以去官网拿10万块悬赏
回复

使用道具 举报

ID:584814 发表于 2023-8-14 08:29 | 显示全部楼层
楼主成功研制出51单片机病毒,可以直接申请图灵奖,诺贝尔奖也行哈
回复

使用道具 举报

ID:65956 发表于 2023-8-14 08:32 | 显示全部楼层
建议串口1的通讯功能切换到通道2或3,然后P3031只作烧录接口用,这样就不会冲突,但你这种现像我用很多都不曾发生过,不过建议你冷启动烧录试试看
回复

使用道具 举报

ID:168461 发表于 2023-8-15 10:46 | 显示全部楼层
建议上电延时200ms再执行你的程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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