您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(利用宏晶科技的IAP单片机开发自己的ISP程序 正文
利用宏晶科技的IAP单片机开发自己的ISP程序

利用宏晶科技的IAP单片机开发自己的ISP程序

点击数:7381 次   录入时间:03-04 11:58:30   整理:http://www.55dianzi.com   STC单片机(

完整代码:


09111421224905.rar

/**************************************************************************
    ISP_DEMO监控程序演示
    魏东(tonywei@tom.com) 2009.6.25
    IAP11F62X,频率:22.1184MHz(1T超高速 单片机 )
===========================================================================
IAP11F62X内部含62k存储器(FLASH页面大小为512字节)
可以作为程序存储或数据存储使用,本程序中FLASH安排如下:
    0000-EFFF    用户程序(60k)
    F000-F3FF    监控程序(1k)
    F400-F7FF    数据存储(1k)
**************************************************************************/
#include "STC11Fxx.H"
#include "IAP_11_10.h"
#include <intrins.h>


#define CON_OSC 22118400                    /* 振荡频率(1T超高速) */
#define CON_BPSB 256 - ( CON_OSC / 1 / 32 / 115200 )        /* 115.2kBPS时间常数(T1x12=1) */

unsigned char code *reset_info = "ISP_DEMO_Boot1_2009-6-25";    /* 软件版本 */

/* 变量定义 */
unsigned char idata com_buf[58];    /* 串口公用缓冲区 */
unsigned int nAddress = 0;        /* 编程器编程地址 */
bit con_ok=0;                /* 已经在操作标志 */
unsigned char xdata xbuf[1024];        /* EEPROM数据区缓冲 */

/* 函数定义 */
unsigned char com_getch(void);        /* 串口接收1字符 */
void com_putch(char);            /* 串口发送1字符 */
void com_putinfo(void);            /* 串口发送复位信息 */

/***********************************************************************************/

/* 串口接收1字符 */
unsigned char com_getch(void)
{    unsigned char c;
    
    RI=0;
    while(RI==0) if((WDT_CONTR&0x20)&&con_ok) WDT_CONTR=0x3f;    /* 如果看门狗是开启的且已经在操作,则最长时间喂狗 */
    c=SBUF;
    return c;
}

/* 串口发送1字符 */
void com_putch(char c)
{
    TI=0;
    SBUF=c;
    while(TI==0);
}

/* 串口发送复位信息 */
void com_putinfo(void)
{    unsigned char cr,ci;

    cr=0;
    for(ci=0;ci<24;ci++)
    {    com_putch(reset_info[ci]);
        cr+=reset_info[ci];
    }
    cr = 0 - cr;
    com_putch(cr);        /* 发送效验和 */
}

/***********************************************************************************/

/* 写程序 */
void f_prg(unsigned char cj)
{    unsigned char ci;

    nAddress = ((unsigned int*)com_buf)[1];
    for(ci=0;ci<cj;ci++)
    {    if(nAddress<=FPRG_END) byte_program(nAddress,com_buf[4+ci]);    /* 写程序 */
        nAddress ++;
    }
    if(iap_error) com_putch(5);    /* 返回错误标志 */
    else com_putch(6);        /* 返回正确标志 */
}

/***********************************************************************************/

void main (void)
{    unsigned char cr,ci,cj;
    unsigned int ui;
    unsigned char code * pcadr;
    bit eewid=0;

    EA=0;        /* 禁止中断 */
    ES=0;        /* 禁止串口中断 */
    TR1=0;        /* 停止定时器1 */
    AUXR=0x40;    /* T0x12,T1x12,UART_M0x6,EADCI,ESPI,ELVDI,-,- */
    PCON=0x00;    /* 波特率不加倍 */
    TMOD=0x21;    /* 置T/C1工作方式2定时器,T/C0工作方式1定时器 */
    SCON=0x50;    /* 置串口工作方式1(T1用作串口波特率发生) */
    TH1=CON_BPSB;    /* 波特率时间常数 */
    TL1=CON_BPSB;
    TR1=1;        /* 启动定时器1 */

    pcadr=FDAT_ADR;
    for(ui=0;ui<1024;ui++) xbuf[ui]=pcadr[ui];    /* 读入数据扇区 */

    com_putinfo();        /* 发送复位信息 */
    RI=0;
    ci=0;
  while(1)
  {    iap_error=0;
    if(ci==0x21)
    {    for(ci=0;ci<3;ci++) com_buf[ci]=com_getch();
        if((com_buf[0]==0x5a)&&(com_buf[1]==0)&&(com_buf[2]==0xa6))
        {    con_ok=1;        /* 已经在操作 */
            com_putinfo();        /* 发送复位信息 */
        }
    }
    else if(ci==0x07)    /* 数据包:07H,0EH,包长度,’W’,00H,地址高字节,地址低字节,程序数据,效验和 */
    {    for(ci=0;ci<2;ci++) com_buf[ci]=com_getch();
        if((com_buf[0]==0x0e)&&com_buf[1])
        {    cj = com_buf[1];
            cr = cj;
            for(ci=0;ci<=cj;ci++)

[1] [2] [3] [4]  下一页


本文关键字:单片机  程序  开发  STC单片机(单片机-工控设备 - STC单片机(

《利用宏晶科技的IAP单片机开发自己的ISP程序》相关文章>>>