stc单片机“全自动下载”(程序版)

来源:互联网 发布:成都淘宝运营公司 编辑:程序博客网 时间:2024/05/16 11:04

STC单片机完全自动下载”,无需再手动重新上电启动!(程序版)

修改:

2014/03/21  整理上传

2014/10/30  修改错误:在串口函数中有UartInit(),但是在主函数中调用了InitUart(),书写错误导致无法编译通过


对于stc单片机下载程序时,每次都需要冷启动,即需要给开发板断电然后重新上电,才能供完成下载,这里介绍用过的两种“全自动下载”方式:

(1)使用STC自动下载器,此模块在我们点击STC-ISP的“下载”时,会自动完成断电,上电,下载功能。需要购买。

(2)软件复位法,即IAP下载方式(本文中的重点,注意有的芯片无此功能,需要较新出来的芯片,这里以STC12C5A60S2为例


步骤如下:

1.添加stc公司的mcukeil软件

(

这一步不是必须的,但进行了这一步之后,keil软件就会有stc公司的mcu的头文件,可以直接调用了,但如果没有这一步在主函数中头文件就要注意,对于IAP_CONTR的特殊功能寄存器就不能直接调用,这时候就必须用户自己定义:

sft IAP_CONTR=0xc7

)

这里以目前最新 STC-ISP下载软件为例:

选择keil安装目录xxxxxxxxxxx\keil , 点击确定,就会出现:

(2)打开keil,新建工程后,出现MCU选择:

选择STC MCU Database后,选择STC12C5A60S2,后创建并加载.c文件,设置生成hex文件:

技巧:为了防止意外操作导致stcmcu头文件被修改,设置其为“只读”模式,这时候工程文件就会有如下的“钥匙”标记

(3)程序代码如下:

主函数0000.c:

#include "./STC/stc12c5a60s2.h"#include "uart.h"void main(void){UartInit();P1=0x01;/*第一次,leds*/while(1);}

 

uart.h文件:

#ifndef __UART_H__#define __UART_H__#define selfDownLodCmd 0x01extern void UartInit(void) ;#endif 

 

uart.c文件:

#include "./stc/stc12c5a60s2.h"  #include "uart.h"    void UartInit(void)  {  IP   |= 0x10 ;/*建议设置串口中断为高优先级*/    SCON |= 0x50 ;      TMOD |= 0X20 ;      TH1  =  0xfd ;  //11.0592MHZ , 9600kps      TL1  =  0xfd ;      TR1= 1 ;      ES = 1 ;      EA = 1 ;  }    void UART_IRQ(void) interrupt 4  using 3{      unsigned char k ;        if(RI)      {          RI=0;          k=SBUF;          if(k==selfDownLodCmd)          {              IAP_CONTR |=0x60 ;          }          else          { /*其他操作,等待补充*/                        }      }      else      {          TI =0;          /*其他操作,等待补充*/     }  }  



(4)这里第一次先手动启动下载一次,然后发现led0被点亮。保持上电状态

(5)修改下载设置:

(6)自动下载实验准备:修改main函数中的:

P1=0x01;/*第一次,leds*/

修改为:

P1=0x0f;

(7)编译程序后,等待3s,发现led灯变化了,说明STC-ISP软件已经自动下载了程序,而没有经过手动的重新上电。并且,以上的程序,只需要手动下载一次,以后无论你下载多少次都不用手动去启动开关下载了(但是main函数中的UartInit不能删除)。

3 0