共2条
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不可写就可以了。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |