8-900-374-94-44
[email protected]
Slide Image
Меню

Программирование pic16f946 – PIC16F946 Datasheet(PDF) — Microchip Technology

Серия pic16f946 (Microchip)

РазделМикроконтроллеры широкого назначения
Ядро
Объём памяти программ
Объём EEPROM памяти
Объём оперативной памяти
Напряжение питания
Рабочая температура

www.compel.ru

Прошивка PIC микроконтроллеров с «нуля». / Микроконтроллеры / Блоги по электронике

Итак, пришло время изучать микроконтроллеры, а потом и их программировать, а так же хотелось собирать устройства на них, схем которых сейчас в интернете ну просто море. Ну нашли схему, купили контроллер, скачали прошивку….а прошивать то чем??? И тут перед радиолюбителем, начинающим осваивать микроконтроллеры, встает вопрос – выбор программатора! Хотелось бы найти оптимальный вариант, по показателю универсальность — простота схемы — надёжность. «Фирменные» программаторы и их аналоги были сразу исключены в связи с довольно сложной схемой, включающей в себя те же микроконтроллеры, которые необходимо программировать. То есть получается «замкнутый круг»: что бы изготовить программатор, необходим программатор. Вот и начались поиски и эксперименты! В начале выбор пал на PIC JDM. Работает данный программатор от com порта и питается от туда же. Был опробован данный вариант, уверенно запрограммировал 4 из 10 контроллеров, при питании отдельном ситуация улучшилась, но не на много, на некоторых компьютерах он вообще отказался что либо делать да и защиты от «дурака» в нем не предусмотрено. Далее был изучен программатор Pony-Prog. В принципе, почти тоже самое что и JDM.Программатор «Pony-prog», представляет очень простую схему, с питанием от ком-порта компьютера, в связи с чем, на форумах, в Интернете, очень часто появляются вопросы по сбоям при программировании того, или иного микроконтроллера. В результате, выбор был остановлен на модели «Extra-PIC». Посмотрел схему – очень просто, грамотно! На входе стоит MAX 232 преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых схемах с уровнями ТТЛ или КМОП, не перегружает по току COM-порт компьютера, так как использует стандарт эксплуатации RS232, не представляет опасности для COM-порта.Вот первый плюс!
Работоспособен с любыми COM-портами, как стандартными (±12v; ±10v) так и с нестандартными COM-портами некоторых моделей современных ноутбуков, имеющих пониженные напряжения сигнальных линий, вплоть до ±5v – еще плюс! Поддерживается распространёнными программами IC-PROG, PonyProg, WinPic 800 (WinPic800) и другими – третий плюс!
И питается это все от своего собственного источника питания!
Было решено – надо собирать! Так в журнале Радио 2007 №8 был найден доработанный вариант этого программатора. Он позволял программировать микроконтроллеры в двух режимах.
Известны два способа перевода микроконтроллеров PICmicro в режим программирования:
1.При включённом напряжении питания Vcc поднять напряжение Vpp (на выводе -MCLR) от нуля до 12В
2.При выключенном напряжении Vcc поднять напряжение Vpp от нуля до 12В, затем включить напряжение Vcc
Первый режим — в основном для приборов ранних разработок, он накладывает ограничения на конфигурацию вывода -MCLR, который в этом случае может служить только входом сигнала начальной установки, а во многих микроконтроллерах предусмотрена возможность превратить этот вывод в обычную линию одного из портов. Это еще один плюс данного программатора.
Схема его приведена ниже:


Крупнее
Все было собрано на макетке и опробовано. Все прекрасно и устойчиво работает, глюков замечено небыло!
Была отрисована печатка для этого программатора.
depositfiles.com/files/mk49uejin
все было собрано в открытый корпус, фото которого ниже.


Соединительный кабель был изготовлен самостоятельно из отрезка восьмижильного кабеля и стандартных комовских разьемах, никакие нуль модемные тут не прокатят, предупреждаю сразу! К сборке кабеля следует отнестись внимательно, сразу избавитесь от головной боли в дальнейшем. Длина кабеля должна быть не более полутора метров.
Фото кабеля

Итак, программатор собран, кабель тоже, наступил черед проверки всего этого хозяйства на предмет работоспособности, поиск глюков и ошибок.
Сперва наперво устанавливаем программу IC-prog, которую можно скачать на сайте разработчика www.ic-prog.com, Распакуйте программу в отдельный каталог. В образовавшемся каталое должны находиться три файла:
icprog.exe — файл оболочки программатора.
icprog.sys — драйвер, необходимый для работы под Windows NT, 2000, XP. Этот файл всегда должен находиться в каталоге программы.
icprog.chm — файл помощи (Help file).
Установили, теперь надо бы ее настроить.
Для этого:
1.(Только для Windows XP): Правой кнопкой щёлкните на файле icprog.exe. «Свойства» >> вкладка «Совместимость» >> Установите «галочку» на «Запустить программу в режиме совместимости с:» >>выберите «Windows 2000».
2.Запустите файл icprog.exe. Выберите «Settings» >> «Options» >> вкладку «Language» >> установите язык «Russian» и нажмите «Ok».
Согласитесь с утверждением «You need to restart IC-Prog now» (нажмите «Ok»). Оболочка программатора перезапустится.
Настройки» >> «Программатор

1.Проверьте установки, выберите используемый вами COM-порт, нажмите „Ok“.
2.Далее, „Настройки“ >> „Опции“ >> выберите вкладку „Общие“ >> установите „галочку“ на пункте „Вкл. NT/2000/XP драйвер“ >> Нажмите „Ok“ >> если драйвер до этого не был устновлен на вашей системе, в появившемся окне „Confirm“ нажмите „Ok“. Драйвер установится, и оболочка программатора перезапустится.
Примечание:
Для очень „быстрых“ компьютеров возможно потребуется увеличить параметр „Задержка Ввода/Вывода“. Увеличение этого параметра увеличивает надёжность программирования, однако, увеличивается и время, затрачиваемое на программирование микросхемы.
3.»Настройки» >> «Опции» >> выберите вкладку «I2C» >> установите «галочки» на пунктах: «Включить MCLR как VCC» и «Включить запись блоками». Нажмите «Ok».
4.«Настройки» >> «Опции» >> выберите вкладку «Программирование» >> снимите «галочку» с пункта: «Проверка после программирования» и установите «галочку» на пункте «Проверка при программировании». Нажмите «Ok».
Вот и настроили!
Теперь бы нам протестировать программатор в месте с IC-prog. И тут все просто:
Далее, в программе IC-PROG, в меню, запустите: Настройки >> Тест Программатора

Перед выполнением каждого пункта методики тестирвания, не забывайте устанавливать все «поля» в исходное положение (все «галочки» сняты), как показано на рисунке выше.
1.Установите «галочку» в поле «Вкл. Выход Данных», при этом, в поле «Вход Данных» должна появляться «галочка», а на контакте (DATA) разъёма X2, должен установиться уровень лог. «1» (не менее +3,0 вольт). Теперь, замкните между собой контакт (DATA) и контакт (GND) разъёма X2, при этом, отметка в поле «Вход Данных» должна пропадать, пока контакты замкнуты.
2.При установке «галочки» в поле «Вкл. Тактирования», на контакте (CLOCK) разъёма X2, должен устанавливаться уровень лог. «1». (не менее +3,0 вольт).
3.При установке «галочки» в поле «Вкл. Сброс (MCLR)», на контакте (VPP) разъёма X3, должен устанавливаться уровень +13,0… +14,0 вольт, и светиться светодиод D4 (обычно красного цвета).Если переключатель режимов поставить в положение 1 то будет светится светодиод HL3
Если при тестировании, какой-либо сигнал не проходит, следует тщательно проверить весь путь прохождения этого сигнала, включая кабель соединения с COM-портом компьютера.
Тестирование канала данных программатора EXTRAPIC:
1. 13 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт.
2. 12 вывод микросхемы Da1: напряжение +5 вольт. При установке «галочки»: 0 вольт.
3. 6 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт.
3. 1 и 2 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт.
4. 3 вывод микросхемы DD1: напряжение +5 вольт. При установке «галочки»: 0 вольт.
5. 14 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт.
Если все тестирование прошло успешно, то программатор готов к эксплуатации.
Для подключения микроконтроллера к программатору можно использовать подходящие панельки или же сделать адаптер на основе ZIF панельки (с нулевым усилием прижатия), например как здесь radiokot.ru/circuit/digital/pcmod/18/.
Теперь несколько слов про ICSP — Внутрисхемное программирование
PIC-контроллеров.
При использовании ICSP на плате устройства следует предусмотреть возможность подключения программатора. При программировании с использованием ICSP к программатору должны быть подключены 5 сигнальных линий:
1. GND (VSS) — общий провод.
2. VDD (VCC) — плюс напряжение питания
3. MCLR’ (VPP)- вход сброса микроконтроллера / вход напряжения программирования
4. RB7 (DATA) — двунаправленная шина данных в режиме программирования
5. RB6 (CLOCK) Вход синхронизации в режиме программирования
Остальные выводы микроконтроллера не используются в режиме внутрисхемного программирования.
Вариант подключения ICSP к микроконтроллеру PIC16F84 в корпусе DIP18:

