Авторизация


...

Кто на сайте?

Сейчас 144 гостей и 3 зарегистрированных пользователей на сайте

  • heydeeste
  • inmiernikwesto

Статистика

-Посетители : 22989
-Материалы : 209

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

  VM111

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

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

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

 

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

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

Команда производит десятичную коррекцию упакованного результата сложения двух 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

Программирование c нуля в AVRStudio 5 (ч.9)

15-10-2012 Радик

Программирование c нуля в AVRStudio 5 (ч.9)

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

Программирование c нуля в AVRStudio 5 (ч.7)

07-04-2012 Радик

Программирование c нуля в AVRStudio 5 (ч.7)

Продолжим разбор теоретических основ, без которых невозможно полноценное создание программ.Основной синтаксис AVRASM совместим с AVRASM2 с исключениями, отмеченными ниже:- Ключевые слова.- Директивы препроцессора.- Комментарии.- Продолжения строк.- Строки и символьные константы.

Интерфейсная плата для станка ЧПУ

01-05-2011 Sergey Roslik

Интерфейсная плата для станка ЧПУ

За основу интерфейсной платы (ИП) была взята информация с сайта robozone. Как и оригинальная версия интерфейсная плата имеет опторазвязку порта LPT, имеет установленные реле для управления различными силовыми нагрузками.ИП позволяет управлять тремя любыми контроллерами двигателей для станков ЧПУ с поддержкой...

ПП инициализация LCD в 4-х битном режиме.

01-06-2012 Super User

  В данном примере для работы с LCD задействован порт "С" и два бита порта "B" (6,7). Для удобства при инициализации микроконтроллера  порт "С" настроен; 4 младших бита на выход; старшие 4 бита на вход.  


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

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