русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Временная задержка длительностью 1с.


Дата добавления: 2015-08-31; просмотров: 1552; Нарушение авторских прав


Секунда является очень большим интервалом по сравнению с частотой тактового генератора (4 МГц). Такие задержки сложно реализовать методом вложенных циклов. Поэтому их набирают из точно подстроенных задержек меньшей длительности. Например. задержку в 1с можно реализовать десятикратным вызовом подпрограммы, реализующей задержку 100 мкс.

ONESEC

MOVLW D’10’ ; число вызовов

MOWWF COUNT ; подпрограммы DELAY_100

LOOP

CALL DELAY_100 ; задержка 100 мкс

DECFSZ COUNT,f ; декремент COUNT и цикл,

GOTO LOOP ; если не равно 0

Параметризируемые подпрограммы

Для успешной работы любой подпрограммы необходимо однозначно определить способ передачи в нее исходных данных и способ вывода результата ее работы. Подпрограмма, которой требуется дополнительная информация в виде параметров ее настройки или операндов, называется параметризируемой. Передача параметров в подпрограмму задержки может осуществляется через регистры общего назначения. При передаче входных параметров основная программа обязательно содержит команды загрузки этих регистров, а подпрограмма - команды считывания из этих регистров.

Примером параметризируемой подпрограммы служит подпрограмма задержки Рис. 9.6. Основная программа обеспечивает передачу в подпрограмму загрузку счетчика (MOVLW D’20’), обеспечивая требуемое время задержки. Подпрограмма задержки Рис. 9.6. не возвращает никаких значений в вызывающую программу.

;************************************************

Delay_1ms Подпрограмма формирования задержки 1 мс

;************************************************

COUNT EQU H’20’ ; счетчик цикла

 

GOTO START ;

;--------------------------------------------------------------------------

;Подпрограмма задержки

;--------------------------------------------------------------------------

DELAY_1ms



MOVWF COUNT ; счетчика цикла

LOOP

NOP ; пустая команда

DECFSZ COUNT,f ; ЕСЛИ содержимое счетчика не0

GOTO LOOP ;ТО цикл

RETURN ;

;---------------------------------------------------------------------------

Основная программа

;----------------------------------------------------------------------------

START

MOVLW D’249’ ; число повторов

CALL DELAY_1ms ; задержка 1 мс

……. …….. ;

Рис. 9.6. Подпрограмма формирования задержки 1 мс

Подпрограмма SVN_SEG при передаче входных параметров загружает рабочий регистр W, а основная программа при выходе считывает его содержимое. Подпрограмма Рис. 9.9.демонстрирует загрузку однобайтного значения в рабочий регистр и используется совместно с семисегментным индикатором.

Системное представление подпрограммы приведено на Рис. 9.7,а.Входным сигналом является 4-х битный двоичный код, находящийся в рабочем регистре: от b’0000’ до b’1001’. Выходным значением, также возвращаемым в рабочий регистр, является соответствующий семисегментный код, необходимый для отображения соответствующей цифры (см. Табл. преобразования).

Рис. 9.7.Семисегментный индикатор

Таблица преобразования 7-сегментного кода приведена на Рис. 9.8. При использовании такой таблицы извлечение k-го элемента таблицы заключается в исполнении N-й команды. При этом константа, находящаяся в команде, будет помещена в W регистр , после чего произойдет возврат в вызывающую программу. В примере k=6, поэтому выполняется 6-я команда RETLW, возвращающая код b’011111000’для символа 6.


Рис. 9.8. Таблица преобразования

Подпрограмма, приведенная ниже, осуществляет выборку элемента таблицы, прибавляя число N, передаваемое через рабочий регистр, к байту счетчика РСL. Поскольку РС уже указывает на 1-ю команду RETLW,то после прибавления Nон будет указывать на N-ю команду, что нам и требуется.

SVN_SEG

ADDWF PCL,f ; прибавляем PCL+W получая PC+N

хgfedcba

RETLW b’00111111’ ; цифра 0, возвращается при N=0

RETLW b’00000110’ ; цифра 1, возвращается при N=1

RETLW b’01011011’ ; цифра 2, возвращается при N=2

RETLW b’01001111’ ; цифра 3, возвращается при N=3

RETLW b’01100110’ ; цифра 4, возвращается при N=4

RETLW b’01101101’ ; цифра 5, возвращается при N=5

RETLW b’01111101’ ; цифра 6, возвращается при N=6

RETLW b’00111111’ ; цифра 7, возвращается при N=7

RETLW b’00111111’ ; цифра 8, возвращается при N=8

RETLW b’00111111’ ; цифра 9, возвращается при N=9

Рис. 9.9. Подпрограмма преобразования двоичного кода в семисегментный

Пример: формирование импульсов прямоугольной формы

Программа должна сформировать импульсы прямоугольной формы частотой 5 КГц на одном из выводов (нулевом) порта В. Инициализация PORTВ выполняется аналогично программе SMOTOR-2 рис.4.7.

Далее следует формирование импульса (высокого уровня) на выводе RB0. Применяется бит - ориентированная команда BSF в которой указывается нулевой бит регистра PORTB, который нужно установить: BSF PORTB,0.

Теперь наша задача сделать так, чтобы с момента установки и до момента сброса вывода RB0 прошло ровно Т/2=1/2F=1/2х5х103 Гц = 100мкс.

;****************************************************

; MULTI - Формирование звукового сигнала

;****************************************************

; пьезоизлучатель подключен к RB0-------------------

; Определение рабочего регистра--------------------

COUNT EQU 0CH ; Счетчик времени полупериода.

GOTO START ; Переход на начало программы.

;------------------------------------------------------------------

;Подпрограмма задержки------------------------------

;------------------------------------------------------------------

DELAY

MOVWF COUNT ; копировать из W в регистр Cnt0

PAUZE

DECFSZ COUNT,f; Декремент содержимого регистра Cnt0

GOTO PAUZE ; и цикл пока CNT0 не = 0

RETURN ; CNT0 = 0, вернуться в основную программу

;------------------------------------------------------------------

; Основная программа-----------------------------------

; -----------------------------------------------------------------

START

BSF STATUS,RP0 ; Перейти на 1 page .

MOVLW B'00000000'; Записать константу 0 в аккумулятор (W).

MOVWF TRISB ; Скопировать 0 из W в регистр TrisB.

BCF STATUS,5 ; Вернуться на 0 page

; Формирование импульса на выводе RB0------------------

S_LOOP

BSF PORTB,0 ; Установить RB0

MOVLW .32 ; Записать в регистр W константу .32

CALL DELAY

; Формирование паузы на выводе RB0 ---------------------

BCF PORTB,0 ; Сбросить RB0.

MOVLW .32 ; Записать в регистр W константу .32

CALL DELAY

GOTO S_LOOP ; Переход на новый цикл программы.

; Директива конца программы -----------------------------

END



<== предыдущая лекция | следующая лекция ==>
Временная задержка малой длительности. | ОРГАНИЗАЦИЯ ПРОГРАММ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.275 сек.