1.Линия MCLR’ развязывается от схемы устройства перемычкой J2, которая в режиме внутрисхемного программирования (ICSP) размыкается, передавая вывод MCLR в монопольное управление программатору.
2.Линия VDD в режиме программирования ICSP отключается от схемы устройства перемычкой J1. Это необходимо для исключения потребления тока от линии VDD схемой устройства.
3.Линия RB7 (двунаправленная шина данных в режиме программирования) изолируется по току от схемы устройства резистором R1 номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R1. При необходимости обеспечить максимальный ток, резистор R1 необходимо заменить (как в случае c VDD) перемычкой.
4.Линия RB6 (Вход синхронизации PIC в режиме программирования) так же как и RB7 изолируется по току от схемы устройства резистором R2, номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R2. При необходимости обеспечить максимальный ток, резистор R2 необходимо заменить (как в случае с VDD) перемычкой.
Расположение выводов ICSP у PIC-контроллеров:

Эта схема только для справки, выводы программирования лучше уточнить из даташита на микроконтроллер.
Теперь рассмотрим прошивку микроконтроллера в программе IC-prog. Будем рассматривать на примере конструкции вот от сюда rgb73.mylivepage.ru/wiki/1952/579
Вот схема устройства

вот прошивка
Прошиваем контроллер PIC12F629. Данный микроконтроллер для своей работы использует константу osccal — представляет собой 16-ти ричное значение калибровки внутреннего генератора МК, с помощью которого МК отчитывает время при выполнении своих программ, которая записана в последней ячейке данных пика. Подключаем данный микроконтроллер к программатору.
Ниже на сриншоте красными цифрами показана последовательность действий в программе IC-prog.

1. Выбрать тип микроконтроллера
2. Нажать кнопку «Читать микросхему»
В окне «Программный код» в самой последней ячейке будет наша константа для данного контроллера. Для каждого контроллера константа своя!Не сотрите ее, запишите на бумажку и наклейте ее на микросхему!
Идем далее

3. Нажимаем кнопку «Открыть файл…», выбираем нашу прошивку. В окне программного кода появится код прошивки.
4. Спускаемся к концу кода, на последней ячейке жмем правой клавишей мыши и выбираем в меню «править область», в поле «Шестнадцатеричные» вводим значение константы, которую записали, нажимаем «ОК».
5. Нажимаем «программировать микросхему».
Пойдет процесс программирования, если все прошло успешно, то программа выведет соответствующее уведомление.
Вытаскиваем микросхему из программатора и вставляем в собранный макет. Включаем питание. Нажимаем кнопку пуск.Ура работает! Вот видео работы мигалки
video.mail.ru/mail/vanek_rabota/_myvideo/1.html
С этим разобрались. А вот что делать если у нас есть файл исходного кода на ассемблере asm, а нам нужен файл прошивки hex? Тут необходим компилятор. и он есть — это Mplab, в этой программе можно как писать прошивки так и компилировать. Вот окно компилятора

Устанавливаем Mplab
Находим в установленной Mplab программу MPASMWIN.exe, обычно находится в папке — Microchip — MPASM Suite — MPASMWIN.exe
Запускаем ее. В окне (4) Browse находим наш исходник (1) .asm, в окне (5) Processor выбираем наш микроконтроллер, нажимаем Assemble и в той же папке где вы указали исходник появится ваша прошивка .HEX Вот и все готово!
Надеюсь эта статья поможет начинающим в освоении PIC контроллеров! Удачи!

electronics-lab.ru

Как программировать PIC микроконтроллеры или Простой JDM программатор

Так уж сложилось, что знакомство с микроконтроллерами я начал с AVR. PIC микроконтроллеры до поры, до времени — обходил стороной. Но, все же на них тоже ведь есть уникальные, интересные для повторения, конструкции! А ведь эти микроконтроллеры тоже прошивать нужно . Эту статью пишу в основном для себя самого. Чтобы не забыть технологии, как без проблем и бессмысленных потерь времени прошить PIC микроконтроллер.

Для первой схемы — долго и упорно пытался сделать PIC программатор по найденным в интернете схемам — ничего не вышло . Стыдно, но пришлось обращаться к знакомому, чтобы прошил МК. Но ведь это не дело — постоянно бегать по знакомым! Этот же знакомый и посоветовал простенькую схему, работающую от СОМ порта. Но даже и тогда, когда я ее собрал — все равно ничего не получалось . Ведь мало собрать программатор — нужно еще под него настроить программу, которой будем прошивать. А вот как раз это у меня и не получалось. Целая туча инструкций в интернете, и мало какая мне помогла…

Тогда, мне удалось прошить один микроконтроллер. Но так как прошивал в условиях жесткого дефицита времени — не догадался сохранить хотя бы ссылку на инструкцию. И ведь не нашел ее вполедствии. Поэтому повторюсь — пишу статью, чтобы иметь свою собственную инструкцию.

Да, если эту статью будут читать специалисты по PIC микроконтроллерам — просьба не смеяться надо мной (ну во всяком случае сильно не смеяться ).  Но я отвлекся.

Итак, программатор для PIC микроконтроллеров. Простой, хотя и не 5 проводков, как для AVR микроконтроллеров, который я использую до сих пор. Вот схема:

Вот печатная плата (а вот здесь — она в формате Sprint-Layout 5.0).

СОМ разъем припаивается штырьками прямо на контактные площадки (главное — не запутаться с нумерацией). Второй ряд штырьков соединяется с платой маленькими перемычками (очень непонятно сказал, ага). Попробую дать фотографию… хоть она и страшная (нету у меня сейчас нормального фотоаппарата ).Самое злобное в том — что для PIC микроконтроллеров для прошивки нужны 12 вольт. А лучше не 12, а чуточку побольше. Скажем, 13. Или 13.5 (кстати, специалисты — поправьте меня в комментариях, если ошибаюсь. Пожалуйста.). 12 вольт еще можно где-то добыть. А 13 где? Я то выходил из положения просто — брал свежезаряженный литий-полимерный аккумулятор, в котором было 12.6 вольт. Ну или вообще четырехбаночный аккумулятор, с его 16 вольтами (прошил так один PIC — без проблем).

Но я опять отвлекся. Итак — инструкция по прошивке PIC микроконтроллеров. Ищем программу WinPIC800 (к сожалению простая и популярная icprog у меня не заработала,) и настраиваем ее так, как показано на скриншоте.

После этого — открываем файл прошивки, подключаем микроконтроллер и прошиваем.

luckytech.ru

Территория разработок » Blog Archive » Пример программы для микроконтроллера PIC16F676

;ЗА ОСНОВУ ВЗЯТА ПРОГРАММА FAZA.ASM АВТОРА
;Заец Н.И.( [email protected])
;ПРОГРАММА ДОРАБОТАНА ДЛЯ ПРИМЕНЕНИЯ
;В РАЗЛИЧНЫХ УСТРОЙСТВАХ И УНИВЕРСАЛЬНА
;В ДАННОМ  ВАРИАНТЕ РАБОТАЕТ
;ДЛЯ ЗАЩИТЫ СХЕМЫ СИЛОВОГО ИНВЕРТОРА СВАРОЧНОГО АППАРАТА
;И РАБОТАЕТ ПО ДАТЧИКАМ РОСЫ, ПЫЛИ И ТЕМПЕРАТУРЫ
;ДОРАБОТАЛ ПРОГРАММУ  Король Л.Ю. ([email protected])
;ПРОГРАММА:  FAZA.asm
;ВЕРСИЯ: 25-10-2009
;АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 7.20
;
            #INCLUDE
            __CONFIG 3FF4H
