[Description]

Location = "Mobila\Таблица датчиков";
Info = " Автор модуля: fomalex@tut.by";
Buffer1 = "FLASH",16384;
UART = 1;
Voltage = 5.0;

[Menu]

Write = "&Загрузить",WriteButton,"Загрузить прошивку";
ReadEEPROM = "&Прочитать EEPROM",ReadEEPROMButton,"Прочитать EEPROM";
WriteEEPROM = "&Записать EEPROM",WriteEEPROMButton,"Записать EEPROM";
Xor = "&Захорить";

[Interface]

ComboBox(Speed,"Скорость",10,40,90,"4800","4900","5000","9600","19200",1);

[Host]

Proc Write {
    
    var Error,FDPTR,LastAddr,EEPROMAddress,Temp;

    if(Speed = 0) {
        print("  Скорость 4800");
        SetupUART(4800,8,0,0);
    }
    if(Speed = 1) {
        print("  Скорость 4900");
        SetupUART(4900,8,0,0);
    }
    if(Speed = 2) {
        print("  Скорость 5000");
        SetupUART(5000,8,0,0);
    }
    if(Speed = 3) {
        print("  Скорость 9600");
        SetupUART(9500,8,0,0);
    }
    if(Speed = 4) {
        print("  Скорость 19200");
        SetupUART(19200,8,0,0);
    }
    DTR = 1; RTS = 1;

    while
    {
        Error = UART;
        if(Error.15 = 1) { break; }
    }
    FDPTR = 0;
    // определяем количество данных
    while
    {
      Error = FBUF[FDPTR];
      if(Error == 255) { break;}
      FDPTR++;        
    }
    LastAddr = FDPTR / 6;
    print("Количество загружаемых значений: %i",LastAddr);
    PBPos = 0;PBMax = LastAddr;
    print("Загрузка данных...");
    LastAddr = FDPTR;
    LastAddr--;
    FDPTR = 0;
    EEPROMAddress = 0;
    while
    {
        Error = GetNextValue(FDPTR);
        Temp = Error >> 8;
        Temp = Temp & 255;
        print("Адрес %i, Значение %i... ",EEPROMAddress,Error);
        Temp = WriteByte(EEPROMAddress,Temp);
        //if(Temp = 1) { break; }
        EEPROMAddress++;
        Error = Error & 255;
        Error = WriteByte(EEPROMAddress,Error);
        //if(Error = 1) { break; }
        EEPROMAddress++;
        print("\;OK.");
        FDPTR = FDPTR + 6;
        if(FDPTR >= LastAddr) {break;}
        PBPos++;            
    }
}

Proc GetNextValue(Address)
{
    var Temp,Value;

    Value = FBUF[Address];
    Value = Value - '0';
    Address++;
    Temp = FBUF[Address];
    Temp = Temp - '0';
    Value = Value * 10;
    Value = Value + Temp;
    Address++;
    Temp = FBUF[Address];
    Temp = Temp - '0';
    Value = Value * 10;
    Value = Value + Temp;
    Address++;
    Temp = FBUF[Address];
    Temp = Temp - '0';
    Value = Value * 10;
    Value = Value + Temp;
    return(Value);
}

Proc WriteByte(Address,Value)
{
    var Error,Temp;
    UART = 'w';
    Error = UART;
    if(Error = 0x8000) 
    {
        print("\; Ошибка записи. Таймаут");
        return(1);
    }
    if(Error != 'A')
    {
        print("\; Ошибка записи. Неизвестный ответ от устойства.");
        return(1);
    }
    // отправляем три цифры адреса
    Error = Address >> 8;
    Error = Error & 15;
    if(Error < 10)  { Error = Error + '0'; } 
    else            { Error = Error + 55; }
    UART = Error;
    Error = Address >> 4;
    Error = Error & 15;
    if(Error < 10)  { Error = Error + '0'; }
    else            { Error = Error + 55; }
    UART = Error;
    Error = Address & 15;
    if(Error < 10)  { Error = Error + '0'; }
    else            { Error = Error + 55; }
    UART = Error;
    // должен быть принят символ 'D'
    Error = UART;
    if(Error = 0x8000) 
    {
        print("\; Ошибка записи. Таймаут");
        return(1);
    }
    if(Error != 'D')
    {
        print("\; Ошибка записи. Неизвестный ответ от устройства.");
        return(1);
    }
    // отправляем данные
    Error = Value >> 4;
    Error = Error & 15;
    if(Error < 10)  { Error = Error + '0'; }
    else            { Error = Error + 55; }
    UART = Error;
    Error = Value & 15;
    if(Error < 10)  { Error = Error + '0'; }
    else            { Error = Error + 55; }
    UART = Error;
    // принимаем ответ - прочитанный байт
    Error = UART;
    if(Error = 0x8000) 
    {
        print("\; Ошибка записи. Таймаут");
        return(1);
    }
    if(Error > '9') {Error = Error - 55;}
    else {Error = Error - '0';}
    Temp = UART;
    if(Temp = 0x8000) 
    {
        print("\; Ошибка записи. Таймаут");
        return(1);
    }
    if(Temp > '9') {Temp = Temp - 55;}
    else {Temp = Temp - '0'; }
    Error = Error << 4;
    Error = Error | Temp;
    Error = Error & 255;
    if(Error != Value)
    {
        print("\; Ошибка записи. Записан байт %h, прочитан байт %h.",Value,Error);
        return(1);
    }
    return(0);
}




