gps测速软件中文版:教你STC单片机免下电加载程序的方法,送程序

来源:百度文库 编辑:偶看新闻 时间:2024/05/10 06:45:13

教你STC单片机免下电加载程序的方法,送程序

程序/*******************************************
应用说明:STC单片机具有在线加载升级程序程序功能,

但每次加载均需要冷复位(完全下电),在调试程序时仍有些不便。
我的学习板电源按钮就是因为两千多次反复的加载调试程序,现在已经
有接触不良问题了^_^,为此研究了STC晶片手册关于ISP/IAP功能应用写成

以下头文件.在其他程序想实现免下电升级程序,则:

在源程序开始时包含
#include
和主函数中调用
AIP_reset_to_ISP();
即可实现该功能
*******************************************/





  
//#include  
#include
#define Self_Define_ISP_Download_Command  0x22  //自定义下载命令
sfr  ISP_CONTR=0xe7;
void  delay(void);
void  AIP_reset_to_ISP(void);


     
void serial_port_ini()
{    TMOD=0x20;           //定时器1--方式2;  定时器0--方式1(16位计数);
/*  GATE C/T M1 M0 GATE C/T M1 M0
      0   0   1  0   0   0   0  1
      |   |   |  |   |   |   |  +----方式选择
     |   |   |  |   |   |   +-------方式选择
   |   |   |  |   |   +-----------定时器0或计数器0选择位 清零时用作定时器功能 置位时用作计数器功能
   |   |   |  |   +---------------置位时为门控位
   |   |   |  +-------------------方式选择
   |   |   +----------------------方式选择
   |   +--------------------------定时器1或计数器1选择位 清零时用作定时器功能 置位时用作计数器功能
   +------------------------------置位时为门控位*/
    IE=0x12;             //中断控制设置,串口  T1(波特率发生器),T0定时中断
/*  EA -  -   ES ET1 EX1 ET0 EX0  
     0 0  0   1  0   0   1   0
     | |  |   |  |   |   |   +-------外部中断0 使能。
     | |  |   |  |   |   +-----------定时器0 溢出中断使能。
  | |  |   |  |   +---------------外部中断1 使能。
  | |  |   |  +-------------------定时器1 溢出中断使能。
  | |  |   +----------------------串口中断使能。
  | |  +--------------------------定时器2 中断使能。
  | +-----------------------------
  +-------------------------------中断使能位:EA=1,允许中断服务;EA=0,禁能中断服务。*/
    PCON=0x80;           //电源控制
/*  SMOD SMODO - POF GF1 GF0 PD IDL
      1    0   0  0   0   0   0  0
   |    |   |  |   |   |   |  +---
   |    |   |  |   |   |   +------
   |    |   |  |   |   +----------
   |    |   |  |   +--------------
   |    |   |  +------------------
   |    |   +---------------------
   |    +-------------------------
   +------------------------------*/
    SCON=0x50;           //方式1
/*  SM0/FE SM1 SM2 REN TB8 RB8 TI RI
       0    1   0   1   0   0   0  0
    |    |   |   |   |   |   |  +-接收中断标志
    |    |   |   |   |   |   +----发送中断标志
    |    |   |   |   |   +--------模式2 和3 中接收的第9 位数据,在模式1 中(SM2 必须为0),RB8 是接收到的停止位。在模式0 中,RB8 未定义。
    |    |   |   |   +------------模式2 和3 中将要发送的第9 位数据,可以根据需要由软件置位或清零。
    |    |   |   +----------------使能串行接收
    |    |   +--------------------使能模式2 和3 中的多机通信功能。
    |    +------------------------和SM0 定义串行口操作模式
    +-----------------------------该位的用途由PCON 寄存器中的SMOD0 决定。*/
    TL1=0xFa;//0xF4;            //12MHZ晶振,波特率为4800 0xf3   4800  
    TH1=0xFa;//0xF4;            //11.0592MHZ晶振,波特率为4800 0xf4   9600 0xfa   19200 0xfd
    TR1=1;               //启动定时

// TH0=0x4c;
// TL0=0x00;       // 11.0592MHZ晶振,th0=0x4c,th0=0x00;11.0592MHZ晶振,th0=0x3c,th0=0xb0;中断周期50ms;
// TR0=1;


ES=1;
    EA=1;
}


void UART_Interrupt_Receive(void) interrupt 4
{
    unsigned char    k ;

    if(RI==1)
    {
        RI    =    0;
        k    =    SBUF;

        if(k==Self_Define_ISP_Download_Command)        //是自定义下载命令
        {
           // delay();    //延时1秒就足够了
         
             ISP_CONTR    =    0x60;   //0110,0000 软复位到系统ISP监控区
  
        }
      
    }
    else
    {
        TI    =    0;
    }
}

/********************************************
在路免下点程序加载对外应用接口函数
说明:在其他函数或程序中调用很函数
    AIP_reset_to_ISP();
即可达到系统软件复位,并切换到STC晶片监控程序(ISP)运行区,
若ISP接收的数据合法(有几十的字节)则刷新IAP区域,升级用户程序
*********************************************/

void  AIP_reset_to_ISP(void)
{
  serial_port_ini();

  
}




使用方法介绍:在源文件(你如说你自己写的“流水灯”程序)中添加引用上述头文件,然后编译得到
目标代码。
先下图设置STC_ISP软件,然后第一次加载仍然按以往下电再上电的方法加载,第二次,第三次就可以直接

按发送,就可以直接下载了,无须下电了.
好处:对某程序反复调试过程中,爱好者就不需要修改一次,下电——上电再加载这样频繁的上下电了.
哈哈哈,我也是个菜鸟,朋友们可别说我懒啊.^_^