Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [ 25 ] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

main

self

movwf

EXPb

retlw

call

loadAB

; ACCb(EXPb) +

ACCa(EXPa) -> ACCb{EXPb).

call

F add

; Здесь ACCb =

403F, EXPb = 07.

call

loadAB

; ACCb(EXPb) -

ACCa(EXPa) -> ACCb(EXPb).

call

F sub

; Здесь ACCb =

7F7F, EXPb = 06.

call

loadftAB

; ACCbf(EXPbl)

. ACCa(EXPa) -> ACCb(EXPb).

call

F mpy

; Здесь ACCb =

FF7E, EXPb =12.

goto

self

PIC54

goto

main

Преобразование двоично-десятичных кодов в двоичные

Числа, закодированные в двоично-десятичном коде, часто используют, например, при управлении внешними цифровыми индикаторами, в том числе и семисегментными светодиодными. Листинг 4.9 демонстрирует программу преобразования двоично-десятичных чисел в двоичную форму.

Программа преобразует 5-разрядные десятичные числа, представленные в коде, в 16-разрядные двоичные числа, при этом использует 30 ячеек памяти и выполняется в течение 121 командного цикла. Число в формате размещается в регистрах R0, R1, R2, причем старший десятичный разряд располагается в правом (младшем) полубайте R0. 16-разрядное двоичное число, полученное в результате преобразования, помещается в регистрах H byte и L byte, где H byte - старший байт.

Листинг 4.9

I ********************************************************************************

; Преобразование BCD-кода в двоичный.

; Данная программа преобразует 5-разрядное десятичное число,

; представленное в BCD-коде, в 16-разрядный двоичный код.

; Число размещается в байтах R0, RI, R2. Старший десятичный разряд

; располагается в правом полубайте R0.

двоичное число представляется в байтах H byte и L byte. Показатели:

используемая память: 30; количество командных циклов: 121.

Программа соответствует инструкции по применению AN526 фирмы Microchip. ф******************************************************************************

Н byte

Ю

Lbyte

Hjefnp

; Временный регистр.

L tefnp

; Временный регистр.

INCLUDE

mpreg.h

rapylOb

andlw

addwf

L byte

btfsc

STATUS.CARRY

incf

H byte

tnpylOa

STATUS.CARRY

; Умножение на 2.

L byte,w

movwf

L temp

H byte,w

; (H temp,L temp) =

movwf

H temp

STATUS,CARRY

; Умножение на 2.

L byte

H byte *

STATUS, CARRY

; Умножение на 2.

L byte

H byte

STATUS,CARRY

; Умножение на 2.

L byte

H byte

; (H byte,L byte) =

movf

L temp,w

addwf

L.byte

btfsc

STATUS, CARRY

= 8 . N.



incf

H byte

nrovf

H temp,w

addwf

H byte

retlw

; {H byte, Lbyte) = 10 * N.

BCOtoB clrf

H byte

nxDvf

RO.w

andlw

movwf

L byte

call

mpylOa

; Результат равен 10a + b.

swapf

R1,w

call

mpylOb

; Результат равен 10[10a + b].

movf

Rl.w

call

mpylOb

; Результат равен 10[10[10a + b] + с]

swapf

R2,w

call

mpylOb

; Результат равен 10[10[10a + b] + с] + d].

movf

R2 w

andlw

addwf

L byte

btfsc

STATUS,CARRY

incf

H byte

; Результат равен

; 10[10[10[10a + b] + с] + d] + е.

retlw

; Преобразование закончено.

*******************************

Тестовая программа. *******************************

main movlw 06

movwf НО

movlw 55

movwf Rl

movlw 35

movwf R2

call BCDtoB

self goto self

org IF

goto main

*********************************************** ***********************************************

RO = 06. Rl = 55.

R2 = 35 (RO, Rl, R2 = 6, 55, 35).

После преобразования H byte = FF и Lbyte = FF.

Преобразование двоичных кодов в двоично-десятичные

программа осуществляет преобразование, обратное выполняемому Предыдущей программой. Программа имеет две версии, одна ЛзКОТОрьЕС преобразует 16-разрядное двоичное число в 5-разрядное десятичное, представленное в BCD-коде, а другая - преобразование й-разрядного двоичного числа в две цифры BCD-кода.

( Начоло

MSD LSD

so! si

I C0UNT=16 \

I R0=Rl=rR2:=0 I

БинарныО MSD LSD

ro Rl!r2 i-1.

Сдбиг блебо SO, SI б RO, Rl. R2 HQ 1 6um


MSD - старшая цифре (байт) LSD - младшая цифра (баОт)


LSD+3>7 LSD=LSD+3 ~~\ НЕТ


Рис.4.4

оритм преобразования двоичных чисел в двоично-десятичные

Алгоритм преобразования представлен на рис. 4.4, а код програм-**bt - в листингах 4.10 и 4.11. Показатели двух подпрограмм:



♦ преобразование 8-разрядного кода требует 10 ячеек naMatjj и выполняется за 81 командный цикл (максимум);

♦ преобразование 16-разрядного кода требует 30 ячеек naMattj и выполняется за 719 командных циклов.

В случае преобразования 8-разрядного кода бинарное число, кото. рое надо преобразовать, помещается в регистр W, а результат возвра. щается в регистрах MSD и LSD, причем старшая цифра располагает-ся в MSD.

В случае преобразования 16-разрядного кода двоичное число, ко-торое надо преобразовать, помещается в регистры НЬу te и L by te со старшим байтом в H byte. Полученное в результате число в двоично-десятичном коде помещается в R0, R1 и R2. Цифра старшего разряда располагается в правом (младшем) полубайте R0.

Листинг 4.10

***********************************************************

Преобразование двоичных чисел в двоично-десятичные. Эта программа преобразует двоичное В-разрядное число, содержащееся в регистре W, в двухразрядное десятичное число, представленное в BCD-коде. Младшая цифра формируется в регистре LSD, старшая - в MSD.

Показатели; объем памяти: 10;

количество командных циклов: 81 (W = 63 hex, т. е. 99 в десятичном представлении).

self

itt***********************************************************************

movlw

call

BinBCD

goto

self

goto

main

4.11

W = 60 hex.

После преобразования MSD = 9 и LSD = 9 (63 в hex = 99 в десятичном).

Яисшнг 4.11

*********************************************************************************

Преобразование двоичных кодов в двоично-десятичные.

Эта программа преобразует 16-разрядное двоичное числов 5-разрядное десятичное, представленное в BCD коде.

Исходное двоичное число располагается в H byte и L byte. помещается в байты R0, R1 и R2. Полученное в результате десятичное число Старшая цифра содержится в правом полубайте R0.

Показатели: объем памяти: 35;

количество командных циклов: 885.

Программа соответствует инструкции по применению AN526 фирмы Microchip.

к* ****** ******

>**** **** ********* *** ************* * ** **<

: Программа соответствует инструкции по применению AN526 фирмы Microchip.

count

к******

*** ***************************** ***** *********************************

temp

H byte

L.byte

INCLUDE

mpreg.h

BinBCD

clrf

include

mpreg.h

movwf

gtenth

movlw.

B2JCD

STATUS,0

subwf

LSD,W

movlw

BTFSS

STATUS,CARRY

movwf

count

goto

over

clrf

movwf

clrf

incf

loopie

clrf

goto

gtenth

L byte

over

retlw

H byte

Сброс бита переноса.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [ 25 ] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2022 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.