commit 5953218598fadab55064879b42a22cc34808abda Author: zhongxuanzhen Date: Fri Apr 10 19:42:22 2026 +0800 STC作为主机轮询扫描I2C设备,确认ICN6211工作状态。 diff --git a/I2CM_refer/main.c b/I2CM_refer/main.c new file mode 100644 index 0000000..6f5408a --- /dev/null +++ b/I2CM_refer/main.c @@ -0,0 +1,238 @@ +#include "reg51.h" +#include "intrins.h" + +// 定义I2C相关寄存器 +sfr P_SW2 = 0xba; +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) + +// 定义端口模式寄存器 +sfr P1M1 = 0x91; +sfr P1M0 = 0x92; + +// 定义I2C引脚 +sbit SDA = P1^4; +sbit SCL = P1^5; + +// 定义LED引脚 +sbit LED = P1^2; + +// 全局变量 +bit busy; // I2C忙碌标志 + +/** + * @brief I2C中断服务函数 + * @note 中断号24,用于处理I2C通信完成事件 + */ +void I2C_Isr() interrupt 24 +{ + _push_(P_SW2); + P_SW2 |= 0x80; // 访问扩展寄存器 + if (I2CMSST & 0x40) // 检查中断标志 + { + I2CMSST &= ~0x40; // 清除中断标志 + busy = 0; // 清除忙碌标志 + } + _pop_(P_SW2); +} + +/** + * @brief 等待I2C操作完成 + */ +void I2C_Wait() +{ + while(!(I2CMSST & 0x40)); + I2CMSST &= ~0x40; // 清除中断标志 +} + +/** + * @brief 发送I2C起始信号 + */ +void I2C_Start() +{ + busy = 1; + I2CMSCR = 0x81; // 发送START命令 + while (busy); // 等待操作完成 +} + +/** + * @brief 发送I2C数据 + * @param dat 要发送的数据 + */ +void I2C_SendData(unsigned char dat) +{ + I2CTXD = dat; // 写数据到数据缓冲区 + busy = 1; + I2CMSCR = 0x82; // 发送SEND命令 + while (busy); // 等待操作完成 +} + +/** + * @brief 接收I2C应答信号 + */ +void I2C_RecvACK() +{ + busy = 1; + I2CMSCR = 0x83; // 发送读ACK命令 + while (busy); // 等待操作完成 +} + +char I2C_RecvData() +{ + busy = 1; + I2CMSCR = 0x84; // 发送读数据命令 + while (busy); // 等待操作完成 + return I2CRXD; // 返回接收数据 +} + +void I2C_SendACK() +{ + I2CMSST = 0x00; //设置ACK信号 + I2CMSCR = 0x05; // 发送ACK命令 + I2C_Wait(); // 等待操作完成 +} + +void I2C_SendNAK() +{ + I2CMSST = 0x01; //设置NACK信号 + I2CMSCR = 0x05; // 发送NACK命令 + I2C_Wait(); // 等待操作完成 +} + +/** + * @brief 发送I2C停止信号 + */ +void I2C_Stop() +{ + I2CMSCR = 0x06; // 发送STOP命令 + I2C_Wait(); // 等待操作完成 +} + +// /** +// * @brief 延时函数 +// * @param ms 延时毫秒数 +// */ +// void Delay_ms(unsigned int ms) //@24.000MHz +// { +// unsigned int i, j; +// for (i = 0; i < ms; i++) +// { +// for (j = 0; j < 3500; j++); +// } +// } +// void Delay10us(void) //@24.000MHz +// { +// unsigned char data i; + +// i = 78; +// while (--i); +// } +/** + * @brief 延时函数 + * @param ms 延时毫秒数 + */ +void Delay_ms(unsigned int ms) //@11.0592MHz +{ + unsigned int i, j; + for (i = 0; i < ms; i++) + { + for (j = 0; j < 1550; j++); + } +} +void Delay10us(void) //@11.0592MHz +{ + unsigned char data i; + + i = 35; + while (--i); +} + +/** + * @brief I2C初始化函数 + * @note 配置P1.4为SDA,P1.5为SCL,设置100k通信速率 + */ +void I2C_Init() +{ + // 配置端口模式 + P1M0 = 0x04; // P1.2设置为推挽输出,P1.4和P1.5保持准双向口 + P1M1 = 0x00; + + // 访问扩展寄存器 + P_SW2 = 0x80; + + // 配置I2C通信速率为50kHz + // 系统时钟11.059MHz + // MSSPEED = (1105900/100000/2 -4)/2 = 25 + I2CCFG = 0xe0 | 0x10; // 0xe0使能I2C主机模式,0x10设置MSSPEED=25 + + // 初始化I2C状态 + I2CMSST = 0x00; + + // 启用全局中断· + EA = 1; +} + +/** + * @brief 向指定设备的指定寄存器发送I2C数据 + * @param devAddr 设备地址 + * @param regAddr 寄存器地址 + * @param dat 要发送的数据 + */ +void I2C_SendToRegister(unsigned char devAddr, unsigned char regAddr, unsigned char dat) +{ + I2C_Start(); // 发送起始信号 + I2C_SendData(devAddr); // 发送设备地址+写命令 + I2C_RecvACK(); // 接收应答 + I2C_SendData(regAddr); // 发送寄存器地址 + I2C_RecvACK(); // 接收应答 + I2C_SendData(dat); // 发送数据 + I2C_RecvACK(); // 接收应答 + I2C_Stop(); // 发送停止信号 +} + +/** + * @brief 主函数 + */ +void main() +{ + // 初始化数据变量,用于0x96寄存器的数据递增 + unsigned char reg96_data = 0; + // 初始化I2C + I2C_Init(); + + // 点亮LED(保持常亮) + LED = 0; // 推挽输出低电平点亮LED + + + + // 主循环 + while (1) + { + // 向设备0x8A的三个不同寄存器发送数据 + // 发送到寄存器0x94,数据0x03 + I2C_SendToRegister(0x8A, 0x94, 0x03); + Delay10us(); // 延时10us + + // 发送到寄存器0x95,数据0x17 + I2C_SendToRegister(0x8A, 0x95, 0x17); + Delay10us(); // 延时10us + + // 发送到寄存器0x96,数据递增 + I2C_SendToRegister(0x8A, 0x96, reg96_data); + + // 数据递增5,达到255后重置为0 + reg96_data += 5; + if (reg96_data > 0xFF) + { + reg96_data = 0; + } + + Delay_ms(1000); // 延时1秒 + } +} diff --git a/Listings/STARTUP.lst b/Listings/STARTUP.lst new file mode 100644 index 0000000..ca7ae36 --- /dev/null +++ b/Listings/STARTUP.lst @@ -0,0 +1,253 @@ +A51 MACRO ASSEMBLER STARTUP 04/10/2026 09:44:22 PAGE 1 + + +MACRO ASSEMBLER A51 V8.02c +OBJECT MODULE PLACED IN .\Objects\STARTUP.obj +ASSEMBLER INVOKED BY: C:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj + ects\STARTUP.obj) EP + +LOC OBJ LINE SOURCE + + 1 $nomod51 + 2 ;------------------------------------------------------------------------------ + 3 ; This file is part of the C51 Compiler package + 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. + 5 ; Version 8.01 + 6 ; + 7 ; *** <<< Use Configuration Wizard in Context Menu >>> *** + 8 ;------------------------------------------------------------------------------ + 9 ; STARTUP.A51: This code is executed after processor reset. + 10 ; + 11 ; To translate this file use A51 with the following invocation: + 12 ; + 13 ; A51 STARTUP.A51 + 14 ; + 15 ; To link the modified STARTUP.OBJ file to your application use the following + 16 ; Lx51 invocation: + 17 ; + 18 ; Lx51 your object file list, STARTUP.OBJ controls + 19 ; + 20 ;------------------------------------------------------------------------------ + 21 ; + 22 ; User-defined Power-On Initialization of Memory + 23 ; + 24 ; With the following EQU statements the initialization of memory + 25 ; at processor reset can be defined: + 26 ; + 27 ; IDATALEN: IDATA memory size <0x0-0x100> + 28 ; Note: The absolute start-address of IDATA memory is always 0 + 29 ; The IDATA space overlaps physically the DATA and BIT areas. + 0080 30 IDATALEN EQU 80H + 31 ; + 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF> + 33 ; The absolute start address of XDATA memory + 0000 34 XDATASTART EQU 0 + 35 ; + 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF> + 37 ; The length of XDATA memory in bytes. + 0000 38 XDATALEN EQU 0 + 39 ; + 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF> + 41 ; The absolute start address of PDATA memory + 0000 42 PDATASTART EQU 0H + 43 ; + 44 ; PDATALEN: PDATA memory size <0x0-0xFF> + 45 ; The length of PDATA memory in bytes. + 0000 46 PDATALEN EQU 0H + 47 ; + 48 ; + 49 ;------------------------------------------------------------------------------ + 50 ; + 51 ; Reentrant Stack Initialization + 52 ; + 53 ; The following EQU statements define the stack pointer for reentrant + 54 ; functions and initialized it: + 55 ; + 56 ; Stack Space for reentrant functions in the SMALL model. + 57 ; IBPSTACK: Enable SMALL model reentrant stack + A51 MACRO ASSEMBLER STARTUP 04/10/2026 09:44:22 PAGE 2 + + 58 ; Stack space for reentrant functions in the SMALL model. + 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. + 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> + 61 ; Set the top of the stack to the highest location. + 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 63 ; + 64 ; + 65 ; Stack Space for reentrant functions in the LARGE model. + 66 ; XBPSTACK: Enable LARGE model reentrant stack + 67 ; Stack space for reentrant functions in the LARGE model. + 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. + 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> + 70 ; Set the top of the stack to the highest location. + 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 + 72 ; + 73 ; + 74 ; Stack Space for reentrant functions in the COMPACT model. + 75 ; PBPSTACK: Enable COMPACT model reentrant stack + 76 ; Stack space for reentrant functions in the COMPACT model. + 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. + 78 ; + 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> + 80 ; Set the top of the stack to the highest location. + 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 82 ; + 83 ; + 84 ;------------------------------------------------------------------------------ + 85 ; + 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM + 87 ; Compact Model Page Definition + 88 ; + 89 ; Define the XDATA page used for PDATA variables. + 90 ; PPAGE must conform with the PPAGE set in the linker invocation. + 91 ; + 92 ; Enable pdata memory page initalization + 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. + 94 ; + 95 ; PPAGE number <0x0-0xFF> + 96 ; uppermost 256-byte address of the page used for PDATA variables. + 0000 97 PPAGE EQU 0 + 98 ; + 99 ; SFR address which supplies uppermost address byte <0x0-0xFF> + 100 ; most 8051 variants use P2 as uppermost address byte + 00A0 101 PPAGE_SFR DATA 0A0H + 102 ; + 103 ; + 104 ;------------------------------------------------------------------------------ + 105 + 106 ; Standard SFR Symbols + 00E0 107 ACC DATA 0E0H + 00F0 108 B DATA 0F0H + 0081 109 SP DATA 81H + 0082 110 DPL DATA 82H + 0083 111 DPH DATA 83H + 112 + 113 NAME ?C_STARTUP + 114 + 115 + 116 ?C_C51STARTUP SEGMENT CODE + 117 ?STACK SEGMENT IDATA + 118 +---- 119 RSEG ?STACK +0000 120 DS 1 + 121 + 122 EXTRN CODE (?C_START) + 123 PUBLIC ?C_STARTUP + A51 MACRO ASSEMBLER STARTUP 04/10/2026 09:44:22 PAGE 3 + + 124 +---- 125 CSEG AT 0 +0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1 + 127 +---- 128 RSEG ?C_C51STARTUP + 129 +0000 130 STARTUP1: + 131 + 132 IF IDATALEN <> 0 +0000 787F 133 MOV R0,#IDATALEN - 1 +0002 E4 134 CLR A +0003 F6 135 IDATALOOP: MOV @R0,A +0004 D8FD 136 DJNZ R0,IDATALOOP + 137 ENDIF + 138 + 139 IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A + XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP + ENDIF + 153 + 154 IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE + ENDIF + 157 + 158 IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A + PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP + ENDIF + 166 + 167 IF IBPSTACK <> 0 + EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP + ENDIF + 172 + 173 IF XBPSTACK <> 0 + EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP + ENDIF + 179 + 180 IF PBPSTACK <> 0 + EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP + ENDIF + 184 +0006 758100 F 185 MOV SP,#?STACK-1 + 186 + 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 + 188 ; Code Banking + 189 ; Select Bank 0 for L51_BANK.A51 Mode 4 + A51 MACRO ASSEMBLER STARTUP 04/10/2026 09:44:22 PAGE 4 + + 190 + + + + + 195 ; +0009 020000 F 196 LJMP ?C_START + 197 + 198 END + A51 MACRO ASSEMBLER STARTUP 04/10/2026 09:44:22 PAGE 5 + +SYMBOL TABLE LISTING +------ ----- ------- + + +N A M E T Y P E V A L U E ATTRIBUTES + +?C_C51STARTUP. . . C SEG 000CH REL=UNIT +?C_START . . . . . C ADDR ----- EXT +?C_STARTUP . . . . C ADDR 0000H A +?STACK . . . . . . I SEG 0001H REL=UNIT +ACC. . . . . . . . D ADDR 00E0H A +B. . . . . . . . . D ADDR 00F0H A +DPH. . . . . . . . D ADDR 0083H A +DPL. . . . . . . . D ADDR 0082H A +IBPSTACK . . . . . N NUMB 0000H A +IBPSTACKTOP. . . . N NUMB 0100H A +IDATALEN . . . . . N NUMB 0080H A +IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP +PBPSTACK . . . . . N NUMB 0000H A +PBPSTACKTOP. . . . N NUMB 0100H A +PDATALEN . . . . . N NUMB 0000H A +PDATASTART . . . . N NUMB 0000H A +PPAGE. . . . . . . N NUMB 0000H A +PPAGEENABLE. . . . N NUMB 0000H A +PPAGE_SFR. . . . . D ADDR 00A0H A +SP . . . . . . . . D ADDR 0081H A +STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP +XBPSTACK . . . . . N NUMB 0000H A +XBPSTACKTOP. . . . N NUMB 0000H A +XDATALEN . . . . . N NUMB 0000H A +XDATASTART . . . . N NUMB 0000H A + + +REGISTER BANK(S) USED: 0 + + +ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/STC8G1K08_I2C_SCAN.m51 b/Listings/STC8G1K08_I2C_SCAN.m51 new file mode 100644 index 0000000..c84f9a3 --- /dev/null +++ b/Listings/STC8G1K08_I2C_SCAN.m51 @@ -0,0 +1,462 @@ +BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 1 + + +BL51 BANKED LINKER/LOCATER V6.22, INVOKED BY: +C:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\STARTUP.obj, .\Objects\main.obj TO .\Objects\STC8G1K08_I2C_SCAN PRINT (.\Listings\ +>> STC8G1K08_I2C_SCAN.m51) RAMSIZE (256) + + +MEMORY MODEL: SMALL + + +INPUT MODULES INCLUDED: + .\Objects\STARTUP.obj (?C_STARTUP) + .\Objects\main.obj (MAIN) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C_INIT) + C:\KEIL_V5\C51\LIB\C51S.LIB (PRINTF) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDPTR) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDOPTR) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CSTPTR) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C?PLDIIDATA) + C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CCASE) + + +LINK MAP OF MODULE: .\Objects\STC8G1K08_I2C_SCAN (?C_STARTUP) + + + TYPE BASE LENGTH RELOCATION SEGMENT NAME + ----------------------------------------------------- + + * * * * * * * D A T A M E M O R Y * * * * * * * + REG 0000H 0008H ABSOLUTE "REG BANK 0" + DATA 0008H 0015H UNIT _DATA_GROUP_ + DATA 001DH 0001H UNIT ?DT?MAIN + 001EH 0002H *** GAP *** + BIT 0020H.0 0001H.1 UNIT _BIT_GROUP_ + BIT 0021H.1 0000H.1 UNIT ?BI?MAIN + 0021H.2 0000H.6 *** GAP *** + IDATA 0022H 0001H UNIT ?STACK + + * * * * * * * X D A T A M E M O R Y * * * * * * * + XDATA 0000H 0080H UNIT ?XD?MAIN + + * * * * * * * C O D E M E M O R Y * * * * * * * + CODE 0000H 0003H ABSOLUTE + CODE 0003H 00B5H UNIT ?PR?UART_PRINTSCANRESULTS?MAIN + CODE 00B8H 0008H UNIT ?PR?_PUTCHAR?MAIN + 00C0H 0003H *** GAP *** + CODE 00C3H 0003H ABSOLUTE + CODE 00C6H 035CH UNIT ?PR?PRINTF?PRINTF + CODE 0422H 0156H UNIT ?CO?MAIN + CODE 0578H 008EH UNIT ?C?LIB_CODE + CODE 0606H 008CH UNIT ?C_C51STARTUP + CODE 0692H 0072H UNIT ?PR?MAIN?MAIN + CODE 0704H 002EH UNIT ?PR?I2C_SCANALLADDRESSES?MAIN + CODE 0732H 0023H UNIT ?PR?_I2C_SCANADDRESS?MAIN + CODE 0755H 0021H UNIT ?PR?I2C_ISR?MAIN + CODE 0776H 0020H UNIT ?PR?_DELAY_MS?MAIN + CODE 0796H 0017H UNIT ?PR?I2C_INIT?MAIN + CODE 07ADH 0015H UNIT ?PR?UART1_INIT?MAIN + CODE 07C2H 0011H UNIT ?PR?_I2C_SENDDATA?MAIN + CODE 07D3H 000FH UNIT ?PR?I2C_WAIT?MAIN + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 2 + + + CODE 07E2H 000FH UNIT ?PR?DELAY5000MS?MAIN + CODE 07F1H 000CH UNIT ?PR?I2C_START?MAIN + CODE 07FDH 000CH UNIT ?PR?I2C_RECVACK?MAIN + CODE 0809H 000CH UNIT ?PR?I2C_STOP?MAIN + CODE 0815H 0004H UNIT ?C_INITSEG + + + +OVERLAY MAP OF MODULE: .\Objects\STC8G1K08_I2C_SCAN (?C_STARTUP) + + +SEGMENT BIT_GROUP DATA_GROUP + +--> CALLED SEGMENT START LENGTH START LENGTH +-------------------------------------------------------------------------- +?C_C51STARTUP ----- ----- ----- ----- + +--> ?PR?MAIN?MAIN + +--> ?C_INITSEG + +?PR?MAIN?MAIN ----- ----- ----- ----- + +--> ?PR?I2C_INIT?MAIN + +--> ?PR?UART1_INIT?MAIN + +--> ?CO?MAIN + +--> ?PR?PRINTF?PRINTF + +--> ?PR?_DELAY_MS?MAIN + +--> ?PR?I2C_SCANALLADDRESSES?MAIN + +--> ?PR?UART_PRINTSCANRESULTS?MAIN + +--> ?PR?DELAY5000MS?MAIN + +?PR?PRINTF?PRINTF 0020H.0 0001H.1 0009H 0014H + +--> ?PR?_PUTCHAR?MAIN + +?PR?I2C_SCANALLADDRESSES?MAIN ----- ----- ----- ----- + +--> ?PR?_I2C_SCANADDRESS?MAIN + +--> ?PR?_DELAY_MS?MAIN + +?PR?_I2C_SCANADDRESS?MAIN 0020H.0 0000H.1 ----- ----- + +--> ?PR?I2C_START?MAIN + +--> ?PR?_I2C_SENDDATA?MAIN + +--> ?PR?I2C_RECVACK?MAIN + +--> ?PR?I2C_STOP?MAIN + +?PR?UART_PRINTSCANRESULTS?MAIN ----- ----- 0008H 0001H + +--> ?CO?MAIN + +--> ?PR?PRINTF?PRINTF + + + +SYMBOL TABLE OF MODULE: .\Objects\STC8G1K08_I2C_SCAN (?C_STARTUP) + + VALUE TYPE NAME + ---------------------------------- + + ------- MODULE ?C_STARTUP + C:0606H SEGMENT ?C_C51STARTUP + I:0022H SEGMENT ?STACK + C:0000H PUBLIC ?C_STARTUP + D:00E0H SYMBOL ACC + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 3 + + + D:00F0H SYMBOL B + D:0083H SYMBOL DPH + D:0082H SYMBOL DPL + N:0000H SYMBOL IBPSTACK + N:0100H SYMBOL IBPSTACKTOP + N:0080H SYMBOL IDATALEN + C:0609H SYMBOL IDATALOOP + N:0000H SYMBOL PBPSTACK + N:0100H SYMBOL PBPSTACKTOP + N:0000H SYMBOL PDATALEN + N:0000H SYMBOL PDATASTART + N:0000H SYMBOL PPAGE + N:0000H SYMBOL PPAGEENABLE + D:00A0H SYMBOL PPAGE_SFR + D:0081H SYMBOL SP + C:0606H SYMBOL STARTUP1 + N:0000H SYMBOL XBPSTACK + N:0000H SYMBOL XBPSTACKTOP + N:0000H SYMBOL XDATALEN + N:0000H SYMBOL XDATASTART + C:0000H LINE# 126 + C:0606H LINE# 133 + C:0608H LINE# 134 + C:0609H LINE# 135 + C:060AH LINE# 136 + C:060CH LINE# 185 + C:060FH LINE# 196 + ------- ENDMOD ?C_STARTUP + + ------- MODULE MAIN + C:0000H SYMBOL _ICE_DUMMY_ + D:0092H PUBLIC P1M0 + D:0091H PUBLIC P1M1 + D:0090H PUBLIC P1 + C:07FDH PUBLIC I2C_RecvACK + B:00A8H.7 PUBLIC EA + C:07ADH PUBLIC uart1_init + D:00BAH PUBLIC P_SW2 + C:07E2H PUBLIC Delay5000ms + B:0098H.1 PUBLIC TI + C:0692H PUBLIC main + C:07C2H PUBLIC _I2C_SendData + C:0003H PUBLIC UART_PrintScanResults + C:07F1H PUBLIC I2C_Start + D:0099H PUBLIC SBUF + C:0776H PUBLIC _Delay_ms + D:001DH PUBLIC scan_count + D:0098H PUBLIC SCON + C:0796H PUBLIC I2C_Init + C:07D3H PUBLIC I2C_Wait + D:008EH PUBLIC AUXR + B:0021H.1 PUBLIC busy + C:0809H PUBLIC I2C_Stop + C:0755H PUBLIC I2C_Isr + D:00D6H PUBLIC T2H + D:00D7H PUBLIC T2L + B:0090H.2 PUBLIC LED + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 4 + + + X:0000H PUBLIC i2c_scan_buffer + C:0704H PUBLIC I2C_ScanAllAddresses + C:0732H PUBLIC _I2C_ScanAddress + C:00B8H PUBLIC _putchar + ------- PROC I2C_ISR + C:0755H LINE# 50 + C:075BH LINE# 52 + C:075DH LINE# 53 + C:0760H LINE# 54 + C:0767H LINE# 55 + C:0767H LINE# 56 + C:076BH LINE# 57 + C:076DH LINE# 58 + C:076DH LINE# 59 + C:076FH LINE# 60 + ------- ENDPROC I2C_ISR + ------- PROC _DELAY_MS + D:0006H SYMBOL ms + ------- DO + D:0004H SYMBOL i + D:0002H SYMBOL j + ------- ENDDO + C:0776H LINE# 67 + C:0776H LINE# 68 + C:0776H LINE# 70 + C:0780H LINE# 71 + C:0780H LINE# 72 + C:078EH LINE# 73 + C:0795H LINE# 74 + ------- ENDPROC _DELAY_MS + ------- PROC I2C_WAIT + C:07D3H LINE# 79 + C:07D3H LINE# 80 + C:07D3H LINE# 81 + C:07DAH LINE# 82 + C:07E1H LINE# 83 + ------- ENDPROC I2C_WAIT + ------- PROC I2C_START + C:07F1H LINE# 88 + C:07F1H LINE# 89 + C:07F1H LINE# 90 + C:07F3H LINE# 91 + C:07F9H LINE# 92 + C:07FCH LINE# 93 + ------- ENDPROC I2C_START + ------- PROC _I2C_SENDDATA + D:0007H SYMBOL dat + C:07C2H LINE# 99 + C:07C2H LINE# 100 + C:07C2H LINE# 101 + C:07C7H LINE# 102 + C:07C9H LINE# 103 + C:07CFH LINE# 104 + C:07D2H LINE# 105 + ------- ENDPROC _I2C_SENDDATA + ------- PROC I2C_RECVACK + C:07FDH LINE# 110 + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 5 + + + C:07FDH LINE# 111 + C:07FDH LINE# 112 + C:07FFH LINE# 113 + C:0805H LINE# 114 + C:0808H LINE# 115 + ------- ENDPROC I2C_RECVACK + ------- PROC I2C_STOP + C:0809H LINE# 120 + C:0809H LINE# 121 + C:0809H LINE# 122 + C:080BH LINE# 123 + C:0811H LINE# 124 + C:0814H LINE# 125 + ------- ENDPROC I2C_STOP + ------- PROC I2C_INIT + C:0796H LINE# 131 + C:0796H LINE# 132 + C:0796H LINE# 134 + C:0799H LINE# 135 + C:079CH LINE# 138 + C:079FH LINE# 146 + C:07A5H LINE# 149 + C:07AAH LINE# 152 + C:07ACH LINE# 153 + ------- ENDPROC I2C_INIT + ------- PROC _I2C_SCANADDRESS + D:0007H SYMBOL addr + ------- DO + B:0020H.0 SYMBOL ack_received + ------- ENDDO + C:0732H LINE# 164 + C:0732H LINE# 165 + C:0732H LINE# 166 + C:0734H LINE# 169 + C:0737H LINE# 170 + C:0737H LINE# 171 + C:0739H LINE# 172 + C:0739H LINE# 174 + C:073CH LINE# 175 + C:0743H LINE# 176 + C:0746H LINE# 179 + C:074DH LINE# 180 + C:074DH LINE# 181 + C:074FH LINE# 182 + C:074FH LINE# 184 + C:0752H LINE# 186 + C:0754H LINE# 187 + ------- ENDPROC _I2C_SCANADDRESS + ------- PROC I2C_SCANALLADDRESSES + ------- DO + D:0001H SYMBOL i + ------- ENDDO + C:0704H LINE# 193 + C:0704H LINE# 194 + C:0704H LINE# 196 + C:0707H LINE# 199 + C:0708H LINE# 200 + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 6 + + + C:0708H LINE# 201 + C:070FH LINE# 202 + C:070FH LINE# 204 + C:0716H LINE# 205 + C:0716H LINE# 206 + C:0726H LINE# 207 + C:0726H LINE# 208 + C:072DH LINE# 209 + C:072DH LINE# 210 + C:0731H LINE# 211 + ------- ENDPROC I2C_SCANALLADDRESSES + ------- PROC UART1_INIT + C:07ADH LINE# 217 + C:07ADH LINE# 218 + C:07ADH LINE# 219 + C:07B0H LINE# 220 + C:07B3H LINE# 221 + C:07B6H LINE# 222 + C:07B9H LINE# 223 + C:07BCH LINE# 224 + C:07BFH LINE# 225 + C:07C1H LINE# 226 + ------- ENDPROC UART1_INIT + ------- PROC _PUTCHAR + D:0007H SYMBOL c + C:00B8H LINE# 233 + C:00B8H LINE# 234 + C:00B8H LINE# 235 + C:00BAH LINE# 236 + C:00BDH LINE# 237 + C:00BFH LINE# 238 + C:00BFH LINE# 239 + ------- ENDPROC _PUTCHAR + ------- PROC UART_PRINTSCANRESULTS + ------- DO + D:0008H SYMBOL i + ------- ENDDO + C:0003H LINE# 245 + C:0003H LINE# 246 + C:0003H LINE# 249 + C:000CH LINE# 252 + C:0016H LINE# 253 + C:0016H LINE# 254 + C:001FH LINE# 255 + C:0029H LINE# 256 + C:0029H LINE# 257 + C:0040H LINE# 258 + C:0047H LINE# 259 + C:0047H LINE# 260 + C:0050H LINE# 261 + C:0050H LINE# 262 + C:0054H LINE# 263 + C:005DH LINE# 264 + C:0066H LINE# 265 + C:0070H LINE# 266 + C:0070H LINE# 267 + C:008AH LINE# 268 + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 7 + + + C:0091H LINE# 269 + C:0091H LINE# 270 + C:009AH LINE# 271 + C:009AH LINE# 272 + C:009EH LINE# 273 + C:00A4H LINE# 274 + C:00A6H LINE# 276 + C:00A6H LINE# 277 + C:00AFH LINE# 278 + C:00AFH LINE# 279 + ------- ENDPROC UART_PRINTSCANRESULTS + ------- PROC DELAY5000MS + ------- DO + D:0007H SYMBOL i + D:0006H SYMBOL j + D:0005H SYMBOL k + ------- ENDDO + C:07E2H LINE# 284 + C:07E2H LINE# 285 + C:07E2H LINE# 288 + C:07E3H LINE# 289 + C:07E4H LINE# 290 + C:07E6H LINE# 291 + C:07E8H LINE# 292 + C:07EAH LINE# 294 + C:07EAH LINE# 296 + C:07EAH LINE# 297 + C:07ECH LINE# 298 + C:07EEH LINE# 299 + C:07F0H LINE# 300 + ------- ENDPROC DELAY5000MS + ------- PROC MAIN + C:0692H LINE# 305 + C:0692H LINE# 306 + C:0692H LINE# 308 + C:0695H LINE# 309 + C:0698H LINE# 311 + C:069AH LINE# 314 + C:06A3H LINE# 315 + C:06ACH LINE# 316 + C:06B5H LINE# 317 + C:06BEH LINE# 318 + C:06C7H LINE# 319 + C:06D0H LINE# 320 + C:06D9H LINE# 323 + C:06D9H LINE# 324 + C:06D9H LINE# 326 + C:06DBH LINE# 327 + C:06E2H LINE# 328 + C:06E4H LINE# 330 + C:06EDH LINE# 331 + C:06F0H LINE# 332 + C:06F9H LINE# 334 + C:06FCH LINE# 336 + C:06FFH LINE# 338 + C:0702H LINE# 339 + ------- ENDPROC MAIN + BL51 BANKED LINKER/LOCATER V6.22 04/10/2026 09:44:22 PAGE 8 + + + ------- ENDMOD MAIN + + ------- MODULE PRINTF + D:0009H PUBLIC ?_PRINTF517?BYTE + D:0009H PUBLIC ?_PRINTF?BYTE + D:0009H PUBLIC ?_SPRINTF517?BYTE + D:0009H PUBLIC ?_SPRINTF?BYTE + C:0128H PUBLIC _PRINTF + C:0128H PUBLIC _PRINTF517 + C:0122H PUBLIC _SPRINTF + C:0122H PUBLIC _SPRINTF517 + ------- ENDMOD PRINTF + + ------- MODULE ?C?CLDPTR + C:0578H PUBLIC ?C?CLDPTR + ------- ENDMOD ?C?CLDPTR + + ------- MODULE ?C?CLDOPTR + C:0591H PUBLIC ?C?CLDOPTR + ------- ENDMOD ?C?CLDOPTR + + ------- MODULE ?C?CSTPTR + C:05BEH PUBLIC ?C?CSTPTR + ------- ENDMOD ?C?CSTPTR + + ------- MODULE ?C?PLDIIDATA + C:05D0H PUBLIC ?C?PLDIIDATA + ------- ENDMOD ?C?PLDIIDATA + + ------- MODULE ?C?CCASE + C:05E0H PUBLIC ?C?CCASE + ------- ENDMOD ?C?CCASE + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?I2C_WAIT?MAIN + +Program Size: data=32.2 xdata=128 code=2070 +LINK/LOCATE RUN COMPLETE. 1 WARNING(S), 0 ERROR(S) diff --git a/Listings/main.lst b/Listings/main.lst new file mode 100644 index 0000000..04fa567 --- /dev/null +++ b/Listings/main.lst @@ -0,0 +1,374 @@ +C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 1 + + +C51 COMPILER V9.55, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN .\Objects\main.obj +COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main + -.lst) TABS(2) OBJECT(.\Objects\main.obj) + +line level source + + 1 /* + 2 * 文件名: main.c + 3 * 功能: STC8G1K08 I2C设备扫描器 + 4 * 描述: + 5 * 1. 作为I2C主机扫描所有7位地址0x00-0x7F,接收并记录所有应答 + 6 * 2. 每5秒自动进行一次扫描 + 7 * 3. 每次扫描完成后通过UART输出所有应答地址 + 8 * 芯片: STC8G1K08 + 9 * 系统时钟: 11.0592MHz + 10 */ + 11 + 12 #include "reg51.h" + 13 #include "intrins.h" + 14 #include + 15 + 16 /* 定义STC8G专用寄存器 */ + 17 sfr P_SW2 = 0xba; // 端口切换寄存器 + 18 sfr AUXR = 0x8e; // 辅助寄存器 + 19 sfr T2L = 0xd7; // 定时器2低字节 + 20 sfr T2H = 0xd6; // 定时器2高字节 + 21 + 22 /* 定义I2C相关寄存器(使用xdata指针访问扩展SFR) */ + 23 #define I2CCFG (*(unsigned char volatile xdata *)0xfe80) // I2C配置寄存器 + 24 #define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) // I2C主机控制寄存器 + 25 #define I2CMSST (*(unsigned char volatile xdata *)0xfe82) // I2C主机状态寄存器 + 26 #define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) // I2C从机控制寄存器 + 27 #define I2CSLST (*(unsigned char volatile xdata *)0xfe84) // I2C从机状态寄存器 + 28 #define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) // I2C从机地址寄存器 + 29 #define I2CTXD (*(unsigned char volatile xdata *)0xfe86) // I2C数据发送寄存器 + 30 #define I2CRXD (*(unsigned char volatile xdata *)0xfe87) // I2C数据接收寄存器 + 31 + 32 /* 定义端口模式寄存器 */ + 33 sfr P1M1 = 0x91; // P1模式配置寄存器1 + 34 sfr P1M0 = 0x92; // P1模式配置寄存器0 + 35 + 36 /* 定义I2C引脚 */ + 37 sbit SDA = P1^4; // I2C数据线 + 38 sbit SCL = P1^5; // I2C时钟线 + 39 + 40 /* 定义LED引脚 */ + 41 sbit LED = P1^2; // 状态指示LED + 42 + 43 /* 全局变量 */ + 44 bit busy; // I2C忙碌标志位 + 45 + 46 /** + 47 * @brief I2C中断服务函数 + 48 * @note 用于处理I2C通信完成事件 + 49 */ + 50 void I2C_Isr() interrupt 24 // 关键修复:中断号从24改为7 + 51 { + 52 1 _push_(P_SW2); // 保存P_SW2寄存器 + 53 1 P_SW2 |= 0x80; // 访问扩展寄存器 + 54 1 if (I2CMSST & 0x40) // 检查中断标志位(BIT6: 主机操作完成) + C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 2 + + 55 1 { + 56 2 I2CMSST &= ~0x40; // 清除中断标志 + 57 2 busy = 0; // 清除忙碌标志 + 58 2 } + 59 1 _pop_(P_SW2); // 恢复P_SW2寄存器 + 60 1 } + 61 + 62 /** + 63 * @brief 延时函数 + 64 * @param ms 延时毫秒数 + 65 * @note 系统时钟11.0592MHz + 66 */ + 67 void Delay_ms(unsigned int ms) + 68 { + 69 1 unsigned int i, j; + 70 1 for (i = 0; i < ms; i++) + 71 1 { + 72 2 for (j = 0; j < 1100; j++); // 修正延时参数,更准确的1ms + 73 2 } + 74 1 } + 75 + 76 /** + 77 * @brief 等待I2C操作完成 + 78 */ + 79 void I2C_Wait() + 80 { + 81 1 while(!(I2CMSST & 0x40)); // 等待中断标志置位 + 82 1 I2CMSST &= ~0x40; // 清除中断标志 + 83 1 } + 84 + 85 /** + 86 * @brief 发送I2C起始信号 + 87 */ + 88 void I2C_Start() + 89 { + 90 1 busy = 1; // 设置忙碌标志 + 91 1 I2CMSCR = 0x81; // 发送START命令(0x80=主机模式,0x01=START) + 92 1 while (busy); // 等待操作完成 + 93 1 } + 94 + 95 /** + 96 * @brief 发送I2C数据 + 97 * @param dat 要发送的数据 + 98 */ + 99 void I2C_SendData(unsigned char dat) + 100 { + 101 1 I2CTXD = dat; // 写数据到发送缓冲区 + 102 1 busy = 1; // 设置忙碌标志 + 103 1 I2CMSCR = 0x82; // 发送SEND命令(0x80=主机模式,0x02=SEND) + 104 1 while (busy); // 等待操作完成 + 105 1 } + 106 + 107 /** + 108 * @brief 接收I2C应答信号 + 109 */ + 110 void I2C_RecvACK() + 111 { + 112 1 busy = 1; // 设置忙碌标志 + 113 1 I2CMSCR = 0x83; // 发送读ACK命令(0x80=主机模式,0x03=RECV ACK) + 114 1 while (busy); // 等待操作完成 + 115 1 } + 116 + C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 3 + + 117 /** + 118 * @brief 发送I2C停止信号 + 119 */ + 120 void I2C_Stop() + 121 { + 122 1 busy = 1; // 增加busy标志,保持逻辑一致 + 123 1 I2CMSCR = 0x86; // 发送STOP命令(0x80=主机模式,0x06=STOP) + 124 1 while (busy); // 等待操作完成 + 125 1 } + 126 + 127 /** + 128 * @brief I2C初始化函数 + 129 * @note 配置P1.4为SDA,P1.5为SCL,设置50kHz通信速率,启用中断 + 130 */ + 131 void I2C_Init() + 132 { + 133 1 /* 配置端口模式 */ + 134 1 P1M0 = 0x04; // P1.2设置为推挽输出(LED),P1.4和P1.5保持准双向口 + 135 1 P1M1 = 0x00; + 136 1 + 137 1 /* 访问扩展寄存器 */ + 138 1 P_SW2 = 0x80; + 139 1 + 140 1 /* 配置I2C参数 */ + 141 1 // 0xF3 = 11110011 + 142 1 // bit7=1: 启用I2C + 143 1 // bit6=1: 主机模式 + 144 1 // bit5=1: 启用I2C中断(关键修复:开启中断) + 145 1 // bit4~0=0x13: MSSPEED=19,计算50kHz:11059200/(2*(19+4)*2)=~50kHz + 146 1 I2CCFG = 0xF3; + 147 1 + 148 1 /* 初始化I2C状态 */ + 149 1 I2CMSST = 0x00; + 150 1 + 151 1 /* 启用全局中断和I2C中断 */ + 152 1 EA = 1; // 全局中断使能 + 153 1 } + 154 + 155 /* I2C扫描缓冲区,用于存储检测到的设备地址 */ + 156 unsigned char xdata i2c_scan_buffer[128]; // 7位地址最多128个 + 157 unsigned char scan_count = 0; // 扫描到的设备数量 + 158 + 159 /** + 160 * @brief 扫描指定I2C 7位地址 + 161 * @param addr 要扫描的7位I2C地址(0x00-0x7F) + 162 * @return 1表示收到应答,0表示无应答 + 163 */ + 164 bit I2C_ScanAddress(unsigned char addr) + 165 { + 166 1 bit ack_received = 0; // 应答接收标志 + 167 1 + 168 1 /* 跳过保留地址0x00(通用呼叫地址) */ + 169 1 if (addr == 0x00) + 170 1 { + 171 2 return 0; + 172 2 } + 173 1 + 174 1 I2C_Start(); // 发送起始信号 + 175 1 I2C_SendData(addr << 1); // 7位地址左移+读写位(0=写) + 176 1 I2C_RecvACK(); // 接收应答信号 + 177 1 + 178 1 /* 检查是否收到ACK(I2CMSST的bit1为0表示收到ACK) */ + C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 4 + + 179 1 if (!(I2CMSST & 0x02)) + 180 1 { + 181 2 ack_received = 1; // 收到应答 + 182 2 } + 183 1 + 184 1 I2C_Stop(); // 发送停止信号 + 185 1 + 186 1 return ack_received; + 187 1 } + 188 + 189 /** + 190 * @brief 扫描所有I2C 7位地址(0x00-0x7F) + 191 * @note 将所有应答的设备地址存储到缓冲区中 + 192 */ + 193 void I2C_ScanAllAddresses(void) + 194 { + 195 1 unsigned char i; + 196 1 scan_count = 0; // 清零扫描计数 + 197 1 + 198 1 /* 遍历所有7位I2C地址(规范扫描范围) */ + 199 1 for (i = 0; i < 128; i++) + 200 1 { + 201 2 if (I2C_ScanAddress(i)) // 如果收到应答 + 202 2 { + 203 3 /* 防止缓冲区溢出 */ + 204 3 if (scan_count < 128) + 205 3 { + 206 4 i2c_scan_buffer[scan_count++] = i; // 将7位地址存入缓冲区 + 207 4 } + 208 3 Delay_ms(1); // 短暂延时,避免总线冲突 + 209 3 } + 210 2 } + 211 1 } + 212 + 213 /** + 214 * @brief UART1初始化函数 + 215 * @note 波特率115200bps,系统时钟11.0592MHz + 216 */ + 217 void uart1_init(void) + 218 { + 219 1 SCON = 0x50; // 8位UART,允许接收 + 220 1 AUXR |= 0x01; // 串口1选择定时器2为波特率发生器 + 221 1 AUXR &= 0xFB; // 定时器2时钟为12T模式 + 222 1 T2L = 0xFE; // 设置定时器2初值 + 223 1 T2H = 0xFF; // 设置定时器2初值 + 224 1 AUXR |= 0x10; // 启动定时器2 + 225 1 TI = 1; // 设置TI标志,用于printf重定向 + 226 1 } + 227 + 228 /** + 229 * @brief putchar重定向函数,用于printf输出 + 230 * @param c 要输出的字符 + 231 * @return 输出的字符 + 232 */ + 233 char putchar(char c) + 234 { + 235 1 SBUF = c; // 写入发送缓冲区 + 236 1 while (!TI); // 等待发送完成 + 237 1 TI = 0; // 清除发送完成标志 + 238 1 return c; + 239 1 } + 240 + C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 5 + + 241 /** + 242 * @brief 通过UART打印I2C扫描结果 + 243 * @note 输出格式化的扫描结果,包括设备数量和地址列表 + 244 */ + 245 void UART_PrintScanResults(void) + 246 { + 247 1 unsigned char i; + 248 1 + 249 1 printf("\r\n=== I2C扫描结果 ===\r\n"); + 250 1 // printf("检测到的7位I2C设备数量: %d\r\n", scan_count); + 251 1 + 252 1 if (scan_count > 0) + 253 1 { + 254 2 printf("应答地址列表(7位):\r\n"); + 255 2 for (i = 0; i < scan_count; i++) + 256 2 { + 257 3 printf("0x%02X ", i2c_scan_buffer[i]); // 以十六进制格式输出7位地址 + 258 3 if ((i + 1) % 8 == 0) // 每8个地址换行 + 259 3 { + 260 4 printf("\r\n"); + 261 4 } + 262 3 } + 263 2 printf("\r\n"); + 264 2 printf("对应发送地址(8位写模式):\r\n"); + 265 2 for (i = 0; i < scan_count; i++) + 266 2 { + 267 3 printf("0x%02X ", i2c_scan_buffer[i] << 1); + 268 3 if ((i + 1) % 8 == 0) // 每8个地址换行 + 269 3 { + 270 4 printf("\r\n"); + 271 4 } + 272 3 } + 273 2 printf("\r\n"); + 274 2 } + 275 1 else + 276 1 { + 277 2 printf("未检测到任何I2C设备\r\n"); + 278 2 } + 279 1 printf("==================\r\n"); + 280 1 } + 281 + 282 + 283 + 284 void Delay5000ms(void) //@11.0592MHz + 285 { + 286 1 unsigned char data i, j, k; + 287 1 + 288 1 _nop_(); + 289 1 _nop_(); + 290 1 i = 211; + 291 1 j = 30; + 292 1 k = 11; + 293 1 do + 294 1 { + 295 2 do + 296 2 { + 297 3 while (--k); + 298 3 } while (--j); + 299 2 } while (--i); + 300 1 } + 301 + 302 /** + C51 COMPILER V9.55 MAIN 04/10/2026 09:44:22 PAGE 6 + + 303 * @brief 主函数 + 304 */ + 305 void main() + 306 { + 307 1 /* 初始化各模块 */ + 308 1 I2C_Init(); // 初始化I2C + 309 1 uart1_init(); // 初始化UART1 + 310 1 + 311 1 LED = 0; // 点亮LED(推挽输出低电平点亮) + 312 1 + 313 1 /* 输出启动信息 */ + 314 1 printf("\r\n"); + 315 1 printf("========================================\r\n"); + 316 1 printf(" STC8G1K08 I2C设备扫描器\r\n"); + 317 1 printf("========================================\r\n"); + 318 1 printf("系统初始化完成...\r\n"); + 319 1 printf("每5秒自动扫描一次I2C总线\r\n"); + 320 1 printf("========================================\r\n"); + 321 1 + 322 1 /* 主循环 */ + 323 1 while (1) + 324 1 { + 325 2 /* LED闪烁指示扫描开始 */ + 326 2 LED = 1; // 熄灭LED + 327 2 Delay_ms(100); + 328 2 LED = 0; // 点亮LED + 329 2 + 330 2 printf("\r\n[开始扫描...]\r\n"); + 331 2 I2C_ScanAllAddresses(); // 执行I2C扫描 + 332 2 printf("[扫描完成]\r\n"); + 333 2 + 334 2 UART_PrintScanResults(); // 输出扫描结果 + 335 2 + 336 2 scan_count = 0; // 清零扫描计数,准备下一次扫描 + 337 2 + 338 2 Delay5000ms(); // 等待5秒后再次扫描 + 339 2 } + 340 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 576 ---- + CONSTANT SIZE = 342 ---- + XDATA SIZE = 128 ---- + PDATA SIZE = ---- ---- + DATA SIZE = 1 1 + IDATA SIZE = ---- ---- + BIT SIZE = 1 1 +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Objects/STARTUP.obj b/Objects/STARTUP.obj new file mode 100644 index 0000000..3146985 Binary files /dev/null and b/Objects/STARTUP.obj differ diff --git a/Objects/STC8G1K08_I2C_SCAN b/Objects/STC8G1K08_I2C_SCAN new file mode 100644 index 0000000..f780daf Binary files /dev/null and b/Objects/STC8G1K08_I2C_SCAN differ diff --git a/Objects/STC8G1K08_I2C_SCAN.build_log.htm b/Objects/STC8G1K08_I2C_SCAN.build_log.htm new file mode 100644 index 0000000..d18a15d --- /dev/null +++ b/Objects/STC8G1K08_I2C_SCAN.build_log.htm @@ -0,0 +1,37 @@ + + +
+

