- 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号
Powered by
xinfuke
5.2.5 ©2008-2025
www.100mcu.com
节省空间的表格定义方式 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 里的值. 就这样,问题解决了.-----如果你也遇见此类空间"吃紧"问题,不妨一试. 仅供参考! |