共4条
1/1 1 跳转至页
STC 还有个建议STC就是应该搞成不需要上电就可以更新程序。

问
因为产品做好后特别是安装好后,改一次程序很大程度要拆一次机,依旧是麻烦的很!
答 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不可写就可以了。
自定义下载的说明,在 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不可写就可以了。
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 |