;====================================================
; ИСПОЛЬЗУЕТСЯ ВНУТРЕННИЙ ГЕНЕРАТОР ЧАСТОТОЙ 4,0 MГц.
;====================================================
 
;=========================================
; РЕГИСТРЫ РСН.
;=========================================
INDF     EQU  00H  ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0   EQU  01H  ;TMR0.
OPTION_REG    EQU  81H  ;OPTION (RP0=1).
PC       EQU  02H  ;СЧЕТЧИК КОМАНД.
STATUS   EQU  03H  ;РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR      EQU  04H  ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA    EQU  05H  ;ПОРТ А ВВОДА/ВЫВОДА.
PORTC    EQU  07H  ;ПОРТ C ВВОДА/ВЫВОДА.
TRISA    EQU  85H  ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISC    EQU  87H  ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА C.
INTCON   EQU  0BH  ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
PIR1     EQU  0CH  ;РАЗРЕШЕНИЯ ПЕРИФЕРИЙНЫХ ПРЕРЫВАНИЙ.
PIE1     EQU  8CH  ;РЕГИСТР РАЗРЕШЕНИЯ ПЕРИФЕРИЙНЫХ ПРЕРЫВАНИЙ.
TMR1L    EQU  0EH  ;МЛАДШИЙ РЕГИСТР  ТАЙМЕРА 1.
TMR1H    EQU  0FH  ;СТАРШИЙ РЕГИСТР  ТАЙМЕРА 1.
T1CON    EQU  10H  ;РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ 1.
CMCON    EQU  19H  ;РЕГИСТР УПРАВЛЕНИЯ КОМПАРАТОРОМ.
VRCON    EQU  99H  ;РЕГИСТР ИСТОЧНИКА ОПОРНОГО НАПРЯЖЕНИЯ.
PCON     EQU  8EH  ;КОНТРОЛЬ НАПРЯЖЕНИЯ.
OSCCAL   EQU  90H  ;
ANSEL    EQU  91H  ;ВЫБОР АНАЛОГОВОГО ВХОДА.
WPUA     EQU  95H  ;ВКЛЮЧЕНИЯ ПОДТЯГИВАЮЩИХ РЕЗИСТОРОВ.
IOCA     EQU  96H  ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ ПО ИЗМ. СИГН. НА ВХОДАХ А.
ADRESH   EQU  1EH  ;СТАРШИЙ РЕГИСТР АЦП.
ADRESL   EQU  9EH  ;МЛАДШИЙ РЕГИСТР АЦП.
ADCON0	 EQU  1FH  ;УПРАВЛЕНИЯ АЦП.
ADCON1	 EQU  9FH  ;ВЫБОР ТАКТИРОВАНИЯ АЦП.
EEDAT    EQU  9AH ;РЕГИСТР ОБМЕНА  ДАННЫМИ C EEPROM
EEADR    EQU  9BH  ;РЕГИСТР ЗАДАНИЯ  ЯЧЕЙКИ  АДРЕСА В  EEPROM
EECON1   EQU  9CH  ;РЕГИСТР УПРАВЛЕНИЯ EEPROM
EECON2   EQU  9DH  ;РЕГИСТР УПРАВЛЕНИЯ EEPROM
;===========================================
; ОПРЕДЕЛЕНИЕ РОН.
;=====================================================================
TEKH	EQU 20H   ;ДВОИЧНОЕ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ НАПРЯЖЕНИЯ.
TEKL	EQU 21H   ;старший  и  младший  регистры.
YCTA	EQU 22H	  ;УСТАНОВЛЕННОЕ  МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ПАРАМЕТРА
YCTI	EQU 23H	  ;УСТАНОВЛЕННОЕ  МИНИМАЛЬНОЕ  ЗНАЧЕНИЕ ПАРАМЕТРА
 
RAB0	EQU 24H   ;РОСА
RAB1	EQU 25H   ;ПЫЛЬ
RAB2	EQU 26H	  ;ПРЕДЕЛЬНАЯ  ТЕМПЕРАТУРА
RAB3	EQU 27H   ;РЕГУЛЯТОР  ОХЛАЖДЕНИЯ
RAB4    EQU 28H   ;РАБОЧАЯ  ЯЧЕЙКА 1ГО  СЧ-КА
RAB5    EQU 29H   ;РАБОЧАЯ  ЯЧЕЙКА 2ГО  СЧ-КА
RAB6    EQU 2AH   ;РАБОЧАЯ  ЯЧЕЙКА МИНУТЫ
RAB7    EQU 2BH   ;РАБОЧАЯ  ЯЧЕЙКА ЧАСА
BUM0    EQU 2CH   ;БУФЕР НУЛЕВОГО БАЙТА  МИНУТ
BUM1    EQU 2DH   ;БУФЕР ПЕРВОГО  БАЙТА  МИНУТ
BUM2    EQU 2EH   ;БУФЕР ВТОРОГО  БАЙТА  МИНУТ
BUM3    EQU 2FH   ;БУФЕР ТРЕТЬЕГО БАЙТА  МИНУТ
DBUM0   EQU 30H   ;ДУБЛЬ БУФЕРА НУЛЕВОГО БАЙТА  МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР
DBUM1   EQU 31H   ;ДУБЛЬ БУФЕРА ПЕРВОГО БАЙТА  МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР
DBUM2   EQU 32H   ;ДУБЛЬ БУФЕРА ВТОРОГО БАЙТА  МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР
DBUM3   EQU 33H   ;ДУБЛЬ БУФЕРА ТРЕТЬЕГО БАЙТА  МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР
RAB8    EQU 34H   ;РАБОЧАЯ  ЯЧЕЙКА  СЧЁТЧИКА  255 (11111111) ИЛИ 0FFH
RAB9    EQU 35H   ;РАБОЧАЯ  ЯЧЕЙКА  СЧЁТЧИКА  255 (11111111) ИЛИ 0FFH
TR0     EQU 36H   ;TR0
TR1     EQU 37H   ;TR1
TR2     EQU 38H   ;TR2
TR3     EQU 39H   ;TR3
CONST1  EQU 3AH   ;FF  ДЛЯ  СЧЁТЧИКА  ПОБАЙТНОГО  ВЫВОДА
CONST2  EQU 3BH   ;FF
CONST3  EQU 3CH   ;FF
;=====================================================================
;  1.  ПУСК
;=====================================================================
         ORG   0
         GOTO       INIT
         NOP
         NOP
         NOP
         NOP
         NOP
