Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
ПМ.02 Применение микропроцессорных систем, установка и настройка периферийного оборудованияМинистерство образования и молодежной политики СК ГБПОУ «Лермонтовский региональный многопрофильный колледж»
Работа допущена к защите Зав. кафедрой «Компьютерные системы и комплексы» ______________Н.Н. Шляхова «____»______________2016 г.
КУРСОВАЯ РАБОТА Пояснительная записка
Тема: Разработка измерителя частоты сигналов на микроконтроллере pic16f628 ПМ.02 Применение микропроцессорных систем, установка и настройка периферийного оборудования специальность 09.02.01 «Компьютерные системы и комплексы»
Лермонтов, 2016
СОДЕРЖАНИЕ
СОДЕРЖАНИЕ. 3 ВВЕДЕНИЕ. 4 1. ВЫБОР МИКРОКОНТРОЛЛЕРА ДЛЯ РАЗРАБОТКИ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628. 6 2. ПРОЕКТИРОВАНИЕ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628. 8 3. РАЗРАБОТКА ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628. 10 4. РАЗРАБОТКА ПРОГРАММЫ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628. 12 5. ТЕСТИРОВАНИЕ ПРОГРАММЫ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628. 16 ЗАКЛЮЧЕНИЕ. 19 СПИСОК ЛИТЕРАТУРЫ.. 20 ПРИЛОЖЕНИЯ………………………...…………………………………21
ВВЕДЕНИЕ
Измеритель частоты может применяться практически где угодно. Радиолюбители применяют такие устройства при разработке своих приборов, они являются основой измерителей скорости и схожих приспособлений. Измеритель частоты может потребоваться для калибровки цифровых устройств, а так же повсеместно применяются на заводах и предприятиях, т.е. там где требуется отслеживать технические процессы. Частота импульсов может быть образованна не только другим цифровым устройством, но и всяческими датчиками, отслеживающими количество циклов различных операций. Несмотря на это, измерители частоты обычно не встречаются в мультиметрах и в виде простых дешёвых модулей, вместо этого на рынке в основном встречаются большие и сложные приборы с соответствующей стоимостью. Даже если учесть высокий функционал, широкий диапазон измерений и гибкую настройку, короб весом один-два килограмма точно нельзя назвать мобильным. Поэтому и возникла идея создания простого дешёвого и компактного частотомера на базе микроконтроллера. Практически во всех современных микроконтроллерах одним из базовых устройств является таймер-счётчик. Зачастую они способны так же работать в режиме широтно-импульсной модуляции (ШИМ). Изучая рынок микроконтроллеров, сразу же в глаза бросаются крайне популярные контроллеры фирмы AVR, однако, предпочтение всё таки было отдано компании microchip с их микроконтроллерами PIC. Дело в том что наиболее распространённые модели AVR являются крайне универсальными устройствами, что связанно с большим количеством периферии и ножек. Если стоит вопрос о размере готовой платы, то AVR готова предложить микроконтроллер ATtiny 2313, однако он не имеет аналого-цифрового преобразователя и во многом уступает более дорогим моделям. ATmega 8 имеет на борту АЦП, но у неё уже 24 вывода, а где-то этого может быть слишком много. PIC же может предложить крайне недорогой контроллер с небольшим количеством выводов, но с достаточно широким функционалом. Конечно, к недостаткам можно отнести надобность в относительно дорогом программаторе, который вряд ли удастся найти в глубинке. Здесь на помощь придут интернет магазины, к тому же такой программатор будет отличаться гораздо большей надёжностью. Максимальная частота, которую может измерить контроллер, определяется выбранной моделью, если точнее, то периферией, которой он оборудован. В основном это разрядность самого контроллера и его таймеров. Важный момент заключается в том, что разрабатываемый частотомер может быть выполнен не только как отдельное устройство, но и как внутрисхемный модуль. Для реализации подобного приспособления без микроконтроллера понадобились бы десятки цифровых микросхем, а микроконтроллер, особенно в smd-исполнении, сможет выполнять всю эту работу самостоятельно, занимая при этом несколько сантиметров на печатной плате устройства.
1. ВЫБОР МИКРОКОНТРОЛЛЕРА ДЛЯ РАЗРАБОТКИ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
Выбор микроконтроллера должен производиться не «с потолка» и пропускать этот шаг ни в коем случае нельзя. Подбор оптимальной модели во многом определяет стоимость будущего изделия, интерфейсы, через которыми он может «держать связь» с другими контроллерами и с пользовательским интерфейсом. Разные контроллеры требует разных подходов при программировании и разных программаторов. Стоит сразу определить, какие требования будут предъявляться к микроконтроллеру: · наличие всей необходимой периферии для поставленной задачи – лучше сразу выбрать устройство, оборудованное некоторыми полезными аппаратными средствами, чем усложнять код дополнительными процедурами для компенсации этих функций; · отсутствие избыточности функционала – само собой для частотомера подойдёт и какая-нибудь сороконогая схема контроллера ATmega 16, но большинство её выводов будет висеть в воздухе, а огромное количество периферии потреблять лишний ток, не говоря уже о занятии лишнего места на плате; · доступность – в некоторых ситуациях легче купить модель микроконтроллера, которая есть на прилавке, чем заказывать из сети и платить двойную, а то тройную цену с учётом доставки; · надёжность – этим давно хвастают как Microchip, так и AVR, так что в этом вопросе особенных проблем быть не может, большинство контроллеров этих фирм зарекомендовали себя как качественные и редко дающие сбои устройства.
Далее будут рассмотрены несколько моделей микроконтроллеров компании Microchip из линейки PIC:
Как видно из сравнения, первый контроллер PIC12F629 обладает достаточным объёмом памяти для достаточно объёмных программ, но при этом не имеет каналов широтно-импульсной модуляцией, которая может оказаться полезной практически в любом устройстве. PIC16F84A обладает модулем ШИМ, имеет 18 ножек и один таймер, но объём памяти – всего 1 Кб, этого очень мало даже для небольшого проекта. PIC16F628 же обладает очень большим объёмом памяти, имеет модуль ШИМ, оборудован тремя таймерами и 18 выводами. Стоимость такого контроллера составляет порядка 100 рублей в розничной продаже, и выбор будет остановлен именно на нём. 2. ПРОЕКТИРОВАНИЕ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
Чтобы спроектировать устройство частотомера, нужно первым делом понять, что требуется от схемы, какие операции будет выполнять устройство и что для этого нужно, чтобы позже не путаться и лучше понимать суть проводимой работы. Итак, прибор будет выполнять следующие операции: · считать количество импульсов за заданный период времени; · обрабатывать это число и преобразовывать его для вывода на индикатор; · выводить на индикатор числа поочерёдно с определённым интервалом; При этом желательно, чтобы применялся внешний кварцевый резонатор, для чего это нужно – будет описано в следующей главе. Обобщая предыдущие три пункта, можно составить функциональную схему данного устройства.
Рис. 1. Функциональная схема измерителя частоты сигналов Для измерения частоты планируется применить встроенный в микроконтроллер аппаратный счётчик. Принцип его работы заложен в самом устройстве, а функционирование элементарно – устройство следит за появлением на специальной ножке высокого уровня напряжения и как только он будет зарегистрирован, прибавляет к значению счётчика единицу. Несмотря на наличие системы прерываний, задержка будет формироваться пропуском тактов, такой метод неэффективен с точки зрения грамотного расходования ресурсов контроллера. Последний в данном устройстве не должен выполнять каких-либо сложных задач, которые требовали постоянной обработки. Вернее, конечно, счётный вход должен работать постоянно, но именно поэтому им занимается аппаратный счётчик, независимый от центрального процессора. В общем, такое формирование задержки вполне допустимо. 3. РАЗРАБОТКА ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
Для индикации входной частоты будет применяться семисегментный трёхразрядный светодиодный индикатор. Специфика его работы такова, что в простых моделях индикатор не имеет ни встроенных декодеров, ни каких-либо устройств для поддержания сегмента активным. Требуется постоянно поочерёдно зажигать числа со скоростью достаточной, чтобы человеческий глаз не видел мерцания. При этом, конечно, создаётся эффект широтно‑импульсной модуляции, т.е. сегменты получают лишь часть энергии из-за того что работают не постоянно, свечение становится более тусклым, но обычно это не является большой проблемой. Сегменты можно питать и напрямую от контроллера, но при этом яркость их действительно будет заметно занижена, к тому же, может возникнуть просадка напряжения, из-за которой станут нестабильно работать модуль компаратора и тактовый генератор. Чтобы избежать этого, лучше включать сегменты через npn или pnp транзистор, в зависимости от того, какую логику планируется использовать, положительную или отрицательную. Так как ток от ножки контроллера будет течь через базу на землю, требуется защитить микроконтроллер добавлением резисторов, номиналом в несколько КОм. Так как биполярный транзистор открывается напряжением, стоит взять запас, поэтому применён будет резистор номиналом 4 КОм-а. Но в защите от замыкания нуждается не только контроллер, но и сам индикатор. Так как он всё ещё остаётся светодиодным и достаточно примитивным, то, как и любой светодиод, его сегменты могут быть повреждены большим током. Для ограничения этого тока установим резисторы возле каждой из ножек-анодов. Обычно применяются резисторы номиналом порядка 100 Ом, но так как было решено брать номиналы с запасом, будут установлены варианты с номиналом 400 Ом, это так же не изменит яркость, но обеспечит лишнюю защиту. Контроллеру необходима тактовая частота. Изначально он берёт её со встроенного генератора, но тот не отличается высокой точностью и иногда желательно заменить его внешней частотозадающей цепью. В данном случае устройство будет измерять сигналы до одного мегагерца, поэтому временные задержки, между которыми производится считывание счётчика, должно быть задано очень точно. В качестве внешней тактовой цепи будет служить кварцевый резонатор на четыре мегагерца, вполне штатная скорость для этого микроконтроллера. Для надёжности и уменьшения помех будут установлены два конденсатора на землю. Электрическая схема устройства приведена в Приложении 1. 4. РАЗРАБОТКА ПРОГРАММЫ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
При написании программы всегда первым делом проводится инициализация. Она позволяет подготовить микроконтроллер к работе, запустить необходимые функции и описать, за что будут отвечать ножки. Это общие правила. При разработке программ в среде AVR studio многие вещи выполняются в автоматическом режиме. С контроллерами компании Microchip дело обстоит сложнее, среда программирования для PIC не предусматривает автоматическое именование служебных регистров, поэтому его необходимо провести самостоятельно. Это делается с помощью директивы EQU, пример: d16 EQU H'36' – ячейке 36 присвоить имя D16. Буква H в данном случае говорит о том, что число записано в шестнадцатеричной системе счисления. Таким образом нужно дать имена всем основным специальным регистрам. Далее, опять же, для удобства программиста, назначаются имена переменных. Кроме того, обязательно применение директивы #include, она указывает на информационный файл конкретного микроконтроллера, в котором описана структура его памяти, система команд и другие элементы. В программе реализована функция временной задержки. Она исполняется за счёт занесения в два регистра определённых чисел и в применении специально обставленного цикла. DELAY1 movlw D'125' movwf timer1 movlw D'7' movwf timer2 LOOP1 decfsz timer1, f goto loop1 decfsz timer2, f goto loop1 return
В приведённом участке кода DELAY1 и LOOP1 – метки, предназначенные для удобного перемещения по программе и осуществлении условных переходов. В два регистра, timer1 и timer2, записываются значения, буква D говорит о том, что используется десятичная система счисления. В следующей части применяется команда decfsz, которая декрементирует число в регистре и пропускает следующую команду, если оно достигло нуля. Таким образом, цикл выполняет чётко определённое количество раз, пересчётом тактов и определяется величина задержки. Другой участок кода отвечает за пересчёт чисел. Дело в том, что на семисегментный индикатор требуется вывести три отдельных числа. Информация же с таймера представляет из себя цельное двоичное число. Его необходимо превратить в три, в каждом будет число, соответствующее числу десятков, сотен и единиц. Для этого используется следующий участок программы: dsp1 movfw dgt100 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt100 addlw H'30' movwf FSR movfw INDF movwf PORTA return
dsp2 movfw dgt10 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt10 addlw H'30' movwf FSR movfw INDF movwf PORTA return
dsp3 movfw dgt1 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt1 addlw H'30' movwf FSR movfw INDF movwf PORTA return
Здесь, путём взаимодействия с буферными регистрами W и F, проходит следующий процесс: · в буфер заранее заносится число; · в цикле из него вычитаются сотни, десятки или единицы, каждый раз инкрементируется счётчик; · в тот момент, когда исходное число станет меньше или равно нулю, происходит переход к следующему циклу. В итоге из одного числа выводятся три. Их уже можно выводить на индикатор. Сам же счёт проходит с помощью аппаратного таймера-счётчика. Программа просто очищает его, выдерживает временной интервал и после этого считывает значение. Т.к. считывания происходят не каждую секунду, а гораздо чаще, полученное значение так же нужно умножить на определённый коэффициент, с этим тоже легко расправляется программный модуль. Полный текст программы приведён в Приложении 2.
5. ТЕСТИРОВАНИЕ ПРОГРАММЫ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
При разработке программы, в первую, очередь, применялась среда программирования. Их представлено достаточно много, но была выбрана так называемая MicroCode Studio Plus. Рис. 2. Программирование в среде MicroCode Studio Plus Редактор приложения MicroCode Studio Plus поддерживает подсветку и подсказки синтаксиса кода, контекстно-зависимую справку, установку контрольных точек, интеллектуальную табуляцию, выравнивание строк комментариев, автоизменение формы записи идентификаторов, модификацию используемых шрифтов и многое-многое другое. Имеются функции распечатки страниц редактора, отмена/возврат последних сделанных изменений, вырезка/копирование/вставка/удаление выделенного текста, поиск/замена текстовых фрагментов. Рис. 3. Процесс прошивки FUSE-битов
Программа предназначена для работы с компилятором PICBasic или PicBasic Pro (ассемблер PM.EXE). Также имеется возможность устанавливать ассемблер MPASM компании Microchip. При первом запуске программа MicroCode Studio Plus автоматически находит и прописывает месторасположение компилятора (не находит, если в пути к папке есть русские буквы). Если в системе присутствуют несколько компиляторов, то путь можно прописать вручную. Поддерживаются следующие режимы работы: компилирование активного окна, компилирование активного окна с записью кода в МК, компилирование с созданием шестнадцатеричного файла с дополнительной информацией для работы в отладочном режиме, компилирование и трансляция текста с добавлением отладочной информации и записью в контроллер. Окно результатов компилирования дает возможность мгновенно перейти к строкам программы, содержащим ошибки. Режим анимации процесса выполнения программы подсвечивает строки кода и показывает текущие значения всех регистров, переменных, СППЗУ и памяти. Имеется возможность провести интерактивную отладку программы.
ЗАКЛЮЧЕНИЕ
В ходе разработке курсового проекта были освоены микроконтроллеры линейки PIC компании Microchip, что в условиях современной «избалованности» заказчиков является крайне полезным навыком, ведь задачи бывают самые разные и в какой-то момент под рукой может не оказаться привычной AVR. Так же, переключиться на другой род контроллеров может понадобиться, если вдруг среди основных не окажется устройства, отвечающего всем требованиям. Так как PIC-и устроены довольно специфично, это послужило своеобразной тренировкой. Пришлось освоить новые команды и особенности языка. Например, банки памяти, в которых распределена информация и между которыми необходимо постоянно переключаться. Говоря об устройстве, был разработан частотомер, измеряющий частоту входного сигнала до 1 Мгц - устройство, полезное как в быту, так и на производстве, радиолюбителям и профессиональным техникам. В отличие от частотомеров, находящихся в продаже, этот прибор гораздо меньше и, что важно, гораздо дешевле. При использовании семисегментных индикаторов стоимость изделия может составлять около 200-300 рублей. СПИСОК ЛИТЕРАТУРЫ
1. Гелль П.П., Н.К.Иванов-Есипович. Конструирование и микроминиатюризация радиоэлектронной аппаратуры: Учебник для вузов. - Л.: Энергоатомиздат. Ленингр.отд-ние, 1984. – 536 с. 2. Гуткин А.С. Проектирование радиосистем и радиоустройств. - М: Высш. Шк., 1989. 3. Микроконтроллеры. Выпуск 2: Однокристальные микроконтроллеры PIC12c5x, PIC16x8x, PIC14000, M16C/61/62. Перевод с англ. Б.Я. Прокопенко / Под ред. Б. Я. Прокопенко. - М.: ДОДЭКА, 2000.- 336 с. 4. Радио №1, 2001г. - с.21, "Частотомер на PIC-контроллере". 5. Справочник по конструированию РЭА под ред. А.И. Горобец, А.И. Степаненко, В.М. Коронкевич. 6. Угрюмов Е.П. Цифровая схемотехника. - СПб.: БХВ-Санкт-Петербург, 2000. - 528 с.: ил. 7. Фрумкин Г.Д. Расчет и конструирование радиоаппаратуры: Учебник для радиотехнич. спец. Техникумов. М.: Высш. Шк.,1989. - 463 с.: ил. 8. microchip:8101/ 9. paguo/ 10. disall.narod/picpro.htm 11. chipnews/html.cgi/arhiv/index.htm
ПРИЛОЖЕНИЕ 1 ПРИНЦИПИАЛЬНАЯ ЭЛЕКТРИЧЕСКАЯ СХЕМА ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
ПРИЛОЖЕНИЕ 2 ПОЛНЫЙ ТЕКСТ РАЗРАБОТАННОЙ ПРОГРАММЫ ИЗМЕРИТЕЛЯ ЧАСТОТЫ СИГНАЛОВ НА МИКРОКОНТРОЛЛЕРЕ PIC16F628
_BODEN_ON EQU H'3FFF' _BODEN_OFF EQU H'3FBF' _CP_ALL EQU H'03FF' _CP_75 EQU H'17FF' _CP_50 EQU H'2BFF' _CP_OFF EQU H'3FFF' _DATA_CP_ON EQU H'3EFF' _DATA_CP_OFF EQU H'3FFF' _PWRTE_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LVP_ON EQU H'3FFF' _LVP_OFF EQU H'3F7F' _MCLRE_ON EQU H'3FFF' _MCLRE_OFF EQU H'3FDF' _ER_OSC_CLKOUT EQU H'3FFF' _ER_OSC_NOCLKOUT EQU H'3FFE' _INTRC_OSC_CLKOUT EQU H'3FFD' _INTRC_OSC_NOCLKOUT EQU H'3FFC' _EXTCLK_OSC EQU H'3FEF' _LP_OSC EQU H'3FEC' _XT_OSC EQU H'3FED' _HS_OSC EQU H'3FEE'
d0 EQU H'20' d1 EQU H'21' d2 EQU H'22' d3 EQU H'23' d4 EQU H'24' d5 EQU H'25' d6 EQU H'26' d7 EQU H'27' d8 EQU H'28' d9 EQU H'29' dF EQU H'2A' d10 EQU H'30' d11 EQU H'31' d12 EQU H'32' d13 EQU H'33' d14 EQU H'34' d15 EQU H'35' d16 EQU H'36' d17 EQU H'37' d18 EQU H'38' d19 EQU H'39' dFF EQU H'3A' dgt100 EQU H'3B' dgt10 EQU H'2B' dgt1 EQU H'2F' TIMER1 EQU H'2C' TIMER2 EQU H'2D' count EQU H'2E' cnvrt EQU H'3C'
ORG 0 GOTO init
DELAY1 movlw D'125' movwf timer1 movlw D'7' movwf timer2 LOOP1 decfsz timer1, f goto loop1 decfsz timer2, f goto loop1 return
dsp1 movfw dgt100 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt100 addlw H'30' movwf FSR movfw INDF movwf PORTA return
dsp2 movfw dgt10 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt10 addlw H'30' movwf FSR movfw INDF movwf PORTA return
dsp3 movfw dgt1 addlw H'20' movwf FSR movfw INDF movwf PORTB movfw dgt1 addlw H'30' movwf FSR movfw INDF movwf PORTA return
init MOVLW B'00000111' MOVWF CMCON movlw B'11101' movwf T2CON movlw B'101110' movwf T1CON BSF STATUS,RP0 movlw.250 movwf PR2 MOVLW B'100' MOVWF OPTION_REG movlw B'11000000' movwf TRISB MOVLW B'11100000' MOVWF TRISA BCF STATUS,RP0
movlw B'111111' movwf d0 clrf d10 movlw B'110' movwf d1 clrf d11 movlw B'11011' movwf d2 clrf d12 bsf d12,3 movlw B'1111' movwf d3 clrf d13 bsf d13,3 movlw B'100110' movwf d4 clrf d14 bsf d14,3 movlw B'101101' movwf d5 clrf d15 bsf d15,3 movlw B'111100' movwf d6 clrf d16 bsf d16,3 movlw B'111' movwf d7 clrf d17 movlw B'111111' movwf d8 clrf d18 bsf d18,3 movlw B'100111' movwf d9 clrf d19 bsf d19,3 movlw B'110001' movwf dF clrf dFF bsf dFF,3
clrf dgt1 clrf dgt10 clrf dgt100
main movlw.120 movwf count loop2 call dsp1 bsf PORTA,0 call delay1 call dsp2 bsf PORTA,1 call delay1 call dsp3 bsf PORTA,2 call delay1 decfsz count,f goto loop2
bcf PIR1,TMR2IF clrf TMR1L clrf TMR1H gopen btfss PIR1,TMR2IF goto gopen bsf T1CON,TMR1ON bcf PIR1,TMR2IF gclse btfss PIR1,TMR2IF goto gclse bcf T1CON,TMR1ON bcf PIR1,TMR2IF incf TMR1H,f movfw TMR1L movwf cnvrt incf cnvrt,f clrf dgt1 clrf dgt10 clrf dgt100
b2d decfsz cnvrt,f goto b2d1 goto b2d2
b2d1 incf dgt1,f movlw.10 subwf dgt1,w btfss status,z goto b2d incf dgt10,f clrf dgt1 movlw.10 subwf dgt10,w btfss status,z goto b2d incf dgt100,f clrf dgt10 movlw.10 subwf dgt100,w btfss status,z goto b2d clrf dgt100 movlw.10 movwf dgt10 movlw.120 movwf count loop3 call dsp1 bsf PORTA,0 call delay1 call dsp2 bsf PORTA,1 call delay1 call dsp3 bcf PORTA,2 call delay1 decfsz count,f goto loop3 goto main b2d2 decfsz TMR1H,f goto b2d END
|