这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » STC 还有个建议STC就是应该搞成不需要上电就可以更新程序。

共2条 1/1 1 跳转至

STC 还有个建议STC就是应该搞成不需要上电就可以更新程序。

院士
2006-09-17 18:14:16     打赏
STC 还有个建议STC就是应该搞成不需要上电就可以更新程序。



关键词: 有个     建议     就是     应该     搞成     不需要     上电     就可以    

院士
2006-12-22 22:43:00     打赏
2楼
问     因为产品做好后特别是安装好后,改一次程序很大程度要拆一次机,依旧是麻烦的很! 1: 如果单片机的VCC脚没有重的负载,可以从用来做isp的电脑的USB供电,不需要开目标系统的电源,或者将输出部分的连接断开就可以了。如果单片机的VCC还有比较多的其它负载,那就只能开目标系统电源给单片机供电了,此时为保险起见,要断开输出部分或关闭输出部分电源(如果是分开供电并可独立关断的)。 2: 我觉得对于这个芯片能不能实现类似JTAG的接口?   这样可以在线下载 3: 我现在就是整机烧录,不用拆。在电源想点办法吧。 4: 不需要拆,要把串口接出来 5: 这样是可以,但是还是不爽!重要开关一下电源,再切换一下串口 6: 贡献一段“自定义下载演示程序”,实现 "不停电下载"贡献一段“自定义下载演示程序”

自定义下载的说明,在 STC-ISP.EXE 软件的右下方有
----自定义下载,自定义下载帮助,实现 "不停电下载"

如下贡献一段“自定义下载演示程序”

//STC12C4052, 1T 8051

#include<reg52.h>
#include<intrins.h>

sfr        ISP_CONTR    =    0xE7;

sfr        CCON    =    0xD8;
sfr        CMOD    =    0xD9;
sfr        CL    =    0xE9;
sfr        CH    =    0xF9;
sfr        CCAP0L    =    0xEA;
sfr        CCAP0H    =    0xFA;
sfr        CCAPM0    =    0xDA;
sfr        CCAPM1    =    0xDB;
sbit    CR    =    0xDE;

sbit    MCU_Start_Led    =    P1^7;
//unsigned char self_command_array[4]    =    {0x00,0x00,0x00,0x00};
#define    Self_Define_ISP_Download_Command    0x22
#define    RELOAD_COUNT    0xfb    //18.432MHz,12T,SMOD=0,9600bps

void serial_port_initial();
void send_UART(unsigned char);
void UART_Interrupt_Receive(void);
void soft_reset_to_ISP_Monitor(void);
void delay(void);
void send_PWM(void);

void main(void)
{
    unsigned char i    =    0;
    serial_port_initial();    //串口初始化    
    for(i=0;i<3;i++)
    {
        MCU_Start_Led    =    0;    //顶亮MCU开始工作指示灯
        delay();
        MCU_Start_Led    =    1;    //熄灭MCU开始工作指示灯
        delay();
        MCU_Start_Led    =    0;    //顶亮MCU开始工作指示灯        
    }

    send_UART(0x00);
    send_UART(0x11);
    send_PWM();                //6kHz PWM,  50% duty
    while(1);
    //get_UART();
    
}

void serial_port_initial()
{
    SCON    =    0x50;    //0101,0000 8位可变波特率,无奇偶校验位
    TMOD    =    0x21;    //0011,0001 设置顶时器1为8位自动重装计数器
    TH1        =    RELOAD_COUNT;    //设置定时器1自动重装数
    TL1        =    RELOAD_COUNT;
    TR1        =    1;    //开定时器1
    ES        =    1;    //允许串口中断
    EA        =    1;    //开总中断
}

void send_UART(unsigned char i)
{
    ES    =    0;    //关串口中断
    TI    =    0;    //清零串口发送完成中断请求标志
    SBUF    =    i;
    while(TI ==0);    //等待发送完成
    TI    =    0;    //清零串口发送完成中断请求标志
    ES    =    1;    //允许串口中断
}

void UART_Interrupt_Receive(void) interrupt 4
{
    unsigned char    k    =    0;
    unsigned char    m    =    0;
    if(RI==1)
    {
        RI    =    0;
        k    =    SBUF;
        if(k==Self_Define_ISP_Download_Command)        //是自定义下载命令
        {
            delay();    //延时1秒就足够了
            delay();    //延时1秒就足够了
            //delay();
            //delay();
            soft_reset_to_ISP_Monitor();    //软复位到系统ISP监控区
        }
        send_UART(k);
    }
    else
    {
        TI    =    0;
    }
}

void soft_reset_to_ISP_Monitor(void)
{
    ISP_CONTR    =    0x60;   //0110,0000  软复位到系统ISP监控区
}

//STC12C4052, 1T 8051
void delay(void)
{
    unsigned int j    =    0;
    unsigned int g    =    0;
    for(j=0;j<5;j++)
    {
        for(g=0;g<60000;g++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void send_PWM(void)
{
    CMOD    =    0x00;    // CIDL - - - - CPS1 CPS0 ECF  Setup PCA Timer
                        // CPS1 CPS0 = 00, Fosc/12 is PCA/PWM clock
                        // 18432000/12/256 = 6000
    CL    =    0x00;
    CH    =    0x00;
    CCAP0L    =    0x80;    //Set the initial value same as CCAP0H
    CCAP0H    =    0x80;    //50% Duty Cycle
    CCAPM0    =    0x42;    //0100,0010 Setup PCA module 0 in 8BIT PWM, P3.7    
    CR    =    1;    //启动 PCA/PWM 定时器
}


7: STC89CXX系列可以吗?这个我们公司用的很多了STC89CXX系列可以吗?这个我们公司用的很多了,谢谢! 8: 可以 9: 以后的版本记到改哦!^_^,最好这个代码不能被檫出。   以后的版本记到改哦!^_^,最好这个代码不能被檫出,这个BootLoader最好FLASH不可写就可以了。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]