;=====================================================================
;  2.   ИНИЦИАЛИЗАЦИЯ .
;=====================================================================
INIT
         BSF        STATUS,5           ;БАНК1.
         CLRF       OSCCAL^0x90        ;МАКСИМАЛЬНАЯ  ЧАСТОТА.
         MOVLW      0FFH               ;СИГНХРОНИЗАЦИЯ  ОТ  RC.
         MOVWF       ADCON1            ;ТАКТ АЦП ОТ внутреннего генератора 500 кГц
         MOVLW      B'10000000'        ;К=4
         MOVWF      OPTION_REG^80H     ;РЕЗИСТОРЫ  ВЫКЛЮЧЕНЫ.
         CLRF       INTCON             ;
         CLRF       PIE1^80H           ;ЗАПРЕЩЕНЫ ВСЕ ПЕРИФЕРИЙНЫЕ ПРЕРЫВАНИЯ
         MOVLW      B'00111111'        ;ВСЕ  ВХОДЫ  *********
         MOVWF      TRISA^80H          ;
         CLRF       TRISC^80H          ;ВСЕ  ВЫХОДЫ .
         CLRF       VRCON^80H          ;ИОН ОТКЛЮЧЕН .
         CLRF       PCON^80H           ;ПРЕРЫВАНИЯ  ПО  ПИТАНИЮ   ЗАПРЕЩЕНЫ.
         CLRF       WPUA^80H           ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ  ВЫКЮЧЕНЫ.
         CLRF       IOCA^80H           ;ПРЕРЫВАНИЯ  ЗАПРЕЩЕНЫ.
         MOVLW      .1                 ;
         MOVWF      ANSEL^80H          ;ВЫБРАН АНАЛОГОВЫЙ ВХОД  RA0/AN0.
         BCF        STATUS,5           ;ПЕРЕХОДИМ  В  БАНК 0.
         CLRF       PORTC              ;ВЫХОД И  СВЕТОДИОД  ВЫКЛЮЧЕНЫ.
         CLRF       T1CON              ;ТАЙМЕР 1 ОТКЛЮЧЕН.
         MOVLW      .7                 ;
         MOVWF      CMCON              ;КОМПАРАТОР  ВЫКЛЮЧЕН.
 
         CLRF       BUM0
         CLRF       BUM1
         CLRF       BUM2
         CLRF       DBUM0
         CLRF       DBUM1
         CLRF       DBUM2
 
         MOVLW      B'00111100'       ;ЗАПИШЕМ ЧИСЛО  60  В  ДВОИЧНОМ  КОДЕ
         MOVWF      RAB6              ;В ЯЧЕЙКУ  RAB6 это  ячейка делителя
                                    ;секунд для  получения  минутного  им
                                    ;пульса
         CLRF       RAB7
 
         BSF        STATUS,5
         MOVLW      00H                ;
         MOVWF      EEADR              ;ЗАДАЁМ  АДРЕС 00H ЧТЕНИЯ ИЗ EEPROM
         MOVLW      B'00000001'        ;РАЗРЕШАЕМ  ЧТЕНИЕ ИЗ EEPROM
         MOVWF      EECON1             ;
         MOVFW      EEDATA             ;читаем данные через служ. регистр EEDATA
         BCF        STATUS,5           ;БАНК 0
         MOVWF      BUM0               ;
         MOVLW      01H                ;заносим константу для правильной работы
         ADDWF      BUM0               ;программы
      ; goto      INDIC             ;ТЕХНОЛОГИЧЕСКАЯ  КОМАНДА
 
         BSF        STATUS,5
         MOVLW      01H
         MOVWF      EEADR              ; ЗАДАЁМ АДРЕС 01 ЧТЕНИЯ ИЗ EEPROM
         MOVLW      B'00000001'        ; РАЗРЕШАЕМ  ЧТЕНИЕ ИЗ EEPROM
         MOVWF      EECON1             ;
         MOVFW      EEDATA             ; ЧИТАЕМ ДАННЫЕ ЧЕРЕЗ СЛУЖ РЕГИСТР EEDATA
         BCF        STATUS,5           ; БАНК 0
         MOVWF      BUM1               ;
       ;goto      INDIC             ;ТЕХНОЛОГИЧЕСКАЯ  КОМАНДА
 
         BSF        STATUS,5
         MOVLW      02H                ;
         MOVWF      EEADR              ; ЗАДАЁМ  АДРЕС 02H ЧТЕНИЯ ИЗ EEPROM
         MOVLW      B'00000001'        ; РАЗРЕШАЕМ  ЧТЕНИЕ ИЗ EEPROM
         MOVWF      EECON1             ;
         MOVFW      EEDATA             ; ЧИТАЕМ ДАННЫЕ  ЧЕРЕЗ СЛУЖ  РЕГИСТР EEDATA
         BCF        STATUS,5           ; БАНК 0
         MOVWF      BUM2               ;
     ; goto       INDIC              ;ТЕХНОЛОГИЧЕСКАЯ  КОМАНДА
 
ADP0
         MOVLW      .250               ;МАКСИМУМ  РОСА .
         MOVWF      YCTA               ;
         MOVLW      .120               ;МИНИМУМ   РОСА .
         MOVWF      YCTI               ;
;=====================================================================
;  3.  АЦП - ПРЕОБРАЗОВАНИЕ  (ИЗМЕРЕНИЕ ВХОДНЫХ  ВЕЛИЧИН ).
;=====================================================================
 
         MOVLW	B'10000001'	;СИНХРОНИЗАЦИЯ ОТ  RC- ГЕНЕРАТОРА--------.
 
         MOVWF	ADCON0		;ВХОД 0, ВКЛЮЧЕНИЕ АЦП (YBX)=============.
                                ;ПРАВОЕ  ВЫРАВНИВАНИЕ.
 
	 CALL	ZAD		; ЗАДЕРЖКА  100МКСЕК.
 
         BSF	ADCON1,1	;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******.
         BTFSC   ADCON1,1        ;ОЖИДАЕМ  ЗАВЕРШЕНИЯ.
         GOTO	$-1          	;ПРЕОБРАЗОВАНИЯ.
         MOVFW	ADRESH       	;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ.
         MOVWF	TEKH		;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
         BTFSc  TEKH,1           ;ЕСЛИ 1 РАЗРЯД  РАВЕН 1 ТО  ПЕРЕПОЛНЕНИЕ.
         GOTO   ADPU0            ;ВЫКЛЮЧИТЬ  ВЫХОД .
         BSF     STATUS,5        ;ПЕРЕХОДИМ  В  БАНК 1.
 
	 MOVLW	21		;ЗАПИСЬ  В  РЕГИСТР  TEKL.
 	 MOVWF	FSR		;ПО КОСВЕННОЙ АДРЕСАЦИИ.
 	 MOVFW	ADRESL		;ЗАПИСЬ МЛ. РЕГИСТРА АЦП.
         MOVWF	INDF		;В РЕГИСТР TEKL.
	 BCF	STATUS,5	;ПЕРЕХОДИМ В БАНК 0.******
         BCF     STATUS,0        ;ОБНУЛЯЕМ  БИТ  ПЕРЕНОСА.
         RRF     TEKH,1          ;СДВИГАЕМ  ВПРАВО.
         RRF     TEKL,1          ;ЧТОБЫ  СРАВНИТЬ  8  РАЗРЯДОВ .
         MOVFW   YCTA            ;СРАВНИМ  ТЕКУЩЕЕ  ЗНАЧЕНИЕ .
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО МАКСИМУМУ.
         BTFSC   STATUS,0        ;ЕСЛИ  ЕСТЬ  ПРЕВЫШЕНИЕ.
         GOTO    ADPU0           ;ТО ВЫКЛЮЧИМ ВЫХОД .
 
         MOVFW   YCTI            ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ.
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО  МИНИМУМУ.
         BTFSS   STATUS,0        ;ЕСЛИ  МЕНЬШЕ МЕНЬШЕГО
         GOTO    ADPU0
         MOVLW   B'11111111'     ;НОРМА  ПО  ВХ 0
         MOVWF   RAB0
         BCF     PORTC,5
         GOTO    ADP1           ;ПРОВЕРКА НА  ПЫЛЬ
 
ADPU0
         BSF     PORTC,5         ;ВКЛ  ALARM ПО РОСЕ   ***************.
         BCF     PORTC,0         ;ВЫКЛЮЧИМ  ВЫХОД  общий ПО  РОСЕ.
         BSF     PORTC,1         ;ВКЛ  ALARM ОБЩИЙ   ***************.
         MOVLW   B'00000000'
         MOVWF   RAB0
         GOTO    ADP1
 
ZAD
         MOVLW	.25		;ЗАДЕРЖКА 100 МКС.
	 ADDLW	-1		;
	 BTFSS	STATUS,2	;
	 GOTO	$-2		;
	 RETURN
 
ADP1
         MOVLW      .250               ;МАКСИМУМ  ПЫЛЬ .
         MOVWF      YCTA               ;
         MOVLW      .160               ;МИНИМУМ   ПЫЛЬ .
         MOVWF      YCTI               ;
