Авторизация


...

Кто на сайте?

Сейчас 84 гостей и один зарегистрированный пользователь на сайте

  • sundbarr

Статистика

-Посетители : 25302
-Материалы : 210

Пользователь сайта продает...

  Программатор Pic K-150

Пользователь сайта покупает...

Применение команды DAW в МК 18 серии.

Автор: Николай Викторов Просмотров: 3811

 

Так что же это за команда?

Из официального источника :

Команда производит десятичную коррекцию упакованного результата сложения двух BCD-чисел в упакованном формате.

Как мы помним BCD-формат это форма записи целых чисел, когда каждый десятичный разряд числа записывается в виде его четырёхбитного кода. Под понятием упакованный подразумевается, что в одном байте записано две цифры, т.е. в каждом полубайте по цифре от 0 до 9.  После выполнения команды DAW производится коррекция  суммы для получения допустимого BCD числа WREG, а именно :

  • если самый правый полубайт WREG  больше 9 или флаг DC=1, то добавляется  число 0x06.
  • если самый левый  полубайт WREG  больше 9 или флаг C=1, то добавляется  число 0x60.

В итоге после выполнения DAW добавляется к WREG числа  0х00, 0х60, 0х06 или 0х66  для коррекции результата после сложения чисел упакованных  BCD формате. Если после выполнение команды  DAW результат получается  100 и более в BCD, то в этом случае  устанавливается флаг переноса (С).

Рассмотрим пример сложения числа "1"  и регистра Temp в BCD формате (первоначально  в "0"):



            List        P=P18F46K20
            #Include    P18F46K20_28.INC
            
;************************************
; Регистры общ. назначения
;************************************
            cblock             
            temp
            endc
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================             
START       movlw               .1 ;
            addwf           temp,0 ;
            DAW                    
            movwf             temp ;  
            bra              START ;
end

После каждого сложения в регистре  "temp"  младший разряд будет увеличиваться на единицу   (0-9 ), как только младший разряд (полубайт) будет больше 9  произойдет перенос в старший  и в результате в старшем разряде будет число 1 в младшем 0 ,  (10 в BCD формате). Так до 99, потом будет число 00 и установится флаг переноса. 

Рассмотрим  работу команды на примере ПП 5-разрядного таймера  :

 

 
             List        P=P18F46K20
            #Include    P18F46K20_28.INC
            
;************************************
; Регистры общ. назначения
;************************************
            cblock
            Razr_G
            Razr_H            
            Razr_L
            endc
;*******************************************************************
            org                  0 ;
            goto             START ;
;===================================================================
; Начало программы.
;===================================================================             
START       movlw               .1 ; +1
            addwf         Razr_L,0 ; = счет двух разрядов
            DAW                       
            movwf         Razr_L   ; до 99 =
            
            movlw                0 ; = счет флага переноса
            addwfc        Razr_H,0 ; два старших разряда
            DAW
            movwf           Razr_H ; до  99ХХ =

            clrf            Razr_G ; главный разряд 1хххх
            bc                 DDD ;
            bra              START ;
            
DDD         incf            Razr_G ;
            nop
Stop        bra               Stop ; стоп  результат 10.000

end

 

В этой подпрограмме счет происходит до 10.000  в привычной нам форме исчисления.

Здесь показывается один из способов применение команды DAW, на самом деле она может применяться в различных приложениях. Хотя программисты не так часто ее используют.

 Смотреть видео примера...

 

               

 

 Скачать проект

Ссылка для скачивания доступна только авторизованным пользователям сайта !

 

Случайные статьи....

Prev Next

1-Wire эмулятор

04-05-2012 Sergey Roslik

1-Wire эмулятор

     Уникальность микросхем Dallas с интерфейсом 1-Wire заключается в необходимости использования для связи с ними только одной сигнальной линии и общего проводника. Питание и связь могут осуществляться через одно соединение. Режим связи – асинхронный, полудуплексный, который строго следует схеме...

Замена контроллера на плате конденсатора для автозвука.

29-04-2011 Альберт Бикбулатов

Замена контроллера на плате конденсатора для автозвука.

Столкнулся с парой случаев, когда потребовалось заменить контроллер на плате конденсатора типа PROLOGY CAP или CAD. В одном случае для ремонта, а в другом, для расширения функций. Поскольку родной контроллер не перепрошивается, в обоих случаях потребовалась замена. По распиновке и...

Подключаем LCD SSD1963 к STM32 по FSMC_16bit +Touch

23-05-2016 Александр Беглецов

Подключаем LCD SSD1963  к STM32 по FSMC_16bit +Touch

 В данной статье автор реализовал подключение TFT дисплея диагональю  7” дюймов  на контроллере SSD1963 к микроконтроллеру STM32F407VGT посредством FSMC шириной 16 бит. Скорость заливки экрана одним цветом у автора получилось приблизительно  60 кадров/сек (1000 кадров за 16,518 секунд) при тактовой...

ПП стат. индикации 7-сиг. индикатора (1 порт, 2 знака).

06-06-2012 Super User

В этой подпрограмме показан один из способов статического подключения к микроконтроллеру  двух семисегментных индикаторов на один порт. В ПП не задействовано прерывание. Индикаторы применены с дешифратором  4 -7 (в семисегметный код).


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru