Skip to content

Instantly share code, notes, and snippets.

@zerog2k
Last active January 13, 2024 23:16
Show Gist options
  • Save zerog2k/0a8182562d071fe0cc9f to your computer and use it in GitHub Desktop.
Save zerog2k/0a8182562d071fe0cc9f to your computer and use it in GitHub Desktop.

Revisions

  1. zerog2k revised this gist Nov 18, 2015. 1 changed file with 49 additions and 49 deletions.
    98 changes: 49 additions & 49 deletions stc15f_prog.c
    Original file line number Diff line number Diff line change
    @@ -1,27 +1,27 @@
    /*---------------------------------------------------------------------*/
    /* --- STC MCU Limited ------------------------------------------------*/
    /* --- 使用主芯片对从芯片(限STC15系列)进行ISP下载举例 -----------------*/
    /* --- To be downloaded from the ISP chip (limited STC15 series), for example using the main chip -----------------*/
    /* --- Mobile: (86)13922805190 ----------------------------------------*/
    /* --- Fax: 86-755-82905966 -------------------------------------------*/
    /* --- Tel: 86-755-82948412 -------------------------------------------*/
    /* --- Web: www.STCMCU.com --------------------------------------------*/
    /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
    /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
    /* If you want to use this code in the program, in the program, using the information and procedures specified macro crystal technology */
    /* If you want to quote this code in the article, please indicate in the article the use of information technology and procedures Wang Jing */
    /*---------------------------------------------------------------------*/

    //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
    //假定测试芯片的工作频率为11.0592MHz
    // This sample in the Keil development environment select the Intel 8058 chip models compiled
    // Assumed test chip operating frequency is 11.0592MHz

    //注意:使用本代码对STC15系列的单片机进行下载时,必须要执行了Download代码之后,
    //才能给目标芯片上电,否则目标芯片将无法正确下载
    // Note: When using this code STC15 series of microcontrollers for download must be executed after Download code
    // In order to power on the target chip, otherwise the chip will not be able to download the correct target

    #include "reg51.h"

    typedef bit BOOL;
    typedef unsigned char BYTE;
    typedef unsigned short WORD;

    //宏、常量定义
    // Macro, constant definitions
    #define FALSE 0
    #define TRUE 1
    #define LOBYTE(w) ((BYTE)(WORD)(w))
    @@ -30,47 +30,47 @@ typedef unsigned short WORD;
    #define MINBAUD 2400L
    #define MAXBAUD 115200L

    #define FOSC 11059200L //主控芯片工作频率
    #define BR(n) (65536 - FOSC/4/(n)) //主控芯片串口波特率计算公式
    #define T1MS (65536 - FOSC/1000) //主控芯片1ms定时初值
    #define FOSC 11059200L // Master chip operating frequency
    #define BR(n) (65536 - FOSC/4/(n)) //Master chip baud rate calculation formula
    #define T1MS (65536 - FOSC/1000) //Initial master chip 1ms Timing

    //#define FUSER 11059200L //STC15系列目标芯片工作频率
    //#define FUSER 12000000L //STC15系列目标芯片工作频率
    //#define FUSER 18432000L //STC15系列目标芯片工作频率
    //#define FUSER 22118400L //STC15系列目标芯片工作频率
    #define FUSER 24000000L //STC15系列目标芯片工作频率
    #define RL(n) (65536 - FUSER/4/(n)) //STC15系列目标芯片串口波特率计算公式
    #define FUSER 24000000L //STC15 series target chip operating frequency
    #define RL(n) (65536 - FUSER/4/(n)) //STC15 series target chip baud rate calculation formula

    //SFR定义
    //SFR
    sfr AUXR = 0x8e;

    //变量定义
    BOOL f1ms; //1ms标志位
    BOOL UartBusy; //串口发送忙标志位
    BOOL UartReceived; //串口数据接收完成标志位
    BYTE UartRecvStep; //串口数据接收控制
    BYTE TimeOut; //串口通讯超时计数器
    BYTE xdata TxBuffer[256]; //串口数据发送缓冲区
    BYTE xdata RxBuffer[256]; //串口数据接收缓冲区
    char code DEMO[256]; //演示代码数据
    //variables
    BOOL f1ms; //1ms flag
    BOOL UartBusy; //Serial transmit busy flag
    BOOL UartReceived; //Serial data received flag
    BYTE UartRecvStep; //Serial data reception control
    BYTE TimeOut; //Serial communication timeout counter
    BYTE xdata TxBuffer[256]; //Serial data transmit buffer
    BYTE xdata RxBuffer[256]; //Serial data receive buffer
    char code DEMO[256]; //Demo code data

    //函数声明
    //Function declaration
    void Initial(void);
    void DelayXms(WORD x);
    BYTE UartSend(BYTE dat);
    void CommInit(void);
    void CommSend(BYTE size);
    BOOL Download(BYTE *pdat, long size);

    //主函数入口
    //Main function entry
    void main(void)
    {
    while (1)
    {
    Initial();
    if (Download(DEMO, 0x0100))
    {
    //下载成功
    //download successful
    P3 = 0xff;
    DelayXms(500);
    P3 = 0x00;
    @@ -87,7 +87,7 @@ void main(void)
    }
    else
    {
    //下载失败
    //download failed
    P3 = 0xff;
    DelayXms(500);
    P3 = 0xf3;
    @@ -105,7 +105,7 @@ void main(void)
    }
    }

    //1ms定时器中断服务程序
    //1ms Timer interrupt service routine
    void tm0(void) interrupt 1 using 1
    {
    static BYTE Counter100;
    @@ -118,7 +118,7 @@ void tm0(void) interrupt 1 using 1
    }
    }

    //串口中断服务程序
    //The serial interrupt service routine
    void uart(void) interrupt 4 using 1
    {
    static WORD RecvSum;
    @@ -184,12 +184,12 @@ void uart(void) interrupt 4 using 1
    }
    }

    //系统初始化
    //system initialization
    void Initial(void)
    {
    UartBusy = FALSE;

    SCON = 0xd0; //串口数据模式必须为8位数据+1位偶检验
    SCON = 0xd0; //Serial data pattern must be 8-bit data + 1-bit even parity
    AUXR = 0xc0;
    TMOD = 0x00;
    TH0 = HIBYTE(T1MS);
    @@ -203,7 +203,7 @@ void Initial(void)
    EA = 1;
    }

    //Xms延时程序
    //Xms Delay program
    void DelayXms(WORD x)
    {
    do
    @@ -213,7 +213,7 @@ void DelayXms(WORD x)
    } while (x--);
    }

    //串口数据发送程序
    //Serial data transmission program
    BYTE UartSend(BYTE dat)
    {
    while (UartBusy);
    @@ -226,15 +226,15 @@ BYTE UartSend(BYTE dat)
    return dat;
    }

    //串口通讯初始化
    //Serial communication initialization
    void CommInit(void)
    {
    UartRecvStep = 0;
    TimeOut = 20;
    UartReceived = FALSE;
    }

    //发送串口通讯数据包
    //Send serial communication data packet
    void CommSend(BYTE size)
    {
    WORD sum;
    @@ -258,7 +258,7 @@ void CommSend(BYTE size)
    CommInit();
    }

    //对STC15系列的芯片进行数据下载程序
    //STC15 series of chips for data download
    BOOL Download(BYTE *pdat, long size)
    {
    BYTE arg;
    @@ -267,7 +267,7 @@ BOOL Download(BYTE *pdat, long size)
    BYTE cnt;
    WORD addr;

    //握手
    //handshake
    CommInit();
    while (1)
    {
    @@ -285,7 +285,7 @@ BOOL Download(BYTE *pdat, long size)
    }
    }

    //设置参数(设置从芯片使用最高的波特率以及擦除等待时间等参数)
    //Set parameters (set from the chip using the highest baud rate and other parameters erasing wait time)
    TxBuffer[0] = 0x01;
    TxBuffer[1] = arg;
    TxBuffer[2] = 0x40;
    @@ -305,7 +305,7 @@ BOOL Download(BYTE *pdat, long size)
    }
    }

    //准备
    //prepare
    TH1 = HIBYTE(BR(MAXBAUD));
    TL1 = LOBYTE(BR(MAXBAUD));
    DelayXms(10);
    @@ -332,7 +332,7 @@ BOOL Download(BYTE *pdat, long size)
    }
    }

    //擦除
    //Erase
    DelayXms(10);
    TxBuffer[0] = 0x03;
    TxBuffer[1] = 0x00;
    @@ -358,7 +358,7 @@ BOOL Download(BYTE *pdat, long size)
    }
    }

    //写用户代码
    //Write user code
    DelayXms(10);
    addr = 0;
    TxBuffer[0] = 0x22;
    @@ -397,12 +397,12 @@ BOOL Download(BYTE *pdat, long size)
    TxBuffer[0] = 0x02;
    }

    ////写硬件选项
    ////如果不需要修改硬件选项,此步骤可直接跳过,此时所有的硬件选项
    ////都维持不变,MCU的频率为上一次所调节频率
    ////若写硬件选项,MCU的内部IRC频率将被固定写为24M,
    ////建议:第一次使用STC-ISP下载软件将从芯片的硬件选项设置好
    //// 以后再使用主芯片对从芯片下载程序时不写硬件选项
    //// Write hardware options
    //// If you do not modify hardware options can skip this step at this time all the hardware options
    //// Remained unchanged, MCU frequency by adjusting the frequency to the last
    //// If the write hardware options, MCU internal IRC frequency will be fixed written as 24M,
    //// Suggestion: Good first use STC-ISP download software from the chip hardware option settings
    //// Later using the main chip for chip program is downloaded from the hardware option does not write
    //DelayXms(10);
    //for (cnt=0; cnt<128; cnt++)
    //{
    @@ -443,8 +443,8 @@ BOOL Download(BYTE *pdat, long size)
    // }
    //}

    //下载完成
    return TRUE;
    // The download is complete
    return TRUE;
    }

    char code DEMO[256] =
  2. zerog2k renamed this gist Nov 18, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. zerog2k created this gist Nov 18, 2015.
    484 changes: 484 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,484 @@
    /*---------------------------------------------------------------------*/
    /* --- STC MCU Limited ------------------------------------------------*/
    /* --- 使用主芯片对从芯片(限STC15系列)进行ISP下载举例 -----------------*/
    /* --- Mobile: (86)13922805190 ----------------------------------------*/
    /* --- Fax: 86-755-82905966 -------------------------------------------*/
    /* --- Tel: 86-755-82948412 -------------------------------------------*/
    /* --- Web: www.STCMCU.com --------------------------------------------*/
    /* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
    /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序 */
    /*---------------------------------------------------------------------*/

    //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
    //假定测试芯片的工作频率为11.0592MHz

    //注意:使用本代码对STC15系列的单片机进行下载时,必须要执行了Download代码之后,
    //才能给目标芯片上电,否则目标芯片将无法正确下载

    #include "reg51.h"

    typedef bit BOOL;
    typedef unsigned char BYTE;
    typedef unsigned short WORD;

    //宏、常量定义
    #define FALSE 0
    #define TRUE 1
    #define LOBYTE(w) ((BYTE)(WORD)(w))
    #define HIBYTE(w) ((BYTE)((WORD)(w) >> 8))

    #define MINBAUD 2400L
    #define MAXBAUD 115200L

    #define FOSC 11059200L //主控芯片工作频率
    #define BR(n) (65536 - FOSC/4/(n)) //主控芯片串口波特率计算公式
    #define T1MS (65536 - FOSC/1000) //主控芯片1ms定时初值

    //#define FUSER 11059200L //STC15系列目标芯片工作频率
    //#define FUSER 12000000L //STC15系列目标芯片工作频率
    //#define FUSER 18432000L //STC15系列目标芯片工作频率
    //#define FUSER 22118400L //STC15系列目标芯片工作频率
    #define FUSER 24000000L //STC15系列目标芯片工作频率
    #define RL(n) (65536 - FUSER/4/(n)) //STC15系列目标芯片串口波特率计算公式

    //SFR定义
    sfr AUXR = 0x8e;

    //变量定义
    BOOL f1ms; //1ms标志位
    BOOL UartBusy; //串口发送忙标志位
    BOOL UartReceived; //串口数据接收完成标志位
    BYTE UartRecvStep; //串口数据接收控制
    BYTE TimeOut; //串口通讯超时计数器
    BYTE xdata TxBuffer[256]; //串口数据发送缓冲区
    BYTE xdata RxBuffer[256]; //串口数据接收缓冲区
    char code DEMO[256]; //演示代码数据

    //函数声明
    void Initial(void);
    void DelayXms(WORD x);
    BYTE UartSend(BYTE dat);
    void CommInit(void);
    void CommSend(BYTE size);
    BOOL Download(BYTE *pdat, long size);

    //主函数入口
    void main(void)
    {
    while (1)
    {
    Initial();
    if (Download(DEMO, 0x0100))
    {
    //下载成功
    P3 = 0xff;
    DelayXms(500);
    P3 = 0x00;
    DelayXms(500);
    P3 = 0xff;
    DelayXms(500);
    P3 = 0x00;
    DelayXms(500);
    P3 = 0xff;
    DelayXms(500);
    P3 = 0x00;
    DelayXms(500);
    P3 = 0xff;
    }
    else
    {
    //下载失败
    P3 = 0xff;
    DelayXms(500);
    P3 = 0xf3;
    DelayXms(500);
    P3 = 0xff;
    DelayXms(500);
    P3 = 0xf3;
    DelayXms(500);
    P3 = 0xff;
    DelayXms(500);
    P3 = 0xf3;
    DelayXms(500);
    P3 = 0xff;
    }
    }
    }

    //1ms定时器中断服务程序
    void tm0(void) interrupt 1 using 1
    {
    static BYTE Counter100;

    f1ms = TRUE;
    if (Counter100-- == 0)
    {
    Counter100 = 100;
    if (TimeOut) TimeOut--;
    }
    }

    //串口中断服务程序
    void uart(void) interrupt 4 using 1
    {
    static WORD RecvSum;
    static BYTE RecvIndex;
    static BYTE RecvCount;
    BYTE dat;

    if (TI)
    {
    TI = 0;
    UartBusy = FALSE;
    }

    if (RI)
    {
    RI = 0;
    dat = SBUF;
    switch (UartRecvStep)
    {
    case 1:
    if (dat != 0xb9) goto L_CheckFirst;
    UartRecvStep++;
    break;
    case 2:
    if (dat != 0x68) goto L_CheckFirst;
    UartRecvStep++;
    break;
    case 3:
    if (dat != 0x00) goto L_CheckFirst;
    UartRecvStep++;
    break;
    case 4:
    RecvSum = 0x68 + dat;
    RecvCount = dat - 6;
    RecvIndex = 0;
    UartRecvStep++;
    break;
    case 5:
    RecvSum += dat;
    RxBuffer[RecvIndex++] = dat;
    if (RecvIndex == RecvCount) UartRecvStep++;
    break;
    case 6:
    if (dat != HIBYTE(RecvSum)) goto L_CheckFirst;
    UartRecvStep++;
    break;
    case 7:
    if (dat != LOBYTE(RecvSum)) goto L_CheckFirst;
    UartRecvStep++;
    break;
    case 8:
    if (dat != 0x16) goto L_CheckFirst;
    UartReceived = TRUE;
    UartRecvStep++;
    break;
    L_CheckFirst:
    case 0:
    default:
    CommInit();
    UartRecvStep = (dat == 0x46 ? 1 : 0);
    break;
    }
    }
    }

    //系统初始化
    void Initial(void)
    {
    UartBusy = FALSE;

    SCON = 0xd0; //串口数据模式必须为8位数据+1位偶检验
    AUXR = 0xc0;
    TMOD = 0x00;
    TH0 = HIBYTE(T1MS);
    TL0 = LOBYTE(T1MS);
    TR0 = 1;
    TH1 = HIBYTE(BR(MINBAUD));
    TL1 = LOBYTE(BR(MINBAUD));
    TR1 = 1;
    ET0 = 1;
    ES = 1;
    EA = 1;
    }

    //Xms延时程序
    void DelayXms(WORD x)
    {
    do
    {
    f1ms = FALSE;
    while (!f1ms);
    } while (x--);
    }

    //串口数据发送程序
    BYTE UartSend(BYTE dat)
    {
    while (UartBusy);

    UartBusy = TRUE;
    ACC = dat;
    TB8 = P;
    SBUF = ACC;

    return dat;
    }

    //串口通讯初始化
    void CommInit(void)
    {
    UartRecvStep = 0;
    TimeOut = 20;
    UartReceived = FALSE;
    }

    //发送串口通讯数据包
    void CommSend(BYTE size)
    {
    WORD sum;
    BYTE i;

    UartSend(0x46);
    UartSend(0xb9);
    UartSend(0x6a);
    UartSend(0x00);
    sum = size + 6 + 0x6a;
    UartSend(size + 6);
    for (i=0; i<size; i++)
    {
    sum += UartSend(TxBuffer[i]);
    }
    UartSend(HIBYTE(sum));
    UartSend(LOBYTE(sum));
    UartSend(0x16);
    while (UartBusy);

    CommInit();
    }

    //对STC15系列的芯片进行数据下载程序
    BOOL Download(BYTE *pdat, long size)
    {
    BYTE arg;
    BYTE fwver;
    BYTE offset;
    BYTE cnt;
    WORD addr;

    //握手
    CommInit();
    while (1)
    {
    if (UartRecvStep == 0)
    {
    UartSend(0x7f);
    DelayXms(10);
    }
    if (UartReceived)
    {
    arg = RxBuffer[4];
    fwver = RxBuffer[17];
    if (RxBuffer[0] == 0x50) break;
    return FALSE;
    }
    }

    //设置参数(设置从芯片使用最高的波特率以及擦除等待时间等参数)
    TxBuffer[0] = 0x01;
    TxBuffer[1] = arg;
    TxBuffer[2] = 0x40;
    TxBuffer[3] = HIBYTE(RL(MAXBAUD));
    TxBuffer[4] = LOBYTE(RL(MAXBAUD));
    TxBuffer[5] = 0x00;
    TxBuffer[6] = 0x00;
    TxBuffer[7] = 0xc3;
    CommSend(8);
    while (1)
    {
    if (TimeOut == 0) return FALSE;
    if (UartReceived)
    {
    if (RxBuffer[0] == 0x01) break;
    return FALSE;
    }
    }

    //准备
    TH1 = HIBYTE(BR(MAXBAUD));
    TL1 = LOBYTE(BR(MAXBAUD));
    DelayXms(10);
    TxBuffer[0] = 0x05;
    if (fwver < 0x72)
    {
    CommSend(1);
    }
    else
    {
    TxBuffer[1] = 0x00;
    TxBuffer[2] = 0x00;
    TxBuffer[3] = 0x5a;
    TxBuffer[4] = 0xa5;
    CommSend(5);
    }
    while (1)
    {
    if (TimeOut == 0) return FALSE;
    if (UartReceived)
    {
    if (RxBuffer[0] == 0x05) break;
    return FALSE;
    }
    }

    //擦除
    DelayXms(10);
    TxBuffer[0] = 0x03;
    TxBuffer[1] = 0x00;
    if (fwver < 0x72)
    {
    CommSend(2);
    }
    else
    {
    TxBuffer[2] = 0x00;
    TxBuffer[3] = 0x5a;
    TxBuffer[4] = 0xa5;
    CommSend(5);
    }
    TimeOut = 100;
    while (1)
    {
    if (TimeOut == 0) return FALSE;
    if (UartReceived)
    {
    if (RxBuffer[0] == 0x03) break;
    return FALSE;
    }
    }

    //写用户代码
    DelayXms(10);
    addr = 0;
    TxBuffer[0] = 0x22;
    if (fwver < 0x72)
    {
    offset = 3;
    }
    else
    {
    TxBuffer[3] = 0x5a;
    TxBuffer[4] = 0xa5;
    offset = 5;
    }
    while (addr < size)
    {
    TxBuffer[1] = HIBYTE(addr);
    TxBuffer[2] = LOBYTE(addr);
    cnt = 0;
    while (addr < size)
    {
    TxBuffer[cnt+offset] = pdat[addr];
    addr++;
    cnt++;
    if (cnt >= 128) break;
    }
    CommSend(cnt + offset);
    while (1)
    {
    if (TimeOut == 0) return FALSE;
    if (UartReceived)
    {
    if ((RxBuffer[0] == 0x02) && (RxBuffer[1] == 'T')) break;
    return FALSE;
    }
    }
    TxBuffer[0] = 0x02;
    }

    ////写硬件选项
    ////如果不需要修改硬件选项,此步骤可直接跳过,此时所有的硬件选项
    ////都维持不变,MCU的频率为上一次所调节频率
    ////若写硬件选项,MCU的内部IRC频率将被固定写为24M,
    ////建议:第一次使用STC-ISP下载软件将从芯片的硬件选项设置好
    //// 以后再使用主芯片对从芯片下载程序时不写硬件选项
    //DelayXms(10);
    //for (cnt=0; cnt<128; cnt++)
    //{
    // TxBuffer[cnt] = 0xff;
    //}
    //TxBuffer[0] = 0x04;
    //TxBuffer[1] = 0x00;
    //TxBuffer[2] = 0x00;
    //if (fwver < 0x72)
    //{
    // TxBuffer[34] = 0xfd;
    // TxBuffer[62] = arg;
    // TxBuffer[63] = 0x7f;
    // TxBuffer[64] = 0xf7;
    // TxBuffer[65] = 0x7b;
    // TxBuffer[66] = 0x1f;
    // CommSend(67);
    //}
    //else
    //{
    // TxBuffer[3] = 0x5a;
    // TxBuffer[4] = 0xa5;
    // TxBuffer[36] = 0xfd;
    // TxBuffer[64] = arg;
    // TxBuffer[65] = 0x7f;
    // TxBuffer[66] = 0xf7;
    // TxBuffer[67] = 0x7b;
    // TxBuffer[68] = 0x1f;
    // CommSend(69);
    //}
    //while (1)
    //{
    // if (TimeOut == 0) return FALSE;
    // if (UartReceived)
    // {
    // if ((RxBuffer[0] == 0x04) && (RxBuffer[1] == 'T')) break;
    // return FALSE;
    // }
    //}

    //下载完成
    return TRUE;
    }

    char code DEMO[256] =
    {
    0x02,0x00,0x5E,0x12,0x00,0x4B,0x75,0xB0,
    0xEF,0x12,0x00,0x2C,0x75,0xB0,0xDF,0x12,
    0x00,0x2C,0x75,0xB0,0xFE,0x12,0x00,0x2C,
    0x75,0xB0,0xFD,0x12,0x00,0x2C,0x75,0xB0,
    0xFB,0x12,0x00,0x2C,0x75,0xB0,0xF7,0x12,
    0x00,0x2C,0x80,0xDA,0xE4,0xFF,0xFE,0xE4,
    0xFD,0xFC,0x0D,0xBD,0x00,0x01,0x0C,0xBC,
    0x01,0xF8,0xBD,0xF4,0xF5,0x0F,0xBF,0x00,
    0x01,0x0E,0xBE,0x03,0xEA,0xBF,0xE8,0xE7,
    0x02,0x00,0x4B,0x75,0x80,0xFF,0x75,0x90,
    0xFF,0x75,0xA0,0xFF,0x75,0xB0,0xFF,0x75,
    0xC0,0xFF,0x75,0xC8,0xFF,0x22,0x78,0x7F,
    0xE4,0xF6,0xD8,0xFD,0x75,0x81,0x07,0x02,
    0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };