Главная страница Комбинированное использование портов rlf rlf rlf R2 Rl decfsz count goto adjDEC retlw 0 adj DEC movlw R2 movlw FSR call adjBCD movlw Rl movwf FSR call adjBCD movlw RO mov FSR call adjBCD goto loopie adj BCD movlw addwf 0,W movwf temp btfsc temp,3 movwf 0 movlw 30 addwf 0,W movwf temp btfsc temp,? 0 Результат больше, чем 7? Результат больше, чем 7? Сохранение в HSD. movwf retlw О Тестовая программа. Задаем двоичнное FFFF (16 бит). После преобразования: R0,R1,R2 = 06,55,35.
ygfiHVi И вычитание чисел в двоично-десятичных кодах дЛ ваше приложение работает в коде BCD и использует операции жения и вычитания, целесообразнее осуществлять их непосред-нно в двоично-десятичном коде, чем преобразовывать два раза gpga BCD в двоичный, а затем обратно). В этом разделе вам предлагаются две программы, вычисляющие сумму и разность двух чисел без знака. Алгоритмы программ приведены на рис. 4.5 и 4.6, а тексты - в лис-н14.12и4ЛЗ. q Начоло
( Конец 3 Smtm сложения двоично-десятичных кодов Ночоло J Рис. 4.6
Алгоритм вычитания чисел в двоично-десятичном коде (BCD) Показатели программ: ♦ сложение требует 29 ячеек памяти и выполняется за 23 командных цикла (максимум); ♦ вычитание требует 31 ячейку памяти и выполняется за 21 кс мандныйцикл (максимум). Два числа, которые надо сложить или вычесть, содержатся в бай тах Num 1 и Num 2, а результат помещается в Nuni 2. При вычитании вЫ числяется разность байтов Nuni 2 и Nuni 1. В случае переполнения пр выполнении операций перенос фиксируется в Num 1. Листинг 4.12 ****************************** к**********************1 Сложение двоично-десятичных чисел без знаков. Слагаемые располагаются в байтах Num l и Nuin 2. и*********** результат помещается в Nurfi 2. Перенос помещается в Num i. Показатели: требуемая память: 25; количество командных циклов: 23 (максимум). Программа соответствует инструкции по применению AN526 фирмы Microchip. *************************************************************************** result equ Onflow equ Первое слагаемое. Второе слагаемое. include mpreg.h gCDAdd movf Num 1,w addwf Num 2 ; Двоичное сложение. clrf Num 1 rlf Num 1 btfsc STATUS,DC; DC = 0? goto adjust ; Корректировка младшей цифры (Lsd). movlw 6 addwf Num 2 ; LSD > 9? btfsc STATUS,CARRY incf Num 1 btfss STATUS,DC; Проверка десятичного переноса, subwf Num 2 ; LSD < 9. goto overt adjust movlw 6 addwf Num 2 overl movlw 60 ; Добавление числа 6 к старшей цифре (MSD). addwf Num 2 btfsc STATUS,CARRY goto over3 btfss Num 1,0 subwf Nuffl 2 retlw 0 огЗ movlw 1 movwf NurnJ retlw 0 ****************************************************************************** Тестовая программа. ****************************************************************************** movlw 99 movwf Num 1 ; Num 1 = 99. call self movlw S9 movwf Num 2 BCDAdd ; Num 2 = 99. ; После сложения Num 2 = 98 ; и Numj = 01 {99 + 99 = 198). goto goto self IF main Листинг 4.13 Вычитание двоично-десятичных чисел без знаков. Два числа DCB для вычитания помещаются в байты Num 111111 и Num 2. Результат (Num 2 - Num 1) помещается в Num 2. Перенос помещаются в Num 1. Показатели: требуемая память: 31; количество командных циклов: 21 (максимум).- Программа соответствует инструкции по применению AN526 фирмы Microchip. ; Размещение байта Num 1. ; Размещение байта Num 2.
; результата. adjsti OverJ
********************************************************************************* Тестовая программа. ********************************************************************************* nain self
1 = о
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |