最近形似考试繁忙啊,英语四级估量又要情何以堪了唉。。。研究一下51单片机(STC89C52)下载程序方面的问题,计划今后用stm32做上位机给51下载程序。尽管还不知道怎样弄出个上位机,不过现在完成了不掉电下载程序功用了,在这儿跟同学们共享一下嘿嘿~~~
下面介绍不掉电载程序的完成进程。先要了解一点基础知识。单片机的复位,下载流等等。。。
首先说一下复位。STC89C52有的复位有两种,一种是上电复位,也便是冷启动,复位后检测串口那里有没有下载流,有的话跑去下载程序那里。还有一种是平常的按键复位,高电平有用那种的,不检测是否有下载流。
下载流是什么?便是串口发送给单片机要烧写程序的信息。STC89C52的下载流是0x7F,接连12个如同(官方发布是大于16 )。假如咱们上位机点下载,它就经过一向发送0x7F给单片机。假如这是有上电复位,就烧写程序进去单片机。
咱们的程序里边便是要用到这些,再介绍一下基本思路。咱们需求单片机正常运转进程中检测是否有下载流(0x7F),假如有下载流就跳进上电复位。只需完成了这个功用,便是完成了不掉电下载程序了~~~检测下载流不难,我这儿运用的是串口中止,中止里边检测是否有下载流信息,有的话就跳进上电复位那里。主要是跳到上电复位,怎样跳?上电复位在哪??
跳转方面,有学过微机的同学就能好了解。只需修正 PC 指针就行了,让它指向上电复位那段程序。还有一个问题是,上电复位那段程序在哪里?这个要找芯片数据手册了。官方发布的是0xEC00, 可是咱们不是直接跳转曩昔的, 而是经过使能IAP, 也便是设置IAP操控寄存器。官方发布的IAP操控寄存器地址是0xE7, 设置成0x60就使能了IAP.来到这儿信任同学们都了解了,能够着手写一下程序了。
把必要的东西弄上。文件包括,宏界说,寄存器声明等等。
#include
#define IAP_ENABLE0x60 //IAP答应
sfr IAP_CNTR = 0xE7; //IAP操控寄存器
void mian(void)
{
UART_Init(); //串口初始化
while(1) //死循环,等候串口中止
{
}
}
void UART_Init()
{
TMOD|=0x20; //定时器1供给串口波特率
TH1=0xf3; //波特率2400, 晶振为12M
TL1=0xf3;//波特率2400, 晶振为12M
EA=1; //翻开总中止
TR1=1; //定时器1开端计数
ES=1; //答应串口中止
SCON=0x50; //方法0, 答应串口接纳
}
void UART_IRQHandler(void)interrupt 4
{
unsigned char rev; //暂时变量, 保存SBUF
if(RI) //查看是否接纳到数据
{
RI = 0; //软件铲除承受标志位
rev = SBUF; //读取承受缓冲区
if(0x7F == rev) //判别是否为下载流信息
{
IAP_CNTR=IAP_ENABLE; //答应IAP, 也便是直接进入下载程序
}
}
}
(编译经过,下载程序,测验能否在线下载。成功!!!!!!!!!!!!那是感动啊~~~~
)
有了上面程序的话,今后下载程序就直接翻开上位机,也便是STC_ISP那个软件,挑选好对应的.hex文件,点击下载,就开端下载程序了。今后再也不必先关
电源,再上电了下载,那是便利啊(事实证明,我现已对频频对电源开关,感觉十分繁琐了)。多年来的愿望啊(尽管触摸51,形似不到1年。。。),让我从前一度十分吃醋AT的单片机,由于它支撑在线下载程序。。。
成功了有点小激动,特别发一下新浪博客,共享给有需求的同学们嘿嘿。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/257041.html