首页 > 应用 > 单片机应用
[导读]stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。

 stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。

本文引用地址: http://www.21ic.com/app/mcu/201701/700195.htm

下面介绍一种不需断电就能下载程序的方法,在程序调试时比较方便。

基本原理:

stc单片机有专用的复位寄存器,通过对该寄存器写入不同的数值可以实现单片机热启动复位。

寄存器功能如下图所示:

 

STC.jpg

 

由上图可以看出只要满足某个条件,向ISP_CONTR写入0x60,就可以实现从ISP监控区软启动启动

某个条件设置为:当串口接收到0xaa数据时,单片机执行ISP_CONTR=0x60; 指令,从ISP监控区软启动启动。

演示程序如下:

//*************************STC12C5410AD软启动演示**************************

//

//收到0xaa,从ISP监控区软启动,利用该特性,可以实现stc单片机不断电下载

//收到0x55,从用户程序区启动

//2010年3月13日21:58:49

//*************************************************************************

#include

uint c;

//*************** 函数定义 ******************

void delay1ms(unsigned int j);

void senddata(uchar dc);

//*************** 主程序 ********************

void main(void)

{

///******************

TMOD|=0x20;

SCON=0x50;

TH1=0xfd; //12T时钟9600bps

TL1=0xfd;

TR1=1;

ES=1;

EA=1;

AUXR=AUXR|0x40; //定时器1使用1T时钟 9600*12=115200bps

///******************

delay1ms(30000);

for(c=0;c<256;c++)

{

senddata(c);

delay1ms(200);

}

while(1)

{

}

}

//***************************发送数据**************************

void senddata(uchar dc)

{

SBUF=dc;

while(!TI); //当TI=0时,发送未结束,循环等待

TI=0; //当TI=1时,发送结束,用软件将TI清零

}

void uart(void) interrupt 4

{

uchar cdd;

if(RI)

{

RI=0;

cdd=SBUF;

if(cdd==0xaa)

{

ISP_CONTR=0x60; //软复位,从ISP监控区启动

}

else if(cdd==0x55)

{

ISP_CONTR=0x20; //软复位,从用户程序区启动

}

else

{

senddata(cdd);

}

}

else

{

TI=0;

}

}

//*************************延时 n*1ms********************

void delay1ms(unsigned int j)

{

unsigned int i;

for(;j>0;j--)

{ for(i=0;i<124;i++)

{;}

}

}

在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序

///******************

TMOD|=0x20;

SCON=0x50;

TH1=0xfd; //12T时钟9600bps

TL1=0xfd;

TR1=1;

ES=1;

EA=1;

AUXR=AUXR|0x40; //定时器1使用1T时钟 9600*12=115200bps

///******************

void uart(void) interrupt 4

{

uchar cdd;

if(RI)

{

RI=0;

cdd=SBUF;

if(cdd==0xaa)

{

ISP_CONTR=0x60; //软复位,从ISP监控区启动

}

else if(cdd==0x55)

{

ISP_CONTR=0x20; //软复位,从用户程序区启动

}

else

{

senddata(cdd);

}

}

else

{

TI=0;

}

}

在上演示程序中,利用单片机串口收到某个有效数据后,执行从isp引导区软启动的命令(ISP_CONTR=0x60;),实现程序不断电下载。但该方法为实现程序不断电下载,占用了一些单片机资源——串口、中断等,实际应用中有一些不便。下面介绍另一种程序不断电下载方法:

考虑到单片机开发板在设计时一般都留有一个手动复位按钮,能否利用该按钮实现程序不断电下载呢?答案是肯定的!!!!!

单片机上电复位时,POF=1;单片机手动复位时,POF=0

单片机上电运行时对POF位进行判断,如果POF位=0,将POF位置1,让单片机从isp引导区软复位。

如果POF位=1,将POF位清0。

将实现以上功能的代码加入到你的程序中,当需要下载程序时,按下复位按钮,此时POF位=0,单片机再次从isp引导区软复位,从而实现程序下载。

该方法只需在用户程序中嵌入一段判断POF标志位的代码就能实现程序不断电下载,无需占用任何单片机内部资源。

演示程序:

//*******************stc单片机不断电下载程序******************

#include

sfr ISP_CONTR=0xe7; 软复位寄存器声明

void main(void)

{

//////////////将这段代码嵌入到程序中////////////////

if((PCON&0x10)==0) //如果POF位=0

{

PCON=PCON|0x10; //将POF位置1

ISP_CONTR=0x60; //软复位,从ISP监控区启动

}

else

{

PCON=PCON&0xef; //将POF位清零

}

//////////////////////////////////////////////

while(1)

{

`

` 用户程序

`

}

}

操作说明:

1 将演示程序中的红色代码复制到您的程序中,首次使用时应利用断电下载的方式将含有红色代码的程序下载到单片机中

2 将hex文件载入STC单片机isp软件,点击下载按钮

3 按下单片机开发板上复位键,单片机进行is程序下载

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

换一批

延伸阅读

[单片机应用] 单片机I/O口管脚内部结构

单片机I/O口管脚内部结构

学习ARM嵌入式的时候,发现自己对以前学过的数模器件的知识遗忘了不少,按照我的进度本来应该继续学习ARM微处理器控制的课程,但想着后来势必还会遇到相同的问题所以就准备中断一下,杀回来把汇编和一些电路知识再总......

关键字:单片机 I O口管脚 内部结构

[单片机应用] 关于单片机串口发送和接收的问题

关于单片机串口发送和接收的问题

串口初始化过程:    1、确定T/C1的工作方式--TMOD    2、设置T/C初始值----------------------------TH1、TH2    3、启动T/C-----------------------------......

关键字:单片机 串口 发送和接收

[单片机应用] 上位机控制单片机LED

上位机控制单片机LED

整了一天程序,写了个上位机程序和单片机程序。总结下。。。上位机部分:相关参考资料:http://wenku.baidu.com/view/5ea8670403d8ce2f00662322.html1.先添加各控件,添加后的对话框如下图:2.......

关键字:上位机 控制单片机 LED

[单片机应用] 用单片机做一个计算器

用单片机做一个计算器

硬件电路程序#include T89X51.H>#define DIN P1_0#define CLK P1_2#define LOAD P1_1unsigned char key_h,key_l,key_code;unsigned ......

关键字:单片机 计算器

[单片机应用] 串行口异步通信单片机程序设计实例

串行口异步通信单片机程序设计实例

org 0000HAJMP STARTORG 30HSTART:mov SP,#5fh ;mov TMOD,#20h ;T1: 工作模式2mov PCON,#80h ;SMOD=1mov TH1,#0FDH ;初始化波特率(参见表)mov ......

关键字:串行口 异步通信 单片机

[单片机应用] AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口SPI—02

AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口SPI—02

1)那就是在之前的介绍中说过,在说一遍~~主机和从机的两个移位寄存器可以被认为是一个公开的16位环形移位寄存器,当数据从主机移向从机时,同时从机饿数据也向相反的放向移向主机。这就意味着在一个以为周期内,主机......

关键字:AVR单片机 ATMEGA16 同步串行接口 SPI

[单片机应用] 单片机轻松入门之三:蜂鸣器

单片机轻松入门之三:蜂鸣器

单片机轻松入门之三蜂鸣器该电路较简单,用PNP型三极管驱动蜂鸣器,当P3.7为低电平时,PN结正向偏置,三极管导通,蜂鸣器发声。程序如下:#include#define uchar unsigned charsbit sounder=P3^......

关键字:单片机 蜂鸣器

[半导体] 借进口禁令垄断苹果基带芯片打压英特尔 高通遭消费者起诉

借进口禁令垄断苹果基带芯片打压英特尔 高通遭消费者起诉

6月29日据国外媒体报道,本周四,部分苹果消费者将高通告上法庭,认为其不应利用进口禁令作为打压英特尔的手段,阻止后者与自己竞争使用在苹果iPhone上的基带芯片订单。在消费者发起的这场集体诉讼中,消费者指控高通......

关键字:苹果 基带芯片 英特尔 高通

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客