;=====================================================================
;  3.  АЦП - ПРЕОБРАЗОВАНИЕ  (ИЗМЕРЕНИЕ ВХОДНЫХ  ВЕЛИЧИН ).
;=====================================================================
 
         MOVLW	B'10000101'	;СИНХРОНИЗАЦИЯ ОТ  RC- ГЕНЕРАТОРА--------.
 
         MOVWF	ADCON0		;ВХОД 1, ВКЛЮЧЕНИЕ АЦП (YBX)=============.
                                ;ПРАВОЕ  ВЫРАВНИВАНИЕ.
 
	 CALL	ZAD		; ЗАДЕРЖКА  100МКСЕК.
 
         BSF	ADCON1,1	;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******.
         BTFSC   ADCON1,1        ;ОЖИДАЕМ  ЗАВЕРШЕНИЯ.
         GOTO	$-1          	;ПРЕОБРАЗОВАНИЯ.
         MOVFW	ADRESH       	;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ.
         MOVWF	TEKH		;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
         BTFSc   TEKH,1          ;ЕСЛИ 1 РАЗРЯД  РАВЕН 1 ТО  ПЕРЕПОЛНЕНИЕ.
         GOTO    ADPU1           ;ВЫКЛЮЧИТЬ  ВЫХОД .
         BSF     STATUS,5        ;ПЕРЕХОДИМ  В  БАНК 1.
 
 	 MOVLW	21		;ЗАПИСЬ  В  РЕГИСТР  TEKL.
 	 MOVWF	FSR		;ПО КОСВЕННОЙ АДРЕСАЦИИ.
 	 MOVFW	ADRESL		;ЗАПИСЬ МЛ. РЕГИСТРА АЦП.
 	 MOVWF	INDF		;В РЕГИСТР TEKL.
         BCF	STATUS,5	;ПЕРЕХОДИМ В БАНК 0.
         BCF     STATUS,0        ;ОБНУЛЯЕМ  БИТ  ПЕРЕНОСА.
         RRF     TEKH,1          ;СДВИГАЕМ  ВПРАВО.
         RRF     TEKL,1          ;ЧТОБЫ  СРАВНИТЬ  8  РАЗРЯДОВ .
         MOVFW   YCTA            ;СРАВНИМ  ТЕКУЩЕЕ  ЗНАЧЕНИЕ .
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО МАКСИМУМУ.
         BTFSC   STATUS,0        ;ЕСЛИ  ЕСТЬ  ПРЕВЫШЕНИЕ.
         GOTO    ADPU1            ;ТО ВЫКЛЮЧИМ  ВЫХОД
 
         MOVFW   YCTI            ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ.
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО  МИНИМУМУ.
         BTFSS   STATUS,0        ;ЕСЛИ  МЕНЬШЕ МЕНЬШЕГО.
         GOTO    ADPU1
                                ;ТО ВЫКЛЮЧИМ ВЫХОД.
         MOVLW   B'11111111'
         MOVWF    RAB1
         BCF     PORTC,4         ;ВЫКЛ ALARM по ПЫЛИ    ************
 
         GOTO    ADP2
 
ADPU1
         BSF     PORTC,4         ;ВКЛ  ALARM ПО  ПЫЛИ  ***************.
         BCF     PORTC,0         ;ВЫКЛЮЧИМ  ВЫХОД  общий  ПО  ПЫЛИ
         BSF     PORTC,1         ;ВКЛ  ALARM ОБЩИЙ   ***************.
         MOVLW   B'00000000'
         MOVWF   RAB1
 
         GOTO    ADP2
 
ADP2
 
         MOVLW      .250               ;МАКСИМУМ  T .
         MOVWF      YCTA               ;
         MOVLW      .160               ;МИНИМУМ   T .
         MOVWF      YCTI               ;
;=====================================================================
;  3.  АЦП - ПРЕОБРАЗОВАНИЕ  (ИЗМЕРЕНИЕ ВХОДНЫХ  ВЕЛИЧИН ).
;=====================================================================
 
         MOVLW	B'10001001'	;СИНХРОНИЗАЦИЯ ОТ  RC- ГЕНЕРАТОРА--------.
 
         MOVWF	ADCON0		;ВХОД 2, ВКЛЮЧЕНИЕ АЦП (YBX)=============.
                                ;ПРАВОЕ  ВЫРАВНИВАНИЕ.
 
	 CALL	ZAD		; ЗАДЕРЖКА  100МКСЕК.
 
         BSF	ADCON1,1	;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******.
         BTFSC   ADCON1,1        ;ОЖИДАЕМ  ЗАВЕРШЕНИЯ.
         GOTO	$-1          	;ПРЕОБРАЗОВАНИЯ.
         MOVFW	ADRESH       	;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ.
         MOVWF	TEKH		;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
         BTFSc   TEKH,1          ;ЕСЛИ 1 РАЗРЯД  РАВЕН 1 ТО  ПЕРЕПОЛНЕНИЕ.
         GOTO    ADPU2           ;ВЫКЛЮЧИТЬ  ВЫХОД .
         BSF     STATUS,5        ;ПЕРЕХОДИМ  В  БАНК 1.
 
 	 MOVLW	21		;ЗАПИСЬ  В  РЕГИСТР  TEKL.
 	 MOVWF	FSR		;ПО КОСВЕННОЙ АДРЕСАЦИИ.
         MOVFW	ADRESL		;ЗАПИСЬ МЛ. РЕГИСТРА АЦП.
 	 MOVWF	INDF		;В РЕГИСТР TEKL.
         BCF	STATUS,5	;ПЕРЕХОДИМ В БАНК 0.
         BCF     STATUS,0        ;ОБНУЛЯЕМ  БИТ  ПЕРЕНОСА.
         RRF     TEKH,1          ;СДВИГАЕМ  ВПРАВО.
         RRF     TEKL,1          ;ЧТОБЫ  СРАВНИТЬ  8  РАЗРЯДОВ .
         MOVFW   YCTA            ;СРАВНИМ  ТЕКУЩЕЕ  ЗНАЧЕНИЕ .
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО МАКСИМУМУ.
         BTFSC   STATUS,0        ;ЕСЛИ  ЕСТЬ  ПРЕВЫШЕНИЕ.
         GOTO    ADPU2            ;ТО ВЫКЛЮЧИМ  ВЫХОД
 
         MOVFW   YCTI            ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ.
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО  МИНИМУМУ.
         BTFSS   STATUS,0        ;ЕСЛИ  МЕНЬШЕ МЕНЬШЕГО.
         GOTO    ADPU2          ;ТО ВЫКЛЮЧИМ ВЫХОД
         MOVLW   B'11111111'
         MOVWF    RAB2
         BCF     PORTC,3         ;ВЫКЛ ALARM по T   ************
 
         GOTO     ADP3
 
ADPU2
         BSF     PORTC,3         ;ВКЛ  ALARM ПО  T  ***************.
         BCF     PORTC,0         ;ВЫКЛЮЧИМ  ВЫХОД  общий  ПО T
         BSF     PORTC,1         ;ВКЛ  ALARM ОБЩИЙ   ***************.
         MOVLW   B'00000000'
         MOVWF   RAB2
 
         GOTO    ADP3 
 
         BCF      STATUS,5
 
ADP3
         MOVLW      .220               ;МАКСИМУМ  TREG .
         MOVWF      YCTA               ;
         MOVLW      .170               ;МИНИМУМ   TREG .
         MOVWF      YCTI               ;
;=====================================================================
;  3.  АЦП - ПРЕОБРАЗОВАНИЕ  (ИЗМЕРЕНИЕ ВХОДНЫХ  ВЕЛИЧИН ).
;=====================================================================
 
         MOVLW	B'10001001'	;СИНХРОНИЗАЦИЯ ОТ  RC- ГЕНЕРАТОРА--------.
 
         MOVWF	ADCON0		;ВХОД 2, ВКЛЮЧЕНИЕ АЦП (YBX)=============.
                                ;ПРАВОЕ  ВЫРАВНИВАНИЕ.
 
	 CALL	ZAD		; ЗАДЕРЖКА  100МКСЕК.
 
         BSF	ADCON1,1	;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******.
         BTFSC   ADCON1,1        ;ОЖИДАЕМ  ЗАВЕРШЕНИЯ.
         GOTO	$-1          	;ПРЕОБРАЗОВАНИЯ.
         MOVFW	ADRESH       	;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ.
         MOVWF	TEKH		;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
         BTFSc   TEKH,1          ;ЕСЛИ 1 РАЗРЯД  РАВЕН 1 ТО  ПЕРЕПОЛНЕНИЕ.
         GOTO    ADPU3           ;ВЫКЛЮЧИТЬ  ВЫХОД .
         BSF     STATUS,5        ;ПЕРЕХОДИМ  В  БАНК 1.
 
         MOVLW	21		;ЗАПИСЬ  В  РЕГИСТР  TEKL.
	 MOVWF	FSR		;ПО КОСВЕННОЙ АДРЕСАЦИИ.
         MOVFW	ADRESL		;ЗАПИСЬ МЛ. РЕГИСТРА АЦП.
 	 MOVWF	INDF		;В РЕГИСТР TEKL.
         BCF	STATUS,5	;ПЕРЕХОДИМ В БАНК 0.
         BCF     STATUS,0        ;ОБНУЛЯЕМ  БИТ  ПЕРЕНОСА.
         RRF     TEKH,1          ;СДВИГАЕМ  ВПРАВО.
         RRF     TEKL,1          ;ЧТОБЫ  СРАВНИТЬ  8  РАЗРЯДОВ .
         MOVFW   YCTA            ;СРАВНИМ  ТЕКУЩЕЕ  ЗНАЧЕНИЕ .
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО МАКСИМУМУ.
         BTFSC   STATUS,0        ;ЕСЛИ  ЕСТЬ  ПРЕВЫШЕНИЕ.
         GOTO    ADPU3           ;ТО ВЫКЛЮЧИМ  ВЫХОД
 
         MOVFW   YCTI            ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ.
         SUBWF   TEKL,0          ;НА  ПРЕВЫШЕНИЕ  ПО  МИНИМУМУ.
         BTFSS   STATUS,0        ;ЕСЛИ  МЕНЬШЕ МЕНЬШЕГО.
         GOTO    ADPU3          ;ТО ВЫКЛЮЧИМ ВЫХОД
         MOVLW   B'11111111'
         MOVWF    RAB3
         BCF     PORTC,2         ;ВЫКЛ ВЫХ REG по T   ************
 
         GOTO     PROV
 
ADPU3
         BSF     PORTC,2         ;ВКЛ  ВЫХ  REG ПО  T  ***************.
         MOVLW   B'00000000'
         MOVWF   RAB3
 
         GOTO    PROV 
 
         BCF      STATUS,5
 
PROV
         BTFSS   PORTA,5        ;ПРОВЕРКА  СОСТОЯНИЯ  ВХОДА ПОРТА А(5)
         GOTO    INDIC         ;(НАЖАТИЕ  КНОПКИ A(5)=0) )ДЛЯ   ПРОВЕРКИ СЧЁТЧИКА
                               ;НАРАБОТКИ
 
        ;GOTO    PROV1        ;ТЕХНОЛОГИЧЕСКАЯ  КОМАНДА
 
        ;GOTO     $            ;мигание  светодиода portc2 с
        ;BSF      PORTC,2      ;частотой 1герц
         CALL     PAUSE        ;
         CALL     PAUSE        ;мигание  убирается после отладки
        ;BCF      PORTC,2      ; программы
         CALL     PAUSE        ;
         CALL     PAUSE        ;
         CALL     PAUSE        ;
 
         DECF     RAB6,1       ;ПОЛУЧЕНИЕ МИНУТЫ  В  КРУГОВОМ ЦИКЛЕ
         BTFSS    STATUS,2     ;
         GOTO     PROV1
 
         INCF     BUM0,1       ;ЗДЕСЬ НАЧИНАЕТСЯ  ПОДСЧЁТ  МИНУТ НАРАБОТКИ
         BTFSS    STATUS,2     ;В  ДВОИЧНОМ  ВИДЕ
         GOTO     WR3BYTE      ;
 
         INCF     BUM1,1       ;
         BTFSS    STATUS,2     ;
         GOTO     WR3BYTE      ;
 
         INCF     BUM2,1       ;
         BTFSS    STATUS,2     ;
         GOTO     WR3BYTE      ;
 
         GOTO     PROV1        ;НА  ПРОВЕРКУ  ЗАДАННОГО ВРЕМЕНИ НАРАБОТКИ
WR3BYTE
         BSF      STATUS,5     ; БАНК 1
         MOVLW    00H          ; ЗАДАТЬ АДРЕС  EEPROM
         MOVWF    EEADR        ; ЧЕРЕЗ  РЕГИСТР EEADR
         BCF      STATUS,5     ; БАНК 0
         MOVFW    BUM0         ; ЗАДАТЬ ДАННЫЕ EEPROM
         BSF      STATUS,5     ; БАНК 1
         MOVWF    EEDATA       ; ЧЕРЕЗ  РЕГИСТР EEDATA
         CALL     EEWR         ; ЗАПИСЬ
 
        ;GOTO     PROV1       ;ТЕХНОЛОГИЧЕСКАЯ  КОМАНДА
 
         BsF      STATUS,5     ; БАНК 1
         MOVLW    01H          ; ЗАДАТЬ АДРЕС  EEPROM
         MOVWF    EEADR        ; ЧЕРЕЗ  РЕГИСТР EEADR
         BCF      STATUS,5     ; БАНК 0
         MOVFW    BUM1         ; ЗАДАТЬ ДАННЫЕ EEPROM
         BsF      STATUS,5     ; БАНК 1
         MOVWF    EEDATA       ; ЧЕРЕЗ  РЕГИСТР EEDATA
         CALL     EEWR         ; ЗАПИСЬ
 
         BsF      STATUS,5     ; БАНК 1
         MOVLW    02H          ; ЗАДАТЬ АДРЕС  EEPROM
         MOVWF    EEADR        ; ЧЕРЕЗ  РЕГИСТР EEADR
         BCF      STATUS,5     ; БАНК 0
         MOVFW    BUM2         ; ЗАДАТЬ ДАННЫЕ EEPROM
         BsF      STATUS,5     ; БАНК 1
         MOVWF    EEDATA       ; ЧЕРЕЗ  РЕГИСТР EEDATA
         CALL     EEWR         ; ЗАПИСЬ
 
         MOVLW    B'00111100'  ;ВОССТАНОВИМ ЧИСЛО  60  В СЧЕТЧИКЕ  RAB6
         MOVWF    RAB6         ;
 
         GOTO     PROV1        ;НА  ПРОВЕРКУ  ЗАДАННОГО ВРЕМЕНИ НАРАБОТКИ
 
EEWR
         BSF      STATUS,

www.test-plaza.ru

Доработка PonyProg2000 для программирования PIC-контроллеров PIC16F676хх

Измерительная техника

Главная  Ремонт электроники  Измерительная техника



Эта статья предназначена, в первую очередь, для специалистов и радиолюбителей, в арсенале которых имеется одна из версий весьма распространенного программатора PonyProg 2000. Автор дает описание простого дополнительного адаптера для этого программатора, позволяющего расширить его возможности при минимальных материальных затратах. Кроме того, в статье приведены методики установки и настройки бесплатного программного обеспечения (ПО) программаторов IC-Prog и WinPic800 для работы с программатором PonyProg.

Программатор PonyProg2000 разных модификаций — это один из самых распространенных программаторов, используемых радиолюбителями и профессионалами. Он является программатором устройств с последовательным доступом (Serial Device Programmer) типа JDM. Интересно, что аббревиатура JDM — это сокращение имени и фамилии изобретателя одного из первых удачных подобных программаторов, датчанина Jens Dyekjar Madsen (см. [1]).

Программатор PonyProg2000 ([2]) разработан итальянцем Клаудио Ланконелли (Claudio Lanconelli). Он состоит из аппаратной и программной частей. Описание PonyProg2000 было опубликовано в нашем журнале ранее (см. [3, 4]).

С помощью этого программатора можно считывать и программировать как различные микросхемы памяти, так и микроконтроллеры AVR и PIC, но, по мнению автора, PonyProg2000 «заточен» больше под микроконтроллеры AVR,чем под PIC. Некоторые производители разрабатывают и изготавливают варианты программатора PonyProg с более широкими возможностями, чем заложены в аппаратный контроллер от Claudio Lanconelli. Например, программатор PonyProg2000 от [5] имеет адаптеры с более разнообразными панельками (см. рис. 3 в [4]). Автор имеет именно такой PonyProg, но и этот программатор не работает с 14-выводными микроконтроллерами PIC. Таких микроконтроллеров несколько: PIC16F630, PIC16F676, PIC16F684 и PIC16F688.

Совсем недавно у автора возникла необходимость запрограммировать («прошить») PIC16F676. Приобретать дорогостоящий новый программатор для разовой работы не хотелось. Поэтому было решено расширить возможности имеющегося в наличии PonyProg, дополнив его адаптером с 14-выводной DIP-панелькой.

Из технического описания микроконтроллера PIC16F676 (см. [6]) следует, что при работе с программатором используются всего пять выводов этой микросхемы: 1 — напряжение питания 5 В; 14 — корпус; 12 — вход тактовых импульсов; 13 — вход/выход данных; 4 — вход напряжения программирования +13 В. Наиболее распространенный МК типа PIC16F84 в корпусе DIP-18 имеет аналогичные выводы: 14 — напряжение питания 5 В; 5 — корпус; 12 — вход тактовых импульсов; 13 — вход/выход данных; 4 — вход напряжения программирования + 13 В. Схема адаптера, позволяющего работать с PIC16F84, показана в [4] на рис. 16.