Vision Build Log

+

Tool Versions:

+IDE-Version: Vision V5.43.1.0 +Copyright (C) 2025 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: x xtell, x, LIC=58E4T-RI3SS-94BS2-9VME3-DGA97-597R7 + +Tool Versions: +Toolchain: PK51 Prof. Developers Kit Version: 9.55 +Toolchain Path: C:\Keil_v5\C51\BIN +C Compiler: C51.exe V9.55 +Assembler: A51.exe V8.02c +Linker/Locator: BL51.exe V6.22 +Library Manager: LIB51.exe V4.30.1.0 +Hex Converter: OH51.exe V2.7.0.0 +CPU DLL: S8051.DLL V3.101.0.0 +Dialog DLL: DP51.DLL V2.62.0.1 +

Project:

+C:\workfile\102_RasberryPi_DSI\software\STC8G1K08_I2C_SCAN\STC8G1K08_I2C_SCAN.uvproj +Project File Date: 02/13/2026 + +

Output:

+Rebuild target 'Target_1' +assembling STARTUP.A51... +compiling main.c... +linking... +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?I2C_WAIT?MAIN +Program Size: data=32.2 xdata=128 code=2070 +creating hex file from ".\Objects\STC8G1K08_I2C_SCAN"... +".\Objects\STC8G1K08_I2C_SCAN" - 0 Error(s), 1 Warning(s). +Build Time Elapsed: 00:00:01 +
+ + diff --git a/Objects/STC8G1K08_I2C_SCAN.hex b/Objects/STC8G1K08_I2C_SCAN.hex new file mode 100644 index 0000000..6468b24 --- /dev/null +++ b/Objects/STC8G1K08_I2C_SCAN.hex @@ -0,0 +1,148 @@ +:03000000020606EF +:0C060600787FE4F6D8FD75812102064DD6 +:100422000D0A3D3D3D20493243E689ABE68F8FE719 +:10043200BB93E69E9C203D3D3D0D0A00E5BA94E744 +:10044200AD94E59CB0E59D80E58897E8A1A8EFBC56 +:100452008837E4BD8DEFBC893A0D0A00307825302B +:10046200325820000D0A00E5AFB9E5BA94E58F9144 +:10047200E98081E59CB0E59D80EFBC8838E4BD8DC4 +:10048200E58699E6A8A1E5BC8FEFBC893A0D0A0082 +:10049200E69CAAE6A380E6B58BE588B0E4BBBBE4A4 +:1004A200BD95493243E8AEBEE5A4870D0A003D3D45 +:1004B2003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D6A +:1004C2000D0A003D3D3D3D3D3D3D3D3D3D3D3D3DFA +:1004D2003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D4A +:1004E2003D3D3D3D3D3D3D3D3D3D3D0D0A00202014 +:1004F2005354433847314B303820493243E8AEBE7B +:10050200E5A487E689ABE68F8FE599A80D0A00E797 +:10051200B3BBE7BB9FE5889DE5A78BE58C96E5AE6F +:100522008CE688902E2E2E0D0A00E6AF8F35E7A7B7 +:1005320092E887AAE58AA8E689ABE68F8FE4B880BD +:10054200E6ACA1493243E680BBE7BABF0D0A000D13 +:100552000A5BE5BC80E5A78BE689ABE68F8F2E2E82 +:100562002E5D0D0A005BE689ABE68F8FE5AE8CE669 +:0605720088905D0D0A00F7 +:03081500011D00C2 +:0300C300020755DC +:10075500C0E0C083C082C0BA43BA8090FE82E03058 +:10076500E606E054BFF0C209D0BAD082D083D0E00B +:010775003251 +:10077600E4FDFCC3ED9FEC9E5015E4FBFA0BBB00B9 +:0F078600010ABA04F8BB4CF50DBD00010C80E46C +:010795002241 +:0F07D30090FE82E030E6F990FE82E054BFF02203 +:0C07F100D20990FE817481F02009FD22E5 +:1007C20090FE86EFF0D20990FE817482F02009FD3E +:0107D2002204 +:0C07FD00D20990FE817483F02009FD22D7 +:0C080900D20990FE817486F02009FD22C7 +:10079600759204E4F59175BA8090FE8074F3F0903A +:0707A600FE82E4F0D2AF2255 +:10073200C200EF7002C3221207F1EF25E0FF120799 +:10074200C21207FD90FE82E020E102D200120809E7 +:02075200A20003 +:010754002282 +:10070400E4F51DF9AF01120732501EE51DC39480B4 +:100714005010AF1D051D74002FF582E43400F583DD +:0D072400E9F07F017E0012077609B980D749 +:0107310022A5 +:1007AD00759850438E01538EFB75D7FE75D6FF435A +:0507BD008E10D299220C +:0800B8008F993099FDC29922D5 +:100003007BFF7A047922120128E51DD39400500363 +:100013000200A67BFF7A04793E120128E4F508E585 +:1000230008C3951D502B7BFF7A04795E7400250865 +:10003300F582E43400F583E0F50C120128E50804A9 +:10004300540770097BFF7A0479661201280508803A +:10005300CE7BFF7A0479661201287BFF7A047969E3 +:10006300120128E4F508E508C3951D502E7BFF7A9D +:1000730004795E74002508F582E43400F583E0FF1B +:1000830025E0F50C120128E50804540770097BFFED +:100093007A047966120128050880CB7BFF7A0479FC +:1000A3006680067BFF7A0479921201287BFF7A042B +:0500B30079B0020128F4 +:0E07E20000007FD37E1E7D0BDDFEDEFCDFFA05 +:0107F00022E6 +:100692001207961207ADC2927BFF7A0479661201A5 +:1006A200287BFF7A0479C51201287BFF7A0479F04E +:1006B2001201287BFF7A0479C51201287BFF7A0593 +:1006C20079111201287BFF7A05792C1201287BFF10 +:1006D2007A0479C5120128D2927F647E00120776CD +:1006E200C2927BFF7A0579511201281207047BFF1F +:1006F2007A057967120128120003E4F51D1207E258 +:0207020080D5A0 +:10061200020692E493A3F8E493A34003F68001F266 +:1006220008DFF48029E493A3F85407240CC8C333E9 +:10063200C4540F4420C8834004F456800146F6DFB8 +:10064200E4800B0102040810204080900815E47E2B +:10065200019360BCA3FF543F30E509541FFEE493AD +:10066200A360010ECF54C025E060A840B8E493A374 +:10067200FAE493A3F8E493A3C8C582C8CAC583CA9F +:10068200F0A3C8C582C8CAC583CADFE9DEE780BE57 +:0108180000DF +:1000C600E518240CF8E60518227809300702780CA2 +:1000D600E475F0011205D00205782000EB7F2ED2E0 +:1000E600008018EF540F2490D43440D4FF30040B12 +:1000F600EF24BFB41A0050032461FFE5196002150E +:1001060019051CE51C7002051B30070D7809E475FE +:10011600F0011205D0EF0205BE0200B87403D20743 +:100126008003E4C207F5188B098A0A890BE4F519DE +:10013600F51BF51CE51960077F2012010180F57596 +:100146001AFFC201C200C202C203C205C206C20829 +:100156001200CFFF700D3007057F00120112AF1C91 +:10016600AE1B22B4255FC2D5C2041200CFFF24D035 +:10017600B40A00501A75F00A781930D50508B6FF8A +:100186000106C6A426F620D5047002D20380D9241F +:10019600CFB41A00EF5004C2E5D204020312D20112 +:1001A60080C6D20080C0D20280BCD2D580BAD20529 +:1001B60080B47F201201012002077401B5190040A6 +:1001C600F11200C6FF12010102013AD208D20680DE +:1001D600951200C6FB1200C6FA1200C6F94A4B7009 +:1001E6000679E37A037BFF20022EE519602A7E005A +:1001F6008E8275830012059160060EEE651A70F008 +:10020600C2D5EBC0E0EAC0E0E9C0E0EE120359D087 +:10021600E0F9D0E0FAD0E0FB120578FF60AAEBC067 +:10022600E0EAC0E0E9C0E0120101D0E02401F9D023 +:10023600E03400FAD0E0FBE51A0460DCD51AD98078 +:10024600877BFF7A037955D202809C7910800279E8 +:1002560008C206C2088008D2D5790A8004790AC283 +:10026600D5E51A047002F51AE4FAFDFEFF1200C67F +:10027600FC7B082001131200C6FD7B1030000A1219 +:1002860000C6FE1200C6FF7B20EC3382D592D55005 +:1002960013C3E43000069FFFE49EFEE42001039DA5 +:1002A600FDE49CFCE4CBF8C201EC700CCFCECDCCC7 +:1002B600E824F8F870F38017C3EF33FFEE33FEED52 +:1002C60033FDEC33FCEB33FB994002FB0FD8E9EB33 +:1002D600300105F8D0E0C448B201C0E00AEC4D4E4A +:1002E6004F78207B0070C2EAB51A0040BCC0E0120D +:1002F600035BD0F0D0E0200104C4C0E0C4B201C06A +:10030600F01200EAD0F0D5F0EB02013A1205E00156 +:10031600D75302515801A84C01A44202554F025D21 +:0F03260044025D4901BD43026355024746024749 +:100335004502474704035001AC2D01B02E01D32BD4 +:1003450001B42301D12003EC2A016C48000001CB44 +:100355003F3F3F00790AA2D5200314300509B910A3 +:10036500020404B9080104A2D520060250010420A4 +:1003750002689202B519005034C0E07F203003199D +:100385007F30A20272067205500F1203B2C202C27A +:1003950006C205C2087F30800F300503E9C0E012B0 +:1003A5000101300503D0E0F9D0E0B519CC300517CF +:1003B5007F30B9100C1201017F583004077F788017 +:1003C50003B908031201013002057F2D0201017FE7 +:1003D500202008F87F2B2006F322920280CF286E7A +:1003E500756C6C2900D2011200C63001F8C2017883 +:1003F5001930D50108F602016C2D504349581200F9 +:10040500C62403B405004001E49003FE931200F2F4 +:0D041500743A1200F2D2037519040202516C +:10057800BB010689828A83E0225002E722BBFE0281 +:09058800E32289828A83E49322B4 +:10059100BB010CE58229F582E5833AF583E022501F +:1005A10006E92582F8E622BBFE06E92582F8E22269 +:0D05B100E58229F582E5833AF583E4932283 +:1005BE00BB010689828A83F0225002F722BBFE011C +:0205CE00F32216 +:1005D000FAE6FB0808E6F925F0F618E6CA3AF6222C +:1005E000D083D082F8E4937012740193700DA3A3AA +:1005F00093F8740193F5828883E4737402936860BE +:06060000EFA3A3A380DFBD +:00000001FF diff --git a/Objects/STC8G1K08_I2C_SCAN.lnp b/Objects/STC8G1K08_I2C_SCAN.lnp new file mode 100644 index 0000000..c267c33 --- /dev/null +++ b/Objects/STC8G1K08_I2C_SCAN.lnp @@ -0,0 +1,4 @@ +".\Objects\STARTUP.obj", +".\Objects\main.obj" +TO ".\Objects\STC8G1K08_I2C_SCAN" +PRINT(".\Listings\STC8G1K08_I2C_SCAN.m51") RAMSIZE(256) diff --git a/Objects/main.obj b/Objects/main.obj new file mode 100644 index 0000000..db9988b Binary files /dev/null and b/Objects/main.obj differ diff --git a/STARTUP.A51 b/STARTUP.A51 new file mode 100644 index 0000000..ec99b9e --- /dev/null +++ b/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 80H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 0 +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/STC8G1K08_I2C_SCAN.uvgui.xtell b/STC8G1K08_I2C_SCAN.uvgui.xtell new file mode 100644 index 0000000..c7a6463 --- /dev/null +++ b/STC8G1K08_I2C_SCAN.uvgui.xtell @@ -0,0 +1,3619 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + C:\workfile\102_RasberryPi_DSI\software\STC8G1K08_I2C_SCAN + + + + + + + 38003 + Registers + 140 90 + + + 346 + Code Coverage + 1010 160 + + + 204 + Performance Analyzer + 1170 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 80 80 80 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 2 + 3 + + -32000 + -32000 + + + -1 + -1 + + + 64 + 157 + 1220 + 1105 + + + + 0 + + 261 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000041433A5C776F726B66696C655C3130325F526173626572727950695F4453495C736F6674776172655C5354433847314B30385F4932435F5343414E5C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000069030000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000090050000DF000000 + + + 16 + F40000006600000090050000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + D8000000EF000000C8010000BA010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + D8000000EF000000F40100002F030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000A00300007F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000A00300007F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000A00300007F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000A00300007F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + D8000000EF000000C8010000BA010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + D8000000EF000000A00300007F010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000C8010000BA010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000C8010000BA010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + D8000000EF000000C8010000BA010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + 22000000390000003E01000079020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + 22000000390000003E01000079020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000006A03000080070000E6030000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000000000000090050000BD020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 22000000390000001201000004010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000039030000 + + + 16 + 22000000390000003E01000079020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + 22000000390000003E01000079020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 22000000390000001201000004010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 22000000390000001201000004010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + 22000000390000003E01000079020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000006D0300007D070000CD030000 + + + 16 + 22000000390000003E01000079020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + 22000000390000001201000004010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 22000000390000001201000004010000 + + + + 3317 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000052030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000069030000000000004F000000F0000000520300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000520300008007000056030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000006D03000080070000FD030000000000005603000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2608 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000002150726F746F636F6C5F4275696C643556506F7765725374617475735061636B6574960000000000000001002150726F746F636F6C5F4275696C643556506F7765725374617475735061636B657400000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000085461726765745F3196000000000000000100085461726765745F31000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000080070000DF000000 + + + 16 + F40000006600000090050000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000025030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000590300007D070000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + C7030000590300007D070000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000FC010000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D50000008603000065010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000042030000C0030000E6030000 + + + 16 + BE000000D50000008603000065010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D50000008603000065010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F40000006300000080070000DF000000 + + + 16 + BE000000D50000008603000065010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D50000008603000065010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED00000025030000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D50000008603000065010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + BE000000D5000000DA01000015030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + BE000000D50000008603000065010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C70300005903000085060000CD030000 + + + 16 + BE000000D5000000AE010000A0010000 + + + + 3311 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000DF00000080070000E3000000010000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F40000006600000090050000F6000000F40000004F00000080070000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F40000003E030000010000000200000004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F00000002C020000000000004F000000F00000003E0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003E030000800700004203000001000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000CC0200003002000090050000D4020000C40300004203000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFC003000042030000C4030000E603000001000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000029020000900500002D020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000004402000090050000D4020000000000002D02000090050000BD0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2618 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000009556172743253656E649600000000000000040009556172743253656E64126164635F46414E5F323230565F76616C7565096164635F76616C75651046414E5F323230565F636F6E74726F6C00000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 955 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + + + 1 + 0 + + 100 + 0 + + .\main.c + 0 + 1 + 42 + 1 + + 0 + + + + +
diff --git a/STC8G1K08_I2C_SCAN.uvopt b/STC8G1K08_I2C_SCAN.uvopt new file mode 100644 index 0000000..08893dd --- /dev/null +++ b/STC8G1K08_I2C_SCAN.uvopt @@ -0,0 +1,197 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + Target_1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + +
diff --git a/STC8G1K08_I2C_SCAN.uvproj b/STC8G1K08_I2C_SCAN.uvproj new file mode 100644 index 0000000..d9b1afd --- /dev/null +++ b/STC8G1K08_I2C_SCAN.uvproj @@ -0,0 +1,395 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target_1 + 0x0 + MCS-51 + 0 + + + STC8G1K08 Series + STC + IRAM(0-0xFF) XRAM(0-0x03FF) IROM(0-0x1FF8) CLOCK(35000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 63316 + STC8G.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + STC8G1K08_I2C_SCAN + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x10000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x1ff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x400 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + main.c + 1 + .\main.c + + + + + + + +
diff --git a/UART_refer/main.c b/UART_refer/main.c new file mode 100644 index 0000000..352f432 --- /dev/null +++ b/UART_refer/main.c @@ -0,0 +1,435 @@ +/* + * main.c + * ܣʵI2CӻݣLEDPWMͨUART1LOGϢ + * ߣ + * ڣ + * 汾1.0 + * + * Ҫܣ + * 1. I2CӻݣַΪ0x8AӦ7λַ45 + * 2. ֽ֧豸ַĴַ + * 3. LEDأ0xCCرգ0xDD򿪣 + * 4. PWMռձȣ0x00-0x64Ӧ0%-100% + * 5. ͨUART1յ + * 6. ÿηջ + */ + +// Ҫͷļ +#include "xtell.h" // LOG +#include "uart.h" // UART1غ +#include "intrins.h" // ṩ_nop_()ú + +// PCAɱ̼УؼĴ +sfr CCON = 0xd8; // PCAƼĴڿPCAģкж +sbit CF = CCON^7; // PCA־PCAʱ1 +sbit CR = CCON^6; // PCAпλ1ʱPCA +sbit CCF2 = CCON^2; // PCAģ2жϱ־ģ2жʱ1 +sbit CCF1 = CCON^1; // PCAģ1жϱ־ģ1жʱ1 +sbit CCF0 = CCON^0; // PCAģ0жϱ־ģ0жʱ1 +sfr CMOD = 0xd9; // PCAģʽĴPCAʱԴ͹ģʽ +sfr CL = 0xe9; // PCA8λ洢PCAĵ8λֵ +sfr CH = 0xf9; // PCA8λ洢PCAĸ8λֵ +sfr CCAPM1 = 0xdb; // PCAģ1Ƚ/ƼĴģ1Ĺģʽ +sfr CCAP1L = 0xeb; // PCAģ1Ƚ/Ĵ8λڴ洢PWMռձȵĵ8λ +sfr CCAP1H = 0xfb; // PCAģ1Ƚ/Ĵ8λڴ洢PWMռձȵĸ8λ +sfr PCA_PWM1 = 0xf3; // PCAģ1 PWMƼĴPWMλ + +// I2CؼĴʹxdataָչSFR +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) // I2CüĴI2CĹģʽͲ +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) // I2CƼĴڿI2CIJ +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) // I2C״̬ĴָʾI2C״̬ +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) // I2CӻƼĴڿI2CӻIJ +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) // I2Cӻ״̬ĴָʾI2Cӻ״̬ +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) // I2CӻַĴI2Cӻĵַ +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) // I2CݷͼĴڷI2C +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) // I2CݽռĴڽI2C + +// I2C¼־λ +#define I2C_EVENT_START 0x40 // START¼־⵽I2C STARTźʱ1 +#define I2C_EVENT_RECV 0x20 // RECV¼־յI2Cʱ1 +#define I2C_EVENT_SEND 0x10 // SEND¼־ҪI2Cʱ1 +#define I2C_EVENT_STOP 0x08 // STOP¼־⵽I2C STOPźʱ1 + +// I2CӻַԼ洢ַ +#define I2C_SLAVE_ADDR 0x5A // I2Cӻַ,Ӧ7λ2D +// #define I2C_SLAVE_ADDR 0x8A // I2Cӻַ,Ӧ7λ45 +#define REG_ADDR 0x86 // ԼЧ洢ַֻеյļĴַΪ0x86ʱŽӲ + +// ȫֱ +unsigned char xdata buffer[64]; // I2Cݻڴ洢յI2Cݣʹxdata洢Խʡdataοռ +unsigned char data_len; // յݳ +unsigned char recv_reg_addr_global; // 洢յļĴַ +bit isda; // 豸ַ־Ϊ1ʱʾȴ豸ַ +bit isma; // 洢ַ־Ϊ1ʱʾȴմ洢ַ +bit is_header_received; // ֡ͷ־Ϊ1ʱʾѽյ֡ͷ0xAA +// ־жڴݣѭӡжڴںʱ +unsigned char xdata log_buffer[128]; // ־ڴ洢ҪͨUART1־ +unsigned char log_idx = 0; // ־ָʾǰ־ݴ洢λ +unsigned char buffer_idx; // ׷ٵǰݴ洢λ + +/** + * @brief ʱ500ms + * @details ʵԼ500msʱ11.0592MHzϵͳʱ + * @param + * @return + */ +void Delay500ms(void) // @11.0592MHz +{ + unsigned char data i, j, k; // ֲʱ + + _nop_(); // ִһղָ΢ʱʱ + _nop_(); // ִһղָ΢ʱʱ + i = 22; // ʼʱi + j = 3; // ʼʱj + k = 227; // ʼʱk + do { // do-whileѭ + do { // вdo-whileѭ + while (--k); // ڲwhileѭk227ݼ0 + } while (--j); // вѭj3ݼ0 + } while (--i); // ѭi22ݼ0 +} + +/** + * @brief ʱ30ms + * @details ʵԼ30msʱ11.0592MHzϵͳʱ + * @param + * @return + */ +void Delay30ms(void) // @11.0592MHz +{ + unsigned char data i, j, k; // ֲʱ + + _nop_(); // ִһղָ΢ʱʱ + _nop_(); // ִһղָ΢ʱʱ + i = 2; // ʼʱi + j = 175; // ʼʱj + k = 220; // ʼʱk + do { // do-whileѭ + do { // вdo-whileѭ + while (--k); // ڲwhileѭk220ݼ0 + } while (--j); // вѭj175ݼ0 + } while (--i); // ѭi2ݼ0 +} + +void Delay10us(void) //@11.0592MHz +{ + unsigned char data i; + + i = 35; + while (--i); +} + + +/** + * @brief Ӳʼ + * @details GPIOģʽøŵĹģʽ + * @param + * @return + */ +void HardwareInit(void) +{ + // GPIOģʽ + // P1.0:BL_PWM, P1.2:LED, P1.1:루TP_INT + // P1.3:EN_6211, P1.6:EN_DISP + P1M0 = 0x4d; // P1ģʽƼĴ0P1.0P1.2P1.3P1.6Ϊ + P1M1 = 0x02; // P1ģʽƼĴ1P1.1Ϊ + + // P3.2:SCL, P3.3:SDA, P3.4:BL_EN(), P3.7:TP_SHUTDOWN() + P3M0 = 0xb0; // P3ģʽƼĴ0P3.4P3.7Ϊ + P3M1 = 0x00; // P3ģʽƼĴ1Ϊ׼˫ + + // Ĭ׼˫ + P5M0 = 0x00; // P5ģʽƼĴ0ΪĬ׼˫ + P5M1 = 0x00; // P5ģʽƼĴ1ΪĬ׼˫ +} + +/** + * @brief PWMʼ + * @details ʼPCAģ飬PWMڿLEDȻ豸 + * @param + * @return + */ +void PWMInit() +{ + CCON = 0x00; // PCAƼĴб־λ + CMOD = 0x08; // PCAʱΪϵͳʱӣʹⲿʹж + CL = 0x00; // PCA8λ + CH = 0x00; // PCA8λ + CCAPM1 = 0x42; // PCAģ1ΪPWMģʽʹܱȽ + PCA_PWM1 = 0x00; // PCAģ18λPWMֱΪ256 + CCAP1L = 0x80; // PWMռձΪ50% [(0xFF - 0x80) / 0xFF] + CCAP1H = 0x80; // CCAP1Lһ£ȷPWMռձȷ + CR = 1; // PCAʱʼPWM +} + +/** + * @brief I2Cʼ + * @details I2Cӻģʽôӻַж + * @param + * @return + */ +void I2CInit() +{ + // I2CӳΪP3.2(SCL)/P3.3(SDA) + P_SW2 = 0x30; // P_SW2Ϊ0x30ѡSCL_4/P3.2, SDA_4/P3.3 + + // չRAMģʽԱI2CؼĴ + P_SW2 |= 0x80; + + // I2Cӻģʽ + I2CCFG = 0x81; // ʹI2CӻģʽSCLʱΪϵͳʱ/16 + I2CSLADR = I2C_SLAVE_ADDR; // ôӻ豸ַΪ8A + I2CSLST = 0x00; // ӻ״̬Ĵ״̬־ + I2CSLCR = 0x78; // ʹܴӻģʽжϣSTARTSTOPRECVSEND¼ж + + // ˳չRAMģʽ + P_SW2 &= ~0x80; + + // ȫжʹ + EA = 1; + + // ʼû + isda = 1; // 豸ַ־1ʾȴ豸ַ + isma = 1; // 洢ַ־1ʾȴմ洢ַ + is_header_received = 0; // ֡ͷ־0δյ֡ͷ + buffer_idx = 0; // ʼΪ0ָ򻺳ʼλ + data_len = 0; // ݳȳʼΪ0 + I2CTXD = buffer[buffer_idx]; // ʼͼĴ׼͵һ +} + +/** + * @brief PWMռձȺ + * @details ռձȣ0-100PWMڿLEDȻ豸 + * @param duty_cycle ռձȣΧ0-100 + * @return + */ +void SetPWM(unsigned char duty_cycle) +{ + unsigned char ccap_value; // ڴ洢õCCAPֵ + unsigned char pwm_duty; // ڴ洢õռձȰٷֱ + + // 0x00-0xFFӳ䵽0-100%ռձ + pwm_duty = (duty_cycle * 100) / 255; + + // CCAPֵccap_value = 255 - (ռձ * 255 / 100) + // ΪPCAPWMǴCCAPֵʼΪߵƽ255ʱΪ͵ƽ + ccap_value = 255 - ((unsigned int)pwm_duty * 255 / 100); + + // PWMռձȣͬʱCCAP1LCCAP1Hȷֵһ + CCAP1L = ccap_value; + CCAP1H = ccap_value; +} + +/** + * @brief I2Cжϴ޸־λ+洢ַУ飩 + * @details I2C¼STARTRECVSENDSTOPʵI2Cӻͨ߼ + * @param + * @return + */ +void I2C_Isr() interrupt 24 +{ + // ֲ + unsigned char i; // ѭ + unsigned char recv_dev_addr; // ڴ洢յ豸ַ + unsigned char recv_reg_addr; // ڴ洢յļĴַ + unsigned char recv_data; // ڴ洢յ + + // P_SW2ĴֵԱںʱָ + _push_(P_SW2); + + // չRAMģʽԱI2CؼĴ + P_SW2 |= 0x80; + + // START¼⵽I2C STARTźʱִ + if (I2CSLST & I2C_EVENT_START) + { + I2CSLST &= ~I2C_EVENT_START; // START¼־ + is_header_received = 0; // ֡ͷ־״̬ + + // ջΪµ׼ + buffer_idx = 0; + data_len = 0; + + // ջݣȷÿͨſʼʱǸɾ + for(i=0; i<64; i++) + { + buffer[i] = 0; // ÿֽΪ0 + } + } + + // RECV¼յI2Cʱִ + else if (I2CSLST & I2C_EVENT_RECV) + { + I2CSLST &= ~I2C_EVENT_RECV; // RECV¼־ + + // Ƿȴ豸ַ + if (isda) + { + recv_dev_addr = I2CRXD; // ȡ豸ַ + buffer[buffer_idx++] = recv_dev_addr; // 豸ַ뻺 + if(buffer_idx >= 63) buffer_idx = 0; // ֹ + data_len++; + isda = 0; // 豸ַƥɹ豸ַ־ + } + + // Ƿȴմ洢ַ + else if (isma) + { + isma = 0; // 洢ַ־ + recv_reg_addr = I2CRXD; // ȡ洢ַĴַ + recv_reg_addr_global = recv_reg_addr; // 浽ȫֱ + + // Ĵַbuffer + buffer[buffer_idx++] = recv_reg_addr; // ѼĴַдbuffer־ܲ + if(buffer_idx >= 63) buffer_idx = 0; // ֹ + data_len++; + + // У洢ַ + if (recv_reg_addr == REG_ADDR) + { + // ַΪ0x96 + } + else if (recv_reg_addr == 0x94 || recv_reg_addr == 0x95) + { + // ַΪ0x940x95ֻӦӲ + } + else + { + // ַñ־λ + isda = 1; // 豸ַ־ + isma = 1; // ô洢ַ־ + I2CTXD = buffer[0]; // ׼ + + _pop_(P_SW2); // ָP_SW2Ĵֵ + return; // ֱӷأ + } + + I2CTXD = buffer[0]; // ׼ + } + + // 򣬽յͨ + else + { + recv_data = I2CRXD; // ȡյ + + // ݵԱ־ + buffer[buffer_idx++] = recv_data; + if(buffer_idx >= 63) buffer_idx = 0; // ֹ + data_len++; + + // ֻе洢ַΪ0x96ʱŽӲ + if (recv_reg_addr_global == REG_ADDR) + { + // ݽյPWMռձȣ0x00-0xFFӦ0-100% + SetPWM(recv_data); + } + } + } + + // SEND¼ҪI2Cʱִ + else if (I2CSLST & I2C_EVENT_SEND) + { + I2CSLST &= ~I2C_EVENT_SEND; // SEND¼־ + + // ǷյNAKӻδȷϣ + if (I2CSLST & 0x02) + { + I2CTXD = 0xff; // յNAKֹͣͣ0xff + } + else + { + static unsigned char send_idx = 0; + I2CTXD = buffer[send_idx++]; // յACKһ + if(send_idx >= data_len) send_idx = 0; + } + } + + // STOP¼⵽I2C STOPźʱִ + else if (I2CSLST & I2C_EVENT_STOP) + { + I2CSLST &= ~I2C_EVENT_STOP; // STOP¼־ + + // øֱ־λΪһͨ׼ + isda = 1; // 豸ַ־ + isma = 1; // ô洢ַ־ + is_header_received = 0; // ֡ͷ־ + + // յݵ־Աѭӡ + for(i=0; i= 127) log_idx = 0; // ֹ־ + } + + // ջݣȷÿηϺ󻺳Ǹɾ + for(i=0; i<64; i++) + { + buffer[i] = 0; // ÿֽΪ0 + } + + buffer_idx = 0; // û + data_len = 0; // ݳ + } + + // ָP_SW2Ĵֵȷϵͳ״̬ȷ + _pop_(P_SW2); +} + +/** + * @brief ޸forѭ壬 + * @details ʼӲѭʵϵͳ߼ + * @param + * @return + */ +void main() +{ + // ǰѭC51֧ѭڶ⣩ + unsigned char i; + + // Ӳʼ + HardwareInit(); // GPIOģʽ + PWMInit(); // ʼPWMģ + I2CInit(); // ʼI2Cӻģʽ + uart1_init(); // ʼ1LOGϢ + SetPWM(50); // ʼPWMռձΪ50% + + // P3.5ƽл߼LCD_RESET + P3 |= 0x20; // һP3.5 + Delay30ms(); // ӳ30ms + P3 &= ~0x20; // ڶP3.5 + Delay30ms(); // ӳ30ms + P3 |= 0x20; // ٴP3.5ձָߵƽ + // P3.7ƽл߼TP_SHUTDOWN + P3 |= 0x80; // һP3.7 + Delay30ms(); // ӳ30ms + P3 &= ~0x80; // ڶP3.7 + Delay30ms(); // ӳ30ms + P3 |= 0x80; // ٴP3.7ձָߵƽ + + + + // LEDBL_ENø + P1 |= 0x04; // P1.2ΪߵƽLED + P3 |= 0x10; // P3.4ΪߵƽBL_ENø + + // ʼϢͨUART1͵λ + LOG("System initialized\r\n"); // ϵͳʼ + + // ѭӡ־жڴںʱ + while (1) + { + // ־Ƿ + if (log_idx > 0) + { + // ־ӡʹǰi + for (i=0; i +#include "helper.h" +#include "typedef.h" + + +#define MY_DEBUG 1 + +#if MY_DEBUG + #define LOG printf +#else + #define LOG printf(""); +#endif + +/* +#define _LOG_ENABLE +#ifdef _LOG_ENABLE + #define LOG printf +#else + #define LOG(...) +#endif +*/ + + +#define VERSION_NUMBER "20220709-0901" + + + +/********************************************************************/ + +//STC8H1K08Աӣ ȡ룺1234 +//https://pan.baidu.com/s/1EfH7I16LwM0gtapMV0oONg + +//STCƬ: +//https://view.inews.qq.com/a/20220304A00VOV00 + +//keil C51ģʽ: +//keil memory model: +//https://wenku.baidu.com/view/26cecb842b4ac850ad02de80d4d8d15abe23007e.html + +//KEILŻȼ: +//https://jingyan.baidu.com/article/546ae185d915971148f28c69.html + +// KeilOption optimizationȼŻ: +// https://blog.csdn.net/qq_20017379/article/details/122770788 + +//KEILSTCͺŵƬ3ַ: +//https://wenku.baidu.com/view/904916af8462caaedd3383c4bb4cf7ec4afeb6ba.html + +#endif + diff --git a/main.c b/main.c new file mode 100644 index 0000000..dece65b --- /dev/null +++ b/main.c @@ -0,0 +1,340 @@ +/* + * 文件名: main.c + * 功能: STC8G1K08 I2C设备扫描器 + * 描述: + * 1. 作为I2C主机扫描所有7位地址0x00-0x7F,接收并记录所有应答 + * 2. 每5秒自动进行一次扫描 + * 3. 每次扫描完成后通过UART输出所有应答地址 + * 芯片: STC8G1K08 + * 系统时钟: 11.0592MHz + */ + +#include "reg51.h" +#include "intrins.h" +#include + +/* 定义STC8G专用寄存器 */ +sfr P_SW2 = 0xba; // 端口切换寄存器 +sfr AUXR = 0x8e; // 辅助寄存器 +sfr T2L = 0xd7; // 定时器2低字节 +sfr T2H = 0xd6; // 定时器2高字节 + +/* 定义I2C相关寄存器(使用xdata指针访问扩展SFR) */ +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) // I2C配置寄存器 +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) // I2C主机控制寄存器 +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) // I2C主机状态寄存器 +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) // I2C从机控制寄存器 +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) // I2C从机状态寄存器 +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) // I2C从机地址寄存器 +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) // I2C数据发送寄存器 +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) // I2C数据接收寄存器 + +/* 定义端口模式寄存器 */ +sfr P1M1 = 0x91; // P1模式配置寄存器1 +sfr P1M0 = 0x92; // P1模式配置寄存器0 + +/* 定义I2C引脚 */ +sbit SDA = P1^4; // I2C数据线 +sbit SCL = P1^5; // I2C时钟线 + +/* 定义LED引脚 */ +sbit LED = P1^2; // 状态指示LED + +/* 全局变量 */ +bit busy; // I2C忙碌标志位 + +/** + * @brief I2C中断服务函数 + * @note 用于处理I2C通信完成事件 + */ +void I2C_Isr() interrupt 24 // 关键修复:中断号从24改为7 +{ + _push_(P_SW2); // 保存P_SW2寄存器 + P_SW2 |= 0x80; // 访问扩展寄存器 + if (I2CMSST & 0x40) // 检查中断标志位(BIT6: 主机操作完成) + { + I2CMSST &= ~0x40; // 清除中断标志 + busy = 0; // 清除忙碌标志 + } + _pop_(P_SW2); // 恢复P_SW2寄存器 +} + +/** + * @brief 延时函数 + * @param ms 延时毫秒数 + * @note 系统时钟11.0592MHz + */ +void Delay_ms(unsigned int ms) +{ + unsigned int i, j; + for (i = 0; i < ms; i++) + { + for (j = 0; j < 1100; j++); // 修正延时参数,更准确的1ms + } +} + +/** + * @brief 等待I2C操作完成 + */ +void I2C_Wait() +{ + while(!(I2CMSST & 0x40)); // 等待中断标志置位 + I2CMSST &= ~0x40; // 清除中断标志 +} + +/** + * @brief 发送I2C起始信号 + */ +void I2C_Start() +{ + busy = 1; // 设置忙碌标志 + I2CMSCR = 0x81; // 发送START命令(0x80=主机模式,0x01=START) + while (busy); // 等待操作完成 +} + +/** + * @brief 发送I2C数据 + * @param dat 要发送的数据 + */ +void I2C_SendData(unsigned char dat) +{ + I2CTXD = dat; // 写数据到发送缓冲区 + busy = 1; // 设置忙碌标志 + I2CMSCR = 0x82; // 发送SEND命令(0x80=主机模式,0x02=SEND) + while (busy); // 等待操作完成 +} + +/** + * @brief 接收I2C应答信号 + */ +void I2C_RecvACK() +{ + busy = 1; // 设置忙碌标志 + I2CMSCR = 0x83; // 发送读ACK命令(0x80=主机模式,0x03=RECV ACK) + while (busy); // 等待操作完成 +} + +/** + * @brief 发送I2C停止信号 + */ +void I2C_Stop() +{ + busy = 1; // 增加busy标志,保持逻辑一致 + I2CMSCR = 0x86; // 发送STOP命令(0x80=主机模式,0x06=STOP) + while (busy); // 等待操作完成 +} + +/** + * @brief I2C初始化函数 + * @note 配置P1.4为SDA,P1.5为SCL,设置50kHz通信速率,启用中断 + */ +void I2C_Init() +{ + /* 配置端口模式 */ + P1M0 = 0x04; // P1.2设置为推挽输出(LED),P1.4和P1.5保持准双向口 + P1M1 = 0x00; + + /* 访问扩展寄存器 */ + P_SW2 = 0x80; + + /* 配置I2C参数 */ + // 0xF3 = 11110011 + // bit7=1: 启用I2C + // bit6=1: 主机模式 + // bit5=1: 启用I2C中断(关键修复:开启中断) + // bit4~0=0x13: MSSPEED=19,计算50kHz:11059200/(2*(19+4)*2)=~50kHz + I2CCFG = 0xF3; + + /* 初始化I2C状态 */ + I2CMSST = 0x00; + + /* 启用全局中断和I2C中断 */ + EA = 1; // 全局中断使能 +} + +/* I2C扫描缓冲区,用于存储检测到的设备地址 */ +unsigned char xdata i2c_scan_buffer[128]; // 7位地址最多128个 +unsigned char scan_count = 0; // 扫描到的设备数量 + +/** + * @brief 扫描指定I2C 7位地址 + * @param addr 要扫描的7位I2C地址(0x00-0x7F) + * @return 1表示收到应答,0表示无应答 + */ +bit I2C_ScanAddress(unsigned char addr) +{ + bit ack_received = 0; // 应答接收标志 + + /* 跳过保留地址0x00(通用呼叫地址) */ + if (addr == 0x00) + { + return 0; + } + + I2C_Start(); // 发送起始信号 + I2C_SendData(addr << 1); // 7位地址左移+读写位(0=写) + I2C_RecvACK(); // 接收应答信号 + + /* 检查是否收到ACK(I2CMSST的bit1为0表示收到ACK) */ + if (!(I2CMSST & 0x02)) + { + ack_received = 1; // 收到应答 + } + + I2C_Stop(); // 发送停止信号 + + return ack_received; +} + +/** + * @brief 扫描所有I2C 7位地址(0x00-0x7F) + * @note 将所有应答的设备地址存储到缓冲区中 + */ +void I2C_ScanAllAddresses(void) +{ + unsigned char i; + scan_count = 0; // 清零扫描计数 + + /* 遍历所有7位I2C地址(规范扫描范围) */ + for (i = 0; i < 128; i++) + { + if (I2C_ScanAddress(i)) // 如果收到应答 + { + /* 防止缓冲区溢出 */ + if (scan_count < 128) + { + i2c_scan_buffer[scan_count++] = i; // 将7位地址存入缓冲区 + } + Delay_ms(1); // 短暂延时,避免总线冲突 + } + } +} + +/** + * @brief UART1初始化函数 + * @note 波特率115200bps,系统时钟11.0592MHz + */ +void uart1_init(void) +{ + SCON = 0x50; // 8位UART,允许接收 + AUXR |= 0x01; // 串口1选择定时器2为波特率发生器 + AUXR &= 0xFB; // 定时器2时钟为12T模式 + T2L = 0xFE; // 设置定时器2初值 + T2H = 0xFF; // 设置定时器2初值 + AUXR |= 0x10; // 启动定时器2 + TI = 1; // 设置TI标志,用于printf重定向 +} + +/** + * @brief putchar重定向函数,用于printf输出 + * @param c 要输出的字符 + * @return 输出的字符 + */ +char putchar(char c) +{ + SBUF = c; // 写入发送缓冲区 + while (!TI); // 等待发送完成 + TI = 0; // 清除发送完成标志 + return c; +} + +/** + * @brief 通过UART打印I2C扫描结果 + * @note 输出格式化的扫描结果,包括设备数量和地址列表 + */ +void UART_PrintScanResults(void) +{ + unsigned char i; + + printf("\r\n=== I2C扫描结果 ===\r\n"); + // printf("检测到的7位I2C设备数量: %d\r\n", scan_count); + + if (scan_count > 0) + { + printf("应答地址列表(7位):\r\n"); + for (i = 0; i < scan_count; i++) + { + printf("0x%02X ", i2c_scan_buffer[i]); // 以十六进制格式输出7位地址 + if ((i + 1) % 8 == 0) // 每8个地址换行 + { + printf("\r\n"); + } + } + printf("\r\n"); + printf("对应发送地址(8位写模式):\r\n"); + for (i = 0; i < scan_count; i++) + { + printf("0x%02X ", i2c_scan_buffer[i] << 1); + if ((i + 1) % 8 == 0) // 每8个地址换行 + { + printf("\r\n"); + } + } + printf("\r\n"); + } + else + { + printf("未检测到任何I2C设备\r\n"); + } + printf("==================\r\n"); +} + + + +void Delay5000ms(void) //@11.0592MHz +{ + unsigned char data i, j, k; + + _nop_(); + _nop_(); + i = 211; + j = 30; + k = 11; + do + { + do + { + while (--k); + } while (--j); + } while (--i); +} + +/** + * @brief 主函数 + */ +void main() +{ + /* 初始化各模块 */ + I2C_Init(); // 初始化I2C + uart1_init(); // 初始化UART1 + + LED = 0; // 点亮LED(推挽输出低电平点亮) + + /* 输出启动信息 */ + printf("\r\n"); + printf("========================================\r\n"); + printf(" STC8G1K08 I2C设备扫描器\r\n"); + printf("========================================\r\n"); + printf("系统初始化完成...\r\n"); + printf("每5秒自动扫描一次I2C总线\r\n"); + printf("========================================\r\n"); + + /* 主循环 */ + while (1) + { + /* LED闪烁指示扫描开始 */ + LED = 1; // 熄灭LED + Delay_ms(100); + LED = 0; // 点亮LED + + printf("\r\n[开始扫描...]\r\n"); + I2C_ScanAllAddresses(); // 执行I2C扫描 + printf("[扫描完成]\r\n"); + + UART_PrintScanResults(); // 输出扫描结果 + + scan_count = 0; // 清零扫描计数,准备下一次扫描 + + Delay5000ms(); // 等待5秒后再次扫描 + } +} \ No newline at end of file