salut
je veux adapter ce code pour pic16f877a j'ai presque tous compris j'ai seulement un petit probleme avec la partie "init" pour quoi on lise le registre UART apres le reset ? pour quoi on compare l'octet recu par la valeur 0x8000 si l'UART contient seulement 8 bit ? et qui sont les message envoiyer par le mc68ch11 en cas d'erreure ? et pour quoi on envoi 255 apres la boucle de teste ? et merci a tous qui peut m'aider
Proc Init {
var Error,Adress,Counter,Byte;
print(" Сброс процессора...");
FDPTR = 0;EDPTR = 0;
// настраиваем порт
SetupComm(1200,8,0,0);
// импульс сброса процессора
RTS = 0;Delay(100);RTS = 1;Delay(100);RTS = 0;Delay(100);
// загружаем bootloader
while {
Byte = UART;
if(Byte = 0x8000) { break; }
}
print(" Загрузка Bootloadera...");
UART = 255;
****************************** ****************************** *******
* Модуль для микроконтроллера MC68HC11E9 (Motorola). *
* *
* Чтение и запись EEPROM. *
****************************** ****************************** *******
[Description]
Location = "Motorola\MC68HC11E9";
Info = " Микросхема: MC68HC11E9.",
" Объем EEPROM: 512 байт",
" Объем ROM: 12288 байт",
" ",
" Выполняемые операции: Чтение, запись, проверка.",
" ",
" Автор модуля: fomalex@tut.by";
Buffer1 = "ROM",12288;
Buffer2 = "EEPROM",512
Picture = "MC68HC11E9.bmp";
UART = 1;
[Menu]
ReadEEPROM = "&Чтение EEPROM",ReadEEPROMButton,"Чтен ие EEPROM";
WriteEEPROM = "&Запись",WriteEEPROMButton,"З аписать EEPROM";
ReadROM = "Чтение ROM",ReadButton,"Чтение ROM";
Compare = "&Проверка записи",CheckButton,"Проверка записи";
Init = "Загр&узка загрузчика",ChipInfoButton,"За грузка загрузчика";
Info = "&Информация о модуле",ModuleInfoButton,"Пока зать информацию о модуле";
[Interface]
cb = CheckBox,"Производить загрузку Bootloader-a",1;
[Code]
define EEPROM_BEGIN 0xB600
define EEPROM_END 0xB7FF
define EEPROM_SIZE 512
define ROM_BEGIN 0xD000
define ROM_SIZE 12288
dim Bootloader[] =
{$CE, $10, $00, $6F, $2C, $86, $30, $A7, $2B, $86, $0C, $A7, $2D, $6F, $35, $86,
$10, $8D, $41, $4A, $26, $FB, $86, $A5, $A7, $2F, $1F, $2E, $20, $FC, $A6, $2F,
$81, $52, $27, $4C, $81, $57, $27, $02, $20, $F0, $8D, $4A, $1F, $2E, $20, $FC,
$A6, $2F, $C6, $16, $E7, $3B, $18, $E7, $00, $C6, $17, $E7, $3B, $8D, $15, $6F,
$3B, $C6, $02, $E7, $3B, $18, $A7, $00, $C6, $03, $E7, $3B, $8D, $06, $6F, $3B,
$8D, $14, $20, $C6, $36, $EC, $0E, $C3, $9C, $40, $ED, $1C, $86, $10, $A7, $23,
$1F, $23, $10, $FC, $32, $39, $1F, $2E, $80, $FC, $18, $A6, $00, $A7, $2F, $39,
$8D, $04, $8D, $F2, $20, $A4, $1F, $2E, $20, $FC, $A6, $2F, $1F, $2E, $20, $FC,
$E6, $2F, $18, $8F, $39, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
$FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF}
//****************************** *****************************
//* Read - процедура чтения **
//****************************** *****************************
Proc ReadEEPROM {
var Error,Adress,Byte;
if(Interface0 = 1) {
Error = Init;
if(Error = 0x8000) { return; }
}
print(" Чтение EEPROM...");
Adress = EEPROM_BEGIN;
PBMax = EEPROM_SIZE;
PBPos = 0;
EDPTR = 0;
while(PBPos != EEPROM_SIZE) {
UART = 0x52;
Byte = Adress >> 8; UART = Byte; UART = Adress;
Byte = UART;
if(Byte = 0x8000) {
print(" Ошибка!");
break;
}
EDATA = Byte;
Adress++;PBPos++;EDPTR++;
}
if(Byte != 0x8000) {
print("");
print(" Чтение завершено. %d байт прочитано.",PBPos);
}
}
//****************************** *****************************
Proc WriteEEPROM {
var Error,Adress,Byte,Data;
if(Interface0 = 1) {
Error = Init;
if(Error = 0x8000) { return; }
}
print(" Запись EEPROM");
Adress = EEPROM_BEGIN;
PBMax = EEPROM_SIZE;
PBPos = 0;
EDPTR = 0;
while(PBPos != EEPROM_SIZE) {
UART = 0x57;
Byte = Adress >> 8; UART = Byte; UART = Adress;
Data = EDATA; UART = Data;
Byte = UART;
if(Byte = 0x8000) {
print(" Ошибка записи. Тайм-аут.");
break;
}
if(Byte != Data) {
print(" Ошибка записи. Адрес %h. Записан байт %b, прочитан %b",Adress,Data,Byte);
Byte = 0x8000;
break;
}
Adress++;PBPos++;EDPTR++;
}
if(Byte != 0x8000) {
print("");
print(" Запись завершена. %d байт записано.",PBPos);
}
}
//****************************** *****************************
//****************************** *****************************
//* Compare - процедура проверки **
//****************************** *****************************
Proc Compare {
var Error,Adress,Byte;
if(Interface0 = 1) {
Error = Init;
if(Error = 0x8000) { return; }
}
print(" Проверка EEPROM");
Adress = EEPROM_BEGIN; PBMax = EEPROM_SIZE;
PBPos = 0; EDPTR = 0; Error = 0;
while(PBPos != EEPROM_SIZE) {
UART = 0x52;
Byte = Adress >> 8;
UART = Byte;
UART = Adress;
Byte = UART;
if(Byte = 0x8000) {
print(" Ошибка!");
break;
}
if(Byte != EDATA) {
Error++;
ESEL = 0;
}
else {ESEL = 1;}
Adress++;PBPos++;EDPTR++;
}
if(Byte != 0x8000) {
print("");
print(" Проверка завершена. %d байт проверено. Несовпадений: %d",PBPos,Error);
}
}
//****************************** *****************************
// ****************************** ****************************
// * Boot - процедура инициализации заргузчика **
// ****************************** ****************************
Proc Init {
var Error,Adress,Counter,Byte;
print(" Сброс процессора...");
FDPTR = 0;EDPTR = 0;
// настраиваем порт
SetupComm(1200,8,0,0);
// импульс сброса процессора
RTS = 0;Delay(100);RTS = 1;Delay(100);RTS = 0;Delay(100);
// загружаем bootloader
while {
Byte = UART;
if(Byte = 0x8000) { break; }
}
print(" Загрузка Bootloadera...");
UART = 255;
PBMax = 133;
Adress = 0;
while(Adress != 133) {
Byte = Bootloader[Adress];
UART = Byte;
Error = UART;
if(Error = 0x8000) {
print("\; Ошибка загрузки. Нет эха от контроллера.");
return(0x8000);
}
if(Error != Byte) {
print("\; Ошибка загрузки. Нет эха от контроллера.");
print(" Отправлен байт %b, принят байт %b",Byte,Error);
Error = 0x8000;
return(0x8000);
}
Adress++;PBPos++;
}
// настраиваем порт
SetupComm(9600,8,0,0);
Counter = 10;
while {
Error = UART;
if(Error = 0x8000) {
Counter--;
if(Counter = 0) {
print("\; Ошибка загpyзки. Нет ответа от контpоллеpа.",Error);
break;
}
}
else {
if (Error = 0xA5) {
print("\; Загрузка успешно завершена.");
interface0 = 0;
break;
}
else {print(" Ошибка загрузки. Принят байт %d",Error); }
//break;
}
}
return(Error);
}
Proc ReadROM {
var Error,Adress,Byte;
if(Interface0 = 1) {
Error = Init;
if(Error = 0x8000) { return; }
}
print(" Чтение ROM...");
Adress = ROM_BEGIN;
PBMax = ROM_SIZE;
PBPos = 0;
FDPTR = 0;
while(PBPos != ROM_SIZE) {
UART = 0x52;
Byte = Adress >> 8; UART = Byte; UART = Adress;
Byte = UART;
if(Byte = 0x8000) {
print(" Ошибка!");
break;
}
FDATA = Byte;
Adress++;PBPos++;FDPTR++;
}
if(Byte != 0x8000) {
print("");
print(" Чтение завершено. %d байт прочитано.",PBPos);
}
}
Proc Info {
print("");
print(" Модуль для программирования/чтения содержимого EEPROM");
print(" микроконтроллера MC68HC11E9");
print(" Файл модуля MC68HC11E9.chl");
print("");
print(" Поддерживает следующие функции:");
print(" Чтение EEPROM");
print(" Запись EEPROM");
print(" Проверка EEPROM");
print(" Чтение ROM");
print("");
print(" Автор модуля: fomalex@tut.by");
}
-----