В принципе, для разового программирования микроконтроллера PIC16F676 можно было подпаять панельку DIP-14 проводами на этот «штатный» PIC-адаптер, соединив пять выводов этой панельки с соответствующими выводами 18-выводной панельки U9 адаптера. Автор решил сделать отдельный адаптер для программирования 14-выводных PIC-контроллеров, используя информацию, изложенную выше. Схема такого адаптера приведена на рис. 1.

Рис. 1. Принципиальная схема адаптера микроконтроллеров PIC16F630/676/684/688 для PonyProg 2000

Следует отметить, что разъемы подключения адаптеров к базовым платам для разных версий программаторов PonyProg имеют отличия. На схеме рис. 1 обозначены номера выводов как классического разъема PonyProg от Claudio Lanconelli, так и разъема программатора от [5], которым пользуется автор статьи. Адаптер микроконтроллеров PIC16F630/676/684/688 для такого программатора собран на односторонней печатной плате размером 43×38 мм. Внешний вид этого адаптера показан на рис. 2, а комплект, состоящий из базовой платы PonyProg от FLYCONT, ИБП и самодельного адаптера микроконтроллеров PIC16F630/676/684/688 — на рис. 3.

Рис. 2. Адаптер микроконтроллеров PIC16F630/676/684/688 для PonyProg от FLYCONT

Рис. 3. Базовая плата PonyProg от FLYCONT, ИБП и адаптер микроконтроллеров PIC16F630/676/684/688 для PonyProg 2000

Для читателей, желающих самостоятельно изготовить адаптер для PIC16F630/676/684/688, чертежи его печатных плат в формате программы-редактора Sprint Layout 5 можно скачать с [7].

Адаптер для микроконтроллеров PIC16F630/676/684/688 можно упростить, если напряжение, поступающее на вывод 7 (7, 17) адаптера от БП через базовую плату, превышает 13 В. В этом случае нет необходимости в подключении батарейки 9 В (типа «Крона»), а значит можно не ставить разъем J2 и разъем переключаемой перемычки JP1 и запаять проволочную перемычку вместо JP1 для подачи напряжения программирования VPP на эмиттер ключа Q1 (см. схему рис. 1).

Изготовление адаптера PIC16F630/676/684/688 — это только часть работы. Дело в том, что программное обеспечение PonyProg не позволяет работать ни с одним из 14-выводных МК. Зато бесплатное ПО IC-Prog 1.6B и некоторые более ранние версии этой программы прекрасно работают с различными программаторами JDM, включая аппаратный контроллер PonyProg, и могут читать и программировать микроконтроллеры PIC16F630 и PIC16F676. Существует еще одно бесплатное ПО — WinPic800, его последняя версия V3.64 позволяет читать и программировать память всех четырех микроконтроллеров PIC16F630/676/684/688.

Скачать программу IC-Prog 1.6B можно с сайта разработчика [8] по ссылке [9]. Там же можно найти несколько более ранних версий этой программы. Если на вашем ПК используется операционная система (ОС) Windows NT/2000/XP, то нужно скачать и специальный драйвер по ссылке [10]. Для ОС Windows 95/98/SE/ME необходимости в установке драйвера нет.

Желательно также скачать русскоязычный файл помощи по ссылке [11].

Установить программу IC-Prog 1.6B достаточно просто. Для этого в любом удобном месте на жестком диске ПК необходимо создать папку с любым названием, в которую нужно распаковать архив icprog106B.zip. В этом архиве всего один файл icprog.exe. В эту же папку надо поместить файл помощи icprog.chm из архива icprogh_rus.zip. Если ПК работает под управлением Windows NT/2000/XP, то в эту же папку устанавливают драйвер icprog.sys. Для удобства запуска программы IC-Prog можно создать ярлык для icprog.exe и поместить его на рабочем столе. Программа установлена, осталось только ее настроить. Рассмотрим порядок настройки IC-Prog для Windows XP:

1. Правой кнопкой мыши щелкают по значку файла icprog.exe. В открывшемся окне выбирают пункт «Свойства», а затем выбирают вкладку «Совместимость» и устанавливают галочку в начале строки «Запустить программу в режиме совместимости с:». В активировавшемся окне выбирают «Windows 2000».

2. Запускают файл icprog.exe и в открывшемся англоязычном окне программы выбирают меню «Settings», затем — строку «Options» и в открывшемся окне — вкладку «Language», где устанавливают язык («Russian») и щелкают кнопку «Ok». После чего программа выдаст запрос на перезагрузку («You need to restart IC-Prog now»), с которым необходимо согласиться, нажав «Ok». Программа пере-загрузится и вновь открывшееся окно будет уже русскоязычным.

3. Открывают меню «Настройки», в котором выбирают строку «Опции», а затем вкладку «Программирование» (см. рис. 4), устанавливают галочку в строке «Проверка при программировании» и нажимают «Ok».

Рис. 4. Вкладка «Программирование» программы IC-Prog

4. Открывают меню «Настройки», в котором выбирают строку «Программатор». Откроется окно «Настройки Программатора» (рис. 5), в котором выбирают «JDM Programmer», порт, к которому подключен программатор, «Прямой доступ к портам», а в поле «Параметры сигналов» ставят галочку в строке «Инверсия Данных Вывода». Остальные строки не должны быть активированы (см. рис. 5).

Рис. 5. Окно «Настройки Программатора» программы IC-Prog

5. Для активации драйвера необходимо в меню «Настройки» выбрать строку «Опции», а затем вкладку «Общие», установить «галочку» на пункте «Вкл. NT/2000/XP драйвер» и нажать «Ok». Если драйвер ранее не был активирован, то откроется окно «Confirm», в котором следует нажать «Ok». После этого программа перезапустится, и драйвер будет активирован.

При использовании более ранних версий операционной системы Windows пункт 1 из приведенного перечня выполнять нет необходимости, а при использовании Windows 95/98/SE/ME не нужно выполнять и пункт 5.

Программа IC-Prog установлена, настроена и готова к работе.

Последняя и несколько предыдущих версий ПО программатора WinPic800 представлены на сайте [12], но, к сожалению, скачать ПО с этого сайта не всегда удается. В этом случае программу WinPic800 v 3.64 можно разыскать через какую-либо поисковую машину (например, Google) или скачать с сайта нашего журнала (см. ниже).

Скачанный архив WinPic800.zip содержит дистрибутив WinPic800_v3_64.exe, который можно запустить прямо из архива.

Запускают дистрибутив, в открывшемся окне установщика появится окно инсталляции с одним пунктом «Выбор языка установки» («Choose a setup language»), в котором выбирают русский язык («Russian») и щелкают мышкой по кнопке «Далее» («Next»). Далее надо установить программу, следуя подсказкам установщика. По умолчанию программа устанавливается в папку C:Program FilesWinPic800. После установки следует запустить файл WinPic800.exe из этой папки. При этом, как правило, открывается русскоязычное окно программатора WinPic800 v3.64. Если же откроется англоязычное окно WinPic800 v3.64, то любой другой язык можно выбрать через меню «Language». При выборе русского языка может возникнуть проблема. Дело в том, что в большинстве случаев (но не всегда) ряд надписей кириллицей в этой программе будет отображаться нечитаемыми символами (см. рис. 6 и рис. 7).

Рис. 6. Нечитаемые символы в главном окне программы WinPic800

Рис. 7. Нечитаемые символы в окне «Чтение» программы WinPic800

Причиной этого является неудачный выбор кириллических шрифтов и кодовых страниц. Самый простой способ решения этой проблемы — использовать англоязычную версию программы. Автор русификации и украинизации этой программы Сергей Рюмик в статье [13] рекомендует бороться с этой проблемой изменением кодовых страниц. Выполняют это следующим образом:

1. Запускают редактор реестра: C:Windows egedit.exe.

2. Открывают в реестре папку HKEY_LOCAL_MACHINESYSTEM CurrentControlSetControlNls CodePage.

3. Перезаписывают значения трех кодовых страниц 1250, 1251, 1252 как «c_1251.nls» в соответствии с рис. 8.

4. Перезагружают компьютер, запускают WinPic800 и в меню «Language» выбирают русский язык («Russian»). Программа должна воспроизводить кириллицу без проблем.

Рис. 8. Окно редактора реестра regedit.exe с открытой папкой кодовых страниц (CodePage)

Этот метод универсальный и подходит для всех версий программы WinPic800. Правда, автор статьи [13] утверждает, что он срабатывает в полной мере не на всех ОС и компьютерах. Если проблемы с отображением кириллицы не устранились, или вы опасаетесь по какой-либо причине переписывать реестр, то нужно использовать программы-русификаторы (специальные патчи, заплаты). Такую заплату для WinPic800 версии 3.61 от Сергея Рюмика можно скачать по ссылке [14]. Этот русификатор нежелательно использовать для более поздних версий этой программы. По просьбе постоянных участников форума [15] Владимир Ачи-лов (aka shaman) в конце 2009 г создал программу-русификатор для WinPic800 v3.64. Архив русификатора содержит файл WinPic800.exe и папку Languages, в которой находится всего один файл Russian.ini. Этими файлами надо заменить соответствующие файлы ранее установленной программы WinPic800 версии 3.64. С разрешения В. Ачилова мы разместили архив с разработанной им версией русификатора на сайте нашего журнала [16]. В этот же архив, для удобства наших читателей, мы вложили дистрибутив WinPic800_v3_64.exe.

Теперь мы готовы на 100% «прошить» микроконтроллер PIC16F676. Для этого в панельку изготовленного нами адаптера надо вставить PIC16F676 и подключить адаптер к базовой плате, а базовую плату — к ПК. Затем следует подать на программатор напряжение питания и запустить одну из рассмотренных выше программ. Для примера, запустим IC-Prog 1.6B. При этом откроется главное окно программы (рис. 9).

Рис. 9. Главное окно программы IC-Prog 1.6B

В окошке справа вверху этого окна следует выбрать тип программируемого контроллера (PIC16F676), а затем через меню «Файл» открыть HEX-файл программы, которую надо «записать» в контроллер. И наконец, в меню «Комманды» (именно так, с двумя «м», названо это меню) выбрать строку «Программировать Все» или нажать кнопку F5 клавиатуры. Программатор запросит согласие на запись, которое следует подтвердить. Далее программатор проверяет память МК, считывает биты калибровки и выводит окно «OSCAL». В этом окне сообщается значение битов калибровки генератора (в моем случае OSCAL = 3428h). В этом же окне программатор запрашивает: «Вы настаиваете на использовании Установок из файла (3FFFh)?». Если в устройстве будет использоваться внутренний генератор микроконтроллера, необходимо обязательно ответить «Нет», иначе биты калибровки вместе с командой их установки будут затерты, и записанная программа не будет запускаться. После программирования микроконтроллера произойдет верификация(сверка памяти МК с буфером программатора) и выйдет информационное окно с сообщением: «Успешно проверено!».

Подобным образом работает и программа WinPic800, в чем читатель может убедиться самостоятельно.

В заключение необходимо отметить, что программы IC-Prog 1.6B и WinPic800 v3.64 поддерживают не только МК PIC16F630/676/684/688, но и множество других микроконтроллеров, что значительно расширяет возможности аппаратного контроллера программатора PonyProg2000.

Литература и интернет-источники

1. http://www.jdm.homepage.dk/ — сайт разработчика программатора JDM (Jens Dyekjar Madsen).

2. http://www.lancos.com/ — сайт разработчика программатора PonyProg2000 Клаудио Ланконелли (Claudio Lanconelli).

3. Безверхний И. Программатор устройств с последовательным доступом PonyProg2000: описание программного обеспечения. «Ремонт & Сервис». 2005, № 9, с. 5458.

4. Безверхний И. Программатор устройств с последовательным доступом PonyProg2000. Аппаратный контроллер SI-Prog. «Ремонт & Сервис». 2005, № 10, с. 48-56.

5. http://www.flycont.com/ — html/pp2k.html.

6. Microchip. PIC16F630/676. Data Sheet. 14-Pin FLASH-Based 8-Bit CMOS Microcontrollers.

7. http://www.remserv.ru/cgi/down-load/Pony_16F676.rar

8. http://www.ic-prog.com/ — сайт программатора IC-Prog.

9. http://www.ic-prog.com/icprog106B.zip — адрес для скачивания ПО IC-Prog 1.6B.

10. http://www.ic-prog.com/icprog_driver.zip — адрес для скачивания драйвера IC-Prog для WINDOWS NT/2000/XP.

11. http://www.ic-prog.com/icprogh_rus.zip — адрес для скачивания русскоязычного файла помощи IC-Prog.

12. http://www.winpic800.com/ — сайт программатора WinPic800.

13. Рюмик С.М. С Интернета по нитке. Радиомир. 2007, № 7, с. 39.

14. http://www.ra-publish.com.ua/programs/Ra-04-2007-usb3.zip — адрес для скачивания русификатора WinPic800 v3.61.

15. http://www.pic.borda.ru/ — форум по микроконтроллерам PIC.

16. htto://www.remserv.ru/cgi/down-load/WinPic800_V3_64.rar.

Автор: Игорь Безверхний (Украина, г. Киев)

Источник: Ремонт и сервис

Дата публикации: 06.05.2015

Мнения читателей

Нет комментариев. Ваш комментарий будет первый.

Вы можете оставить свой комментарий, мнение или вопрос по приведенному вышематериалу:


www.radioradar.net

микроконтроллер pic | PIC16F946-I/PT | MICROCHIP TECHNOLOGY

Каталог товаров Каталог

  • Предохранители и защита (5311)
  • Трансформаторы и сердечники (3338)
  • Корпуса в ассортименте (4004)
  • Пассивные компоненты (29763)
  • Полупроводники и аксессуары (33331)
  • Оптоэлектроника, индикаторы, освещение (12767)
  • Оборудование для мастерских (12898)
  • Крепёж и механические элементы (8866)
  • Источники питания (7241)
  • Провода, кабель и аксессуары (12969)
  • Разъемы промышленные и сигнальные (26909)
    • Разъёмы коаксиальные RF (581)
    • Разъeмы аудио, видео (1299)
    • Коннекторы и кабельные наконечники (995)
    • Разъeмы для передачи данных (2502)
    • Разъeмы питающие (2998)
    • Разъeмы сигнальные (5841)
      • Штекерные планки и гнезда (1082)
      • Разъeмы сигнальные растровые (1614)
        • Разъeмы сигнальные растр 2,54мм (152)
        • Разъeмы сигнальные растр 3,96мм (169)
        • Разъeмы сигнальные растр 4,50мм (18)
        • Разъeмы сигнальные растр 5,70мм (28)
        • Разъeмы сигнальные растр 4,20мм (168)
        • Разъeмы сигнальные растр 3,00мм (143)
        • Разъeмы сигнальные растр 2,50мм (218)
        • Разъeмы сигнальные растр 1,25мм (139)
        • Разъeмы сигнальные растр 5,08мм (44)
        • Разъeмы сигнальные растр 1,00мм (107)
        • Разъeмы сигнальные растр 1,50мм (213)
        • Разъeмы сигнальные растр 2,00мм (171)
        • Разъeмы сигнальные растр 5,00мм (15)
        • Разъeмы сигнальные растр 10мм (1)
        • Разъeмы сигнальные растр 5,03мм (11)
        • Разъeмы сигнальные растр 3,68мм (7)
        • Разъeмы сигнальные растр 6,35мм (8)
        • Разъeмы сигнальные растр 7,50мм (2)
      • Разъeмы DIN 41.612, DIN 41.617 (122)
      • Разъeмы MTA-100 растр 2,54мм (56)
      • Разъeмы HE14 растр 2,54мм (15)
      • Разъeмы FFC/FPC (514)
      • Разъeмы IDC (791)
      • Разъeмы IDC picoflex растр 1,27мм (32)
      • Разъeмы Micro-Match растр 1,27мм (188)
      • Разъeмы пластина — пластина (713)
      • Разъeмы CE100 растр 2,54мм (275)
      • Разъeмы CE156 растр 3,96мм (219)
      • Разъeмы Dubox растр 2,54мм (47)
      • Разъeмы Mini-Clamp растр 2мм (26)
      • Разъeмы KK растр 2,54мм (102)
      • Разъeмы KK растр 3,96мм (45)
    • Разъeмы промышленные (10167)
    • Разъeмы прочие (505)
    • MENNEKES (2021)

komplekt-a.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *