[an error occurred while processing this directive]
Да где уж там ферштейн :) Если исходное число лежит в двух байтах - это бинари, а не hex. hex - это когда в 4ёх. А для разложения WORD в DEC для печати imho есть два способа (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 507 16 февраля 2005 г. 22:39
В ответ на: Число в шишнадцатиричом виде, да, нада перевести в диситичное, яволь. Например FFFh = 4095. Ферштейн? отправлено nikolaus 16 февраля 2005 г. 22:27

1. Деление на 10
2. Вычитание 10000, 1000, 100, ну а потом можно поделить DIV

Сейчас сходу процу для (1) не напишу - в смысле её тестировать надо (не люблю кота в мешке отдавать) - а отладочник на работе. В симуляторе ломает. Если очень хочется взглянуть - завтра напишу.
Но там вроде 16 циклов для получения одного разряда будет. А вот (2) максимум 10. Я её тоже под вашу задачу пока подгонять не буду - если владеете асмом, то думаю сами пофикисте - там несложно, если нет - то опять же завтра.
А пока вот такой сырец:

;=== Put unsigned word to current position
;IN: R0 - pointer to word. @R0 - LOW, @(R0+1) - HIGH
;USE: ACC, B, R0, @R0, @(R0+1), DPTR, F0
;STACK: 3 bytes

LCDPutUWORD: clr F0
mov DPTR,#10000
call lcd_puw_csub
mov DPTR,#1000
call lcd_puw_csub
mov DPTR,#100
call lcd_puw_csub
mov A,@R0
mov B,#10

div AB
jb F0,lcdpuw_m2
jz lcdpuw_m1
lcdpuw_m2: add A,#'0'
call LCDPutChar
lcdpuw_m1: mov A,B
add A,#'0'
call LCDPutChar

ret
;
;IN: R0 - pointer to word
; DPTR - sub k

lcd_puw_csub: clr A
lcd_puw_l0: push ACC
mov A,@R0 ;A - low byte
mov B,A ;save low byte
clr C
subb A,DPL
mov @R0,A ;put result
inc R0 ;@R0 = HIGH
mov A,@R0
subb A,DPH
jc lcd_puw_c0
mov @R0,A
dec R0
pop ACC
inc ACC
jmp lcd_puw_l0
lcd_puw_c0: dec R0
mov @R0,B
pop ACC

jb F0,lcd_puw_b0
jz lcd_puw_z0
lcd_puw_b0: add A,#'0'
call LCDPutChar
setb F0
lcd_puw_z0: ret

------------------------------
Она печатает число на ЖКИ. Если вместо LCDPutChar подставить обычное сохранение в память - получите то что надо. Ещё она вроде как убивает само значение в рез-те работы - но это что бы кучу переменных не юзать.
И ещё - она убирает нули перед числом, т.е. будет не 00095 а 95.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru