当前位置: 网站首页 > 技术应用 > 单片机应用

节省空间的表格定义方式

 

节省空间的表格定义方式
SN 8 位单片机的 ROM 空间是 16 位长度的,而许多实际项目都会需要显示,显示无论液晶或数码管,都会有一个笔段码表格,例如使用"DB"定义:
;****************************************************************************
B_LEDBIN: ;共阳极数码管笔段码表格 ,查表数据在 A .
        B0MOV         Y,#TABLELED$M
        MOV         Z,#TABLELED$L
B_ADDZ:
        ADD                Z,A
        BS0                FC ; 检查进位标志C
        INCM        Y
        MOVC
        RET
;--------------------------------------------------------
       DB        0A0H;0
       DB        0B7H;1
       DB        064H;2
       DB        025H;3
       DB        033H;4
       DB        029H;5
       DB        028H;6
       DB        0B5H;7
       DB        020H;8
       DB        021H;9
       DB        030H;A
       DB        02AH;b
       DB        0E8H;C
       DB        026H;d
       DB        068H;E
       DB        078H;F
       DB        032H;H
       DB        0EAH;L
       DB        03EH;n
       DB        02EH;o
       DB        070H;p
       DB        031H;q
       DB        07EH;r
       DB        06AH;t
       DB        0A2H;U
       DB        023H;y
       DB        07FH;-
       DB        0FFH;*
       RET
; ******************************************************************************
这样,每查表一次, A 就得到一个具体数字的显示笔段码. 
有时候,芯片空间就差一点点不够用,需要哪怕压缩几条指令的余地出来,我最近使用 SN8F26E61 做一个 3 传感器的温度表,就仅仅差 5 条指令,不能顺利编译,空间溢出了.
这时,可以考虑利用 SN 的 ROM 空间为 16 位的特点,把上面表格改用"DW"来定义.如:
;=========================================================
TABLELED: ;一次查表,得到 2 个笔段码,分别在"A"与"R"里.
       DW        0A0B7H;0,1
       DW        06425H;2,3
       DW        03329H4,;5
       DW        028B5H;6,7
       DW        02021H;8,9
       DW        0302AH;a,b
       DW        0E826H;c,d
       DW        06878H;e,F
       DW        032EAH;H,L
       DW        03E2EH;n,o
       DW        07031H;p,q
       DW        07E6AH;r,t
       DW        0A223H;u,y
       DW        07FFFH; - *
       RET
;============================================================
很明显,表格空间节省了差不多一半!  -------- 需要注意的是: 如果查表入口数是 奇数,查表后就使用 A 里的值,如果是偶数,则使用 R 里的值.
就这样,问题解决了.-----如果你也遇见此类空间"吃紧"问题,不妨一试.
仅供参考!
 

 

点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2025  www.100mcu.com