共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |