Краткое описание принципиальной схемы. Программатор общается с компьютером через последовательный порт RS232. Преобразователь уровня выполнен на транзисторах VT1 иVT2. Конденсатор С7 служит аккумулятором отрицательного напряжения -12 В, получаемого через диод VD1 из приемной линии. Это напряжение используется для передачи данных от программатора. Такая схема не требует отрицательного источника напряжения -12В. Транзистор VT1 служит для передачи данных от программатора в компьютер. Такая схема имеет один недостаток: уровень логического "0" будет не +12В, а +5В. Но по стандарту RS232 уровень может составлять +3...+12 В. Так что стандарту соответствует. Но некоторые старые платы портов могут не работать с таким уровнем. В таком случае придется или сменить плату или использовать специализированную микросхему преобразователя уровня RS232 - ТТЛ. Микросхемы КРЕН8Б и КРЕН5А служат стабилизаторами напряжения. Напряжение +12В используется только для программирования высоковольтных версий контроллеров. Транзисторы VT4 и VT3 составляют ключ, который управляет подачей напряжения программирования на контроллер. Так как падение напряжения на транзисторе VT3 и диоде VD4 составит примерно 1.5 вольта, то для компенсации этого падения уровень стабилизации +12В повышен диодом VD3 примерно на 0.6В. В этом случае напряжение программирования составит примерно 11.5 В, что соответствует нижнему уровню напряжения программирования. Краткая инструкция по сборке программатора. Сборка программатора потребует от вас некоторых навыков в сборке радиоэлектронных устройств. Печатную плату вам придется развести самостоятельно. Я собрал программатор на монтажной плате, соединения выполнены кусками провода. Для питания программатора я использую адаптер питания китайского производства. Их сейчас продается большая номенклатура. Нужно убедится только, что он выдает достаточный уровень напряжения. Иначе вам придется разобрать адаптер и домотать вторичную обмотку, как пришлось сделать мне. Для проверки вы можете сначала собрать только преобразователь уровня и установить запрограммированный контроллер AT90S4414. Подав +5 вольт, вы можете уже проверить работоспособность программатора без установки программируемого контроллера. Для этого подключите его к компьютеру, запустите программу, выберите нужный порт и попробуйте выполнить операцию чтения сигнатурных байтов. Если линия связи с компьютером исправна, то в результате должны прочитаться байты FFh. Если же вы получите сообщение, что компьютер не получает отклика от компьютера, то видимо, вы что-то сделали неправильно. Так же вы можете попробовать выполнить операцию чтения. Для этого снимите флажок "Автоматическая установка параметров". Результатом чтения должны быть байты FFh. Также вы можете попробовать закорачивать линии порта P0.0-P0.7 (контакты 39 - 32 соответственно на панели для программируемого контроллера) на корпус. Выполняя операцию чтения, вы будете видеть, что будут читаться байты не FFh, а например, FEh, EFh, F7h, 7Fh ... в зависимости от заземленного вывода. Если это все работает, вы можете установить контроллер AT89C51 в панель и выполнить операцию чтения сигнатурных байтов. Если они прочитаются правильно, то ваш программатор практически работоспособен. Остается запаять оставшиеся детали и проверить программатор на программирование. Дальше читать могут только те, кто только пытается научится создавать программное обеспечение для встроенных систем реального времени. Если вы еще не имеете опыта в написании программ, то вы можете использовать следующую маленькую программу для теста. Если к любому выводу контроллера подлючить светодиод, то он будет мигать(при тактовой частоте 8 Мгц - примерно 1 раз в секунду). Возможно ваш ассемблер использует другой формат директив (например, перед директивами org и end может понадобится точка), тут уж вы сами разбирайтесь. Ассемблируйте эту программу и зашейте в контроллер. ; ************************************************************ ; * Тестовая пpогpамма для микpоконтpоллеpа типа 8051. * ; ************************************************************ org 0 ljmp begin ; пеpеход на начало пpогpаммы org 11 ; пеpеход на пpогpаммy обpаботки ljmp timer_int ; пpеpывания от таймеpа 0 begin: mov sp,#100 ; yстанавливаем yказатель стека mov tmod,#1 ; задаем pежим pаботы таймеpа 0 - ; 16-разpядный счетчик mov p0,#255 mov p1,#255 mov p2,#255 mov p3,#255 setb et0 ; yстанавливаем бит ET0 - pазpешаем ; пpеpывание от таймеpа 0 setb ea ; yстанавливаем бит EA - pазpешаем ; пpеpывания от всех источников setb tr0 ; yстанавливаем бит TR0 - pазpешаем ; счет таймеpy 0 mov r2,#0 cikl: cjne r2,#5,cikl ; ждем, пока R2 не станет равным 5 perekl: mov r2,#0 ; обнyляем R2 xrl p0,#255 ; инвертируем содержимое всех портов xrl p1,#255 xrl p2,#255 xrl p3,#255 ajmp cikl ; переход на начало цикла ; ************************************************************************ ; * Подпpогpамма обpаботки пpеpывания от таймеpа 0. * ; * содеpжимое pегистpа R2 yвеличивается на 1. * ; * * ; * Пpи частоте кваpцевого pезонатоpа 8 Мгц пpеpывание бyдет * ; * пpоисходить чеpез 65536 x 1.5 = 98304 микpосекyнды, т.е. пpимеpно * ; * чеpез 0.1 с. * ; * * ; ************************************************************************ timer_int: inc r2 reti end