找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3237|回复: 3
打印 上一主题 下一主题
收起左侧

STC单片机不断电下载程序方法

  [复制链接]
跳转到指定楼层
楼主
背景:刚开始接触STC单片机,在给单片机下载程序的时候,总是要冷启动。一般情况都是加载相应的程序文件,然后点击“下载/编程”按钮,然后再重新断电上电,直到程序写进单片机里。那么有没有其它更方便的方法呢?肯定是有的。
目的:
通过自定义的下载命令,在不需要冷启动的情况下,就可以对STC单片机进行程序的下载,甚至通过进一步的设置,在keil中程序编辑、编译完成后,STC-ISP会自动将程序下载到单片机里。
  1. #include <reg52.h>    //包含单片机寄存器的头文件

  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4.         
  5. #define Self_Define_ISP_Download_Command 0x3D// 与不断电下载有关,与本程序无关,直接复制到自己的程序中
  6. sfr IAP_CONTR = 0xE7;                                             // 与不断电下载有关,与本程序无关,直接复制到自己的程序中


  7. /****************************函数声明****************************************/
  8. void delay(uint z);
  9. void Init_Com(void);// 与不断电下载有关,与本程序无关,直接复制到自己的程序中


  10. /*******************************************************************************
  11. ** 函数名称 : main(void)
  12. ** 函数功能 : 主函数
  13. *******************************************************************************/
  14. void main()
  15. {
  16.         uchar  num,dat1,dat2;          // 相关变量定义
  17.         Init_Com();                          // 与不断电下载有关,与本程序无关,直接复制到自己的程序中
  18.         while(1)
  19.         {
  20.                 dat1 = 0xfe;
  21.                 dat2 = 0x7f;
  22.                 for(num=0; num<7; num++)         // led灯从上往下依次点亮
  23.                 {
  24.                         P1 = dat1;          //初始化赋值
  25.                         dat1 = dat1<<1; //左移一位
  26.                         delay(500);   //延时        
  27.                 }
  28.                 for(num=0; num<7; num++)         // led灯从下往上依次点亮
  29.                 {
  30.                         P1 = dat2;          //初始化赋值
  31.                         dat2 = dat2>>1; //右移一位
  32.                         delay(500);   //延时        
  33.                 }
  34.         }
  35. }

  36. /*******************************************************************************
  37. ** 函数名称 : delay(uint z)
  38. ** 函数功能 : 延时函数
  39. *******************************************************************************/
  40. void delay(uint z)
  41. {
  42.     uchar j;
  43.     for(z;     z>0; z--)
  44.           for(j=200; j>0; j--);
  45. }

  46. /*******************************************************************************
  47. ** 函数名称 : Init_Com(void)        
  48. ** 函数功能 : 串口初始化,晶振11.0592KHz,波特率9600,
  49. *******************************************************************************/
  50. void Init_Com(void)   //与不断电下载有关,与本程序无关,直接复制到自己的程序中
  51. {
  52.      TMOD = 0x20;
  53.      SM0   = 0;
  54.      SM1   = 1;
  55.       REN  = 1;
  56.      TH1   = 0xFd;
  57.      TL1    = 0xFd;
  58.      TR1   = 1;
  59.       EA    = 1;
  60.       ES    = 1;
  61. }

  62. /*******************************************************************************
  63. ** 函数名称 : UART_Interrupt_Receive(void)
  64. ** 函数功能 : 串口中断处理函数
  65. *******************************************************************************/
  66. void UART_Interrupt_Receive(void) interrupt 4  //与不断电下载有关,与本程序无关,直接复制到自己的程序中
  67. {
  68.         unsigned char k = 0;
  69.         unsigned int a,b;
  70.         if(RI == 1)
  71.         {
  72.                 RI = 0;
  73.                 k  = SBUF;
  74.                 if(k == Self_Define_ISP_Download_Command)
  75.                 {
  76.                         for(a=1000; a>0; a--)
  77.                         for(b=100;  b>0; b--);
  78.                         IAP_CONTR = 0x60;
  79.                 }
  80.         }
  81.         else
  82.         {
  83.                 TI = 0;
  84.         }
  85. }
复制代码




Keil代码下载: 不断电程序 流水灯.zip (36.32 KB, 下载次数: 31)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:645485 发表于 2022-5-27 15:59 | 只看该作者
      第一次发帖,有许多地方不尽人意,尤其是添加代码文字的时候,我以为把编辑好的程序复制粘贴进去就可以了,但看到发帖后的效果,有些地方还是可以再调整调整的,后面会改善的。好在代码本身是没有问题的,是经过验证的,大家可以放心参考。这种STC单片机不断电下载程序的方法,我也是参考别人的,我这里还有视频讲解资料,有需要的请留言。
希望可以和大家共同讨论、共同学习、共同进步!



回复

使用道具 举报

板凳
ID:645485 发表于 2022-5-27 16:12 | 只看该作者
还有一点需要补充一下,注意串口初始化函数,晶振11.0592KHz,波特率9600,如果是12MHz晶振,则需要调整TH1,TL1的初值,不然下载基本不会成功的,不相信可以试试!
回复

使用道具 举报

地板
ID:390416 发表于 2022-5-31 09:12 | 只看该作者

这就是自动断电下载。不需要手按,也不需要串口预先复制代码
回复

使用道具 举报

5#
ID:645485 发表于 2022-5-31 11:39 | 只看该作者
本帖最后由 tongguan123 于 2022-5-31 15:47 编辑
人人学会单片机 发表于 2022-5-31 09:12
这就是自动断电下载。不需要手按,也不需要串口预先复制代码

首先非常感谢老大的分享!你提供的这个应该是一个完整的硬件电路,下载程序的时候,由硬件控制给单片机断电和供电,来达到冷启动的目的,应该是这样子吧?而我分享的这个是通过对ISP/IAP命令寄存器ISP_CONTR的操作,ISP_CONTR=0X60,来达到在应用编程。方法和思路不同,但殊途同归,最终的目的都是方便我们操作。本人学习单片机时间不长,如果有哪些地方讲的不对,请指正!





回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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