[an error occurred while processing this directive]
Вариант без цикла и без таблицы есть, но врядли он понравится.
(«Телесистемы»: Конференция 'Микроконтроллеры и их применение')

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

Отправлено ReAl 19 декабря 2002 г. 12:42
В ответ на: да, но в 51 доступ к ней тока через dptr со всеми вытекающими отправлено Pol-SDG 19 декабря 2002 г. 11:32


mov B,index
mov a,#0FFh
jb B.0,$+3+2
anl a,#0AAh
jnb B.0,$+3+2
anl a,#055h
jb B.1,$+3+2
anl a,#0CCh
jnb B.1,$+3+2
anl a,#033h
jb B.2,$+3+2
anl a,#0F0h
jnb B.2,$+3+2
anl a,#00Fh

Итого еще вопрос - что займет меньше места. А по поводу DPTR - если
таблица небольшая (как для этого дешифратора) и недалко, то на асме можно обойтись без него. Кусок из реальной программы под Kейла.
Это перекодировщик двоичной тетрады в код для семисегментного индикатора.

FUNC MACRO fname,used,attr
?PR?&fname SEGMENT CODE attr
RSEG ?PR?&fname
ENTRY fname,
ENDM

ENTRY MACRO fname,used
public fname
if not nul used
$RU fname used
endif
ENDM

;; table must be _after_ nxlat not more then (255-tablelen) bytes from
;; next after movc a,@a+PC location
nxlat MACRO tbl
add a,#tbl-($+2+1)
movc a,@a+PC
ENDM

FUNC _Nibbles2segs,<(a,c,R0,R5)>
_Nibbles2segs: ;;;;;;;;;;;;;;;
; void nibble2segs( u8 idata *buf, u8 len);
; > R7 -> buf
; >* R5 = len
; * R0,a,C
mov R0,AR7
n2s_1:
mov a,@R0
nxlat n2s_table
mov @R0,a
inc R0
djnz R5,n2s_1
ret
ENTRY _NibbleToSeg,<(a,C,R7)>
; u8 NibbleToSeg(u8);
_NibbleToSeg:
mov a,R7
anl a,#0x0F
nxlat n2s_table
mov R7,a
ret
n2s_table:
db SEGS_0,SEGS_1,SEGS_2,SEGS_3,SEGS_4,SEGS_5
db SEGS_6,SEGS_7,SEGS_8,SEGS_9,SEGS_A,SEGS_b
db SEGS_C,SEGS_d,SEGS_E,SEGS_F


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

Ответы



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

E-mail: info@telesys.ru