关于数码管的显示

[复制链接]
4563|21
 楼主| mugangzhu 发表于 2009-9-10 14:49 | 显示全部楼层 |阅读模式
LDI TBR,0FH
LDA MIN_L,00H
CALL 07FAH ;查表得显示数据
STA SEG1,06H ;显示分钟低位的dcba 四段
LDI TMP,1000B
ANDM SEG2,06H
LDA TBR,00H
ORM SEG2,06H ;显示分钟低位的egf 三段
上面这段数码管显示的每一步是如何运行的请教一下?

LCD 显示数据表:根据LCD 的矩阵表定出数据表是按egf,dcba 来建立的
ORG 07F0H
;0egf, dcba
RTNW 0101B,1111B ;0
RTNW 0000B,0110B ;1
RTNW 0110B,1011B ;2
RTNW 0010B,1111B ;3
RTNW 0011B,0110B ;4
RTNW 0011B,1101B ;5
RTNW 0111B,1101B ;6
RTNW 0000B,0111B ;7
RTNW 0111B,1111B ;8
RTNW 0011B,1111B ;9
ORG 07FAH
其中ORG 07F0H
ORG 07FAH的地址是任意定义的吗?
gaoyuaug 发表于 2009-9-11 07:50 | 显示全部楼层
程序指令不全,它不会溢出?
 楼主| mugangzhu 发表于 2009-9-11 08:25 | 显示全部楼层
就是不全啊,为了分析这段运行的过程吗!其它的和这个程序一样这段分析明白了,其它的自然就懂了啊
 楼主| mugangzhu 发表于 2009-9-11 08:57 | 显示全部楼层
LDI TBR,0FH;把0FH送到Bank6中的累加器和TBR
LDA MIN_L,00H;MIN_L送到Bank0的累加器
CALL 07FAH ;查表得显示数据
STA SEG1,06H ;通过RTNW指令后把查表得到的低四位付给累加器A再送给SEG1
               显示分钟低四位dcba
LDI TMP,1000B;把1000B送到TMP和累加器A中?1000B是否可以改成08H呢???
ANDM SEG2,06H;保留SEG2的bit3,可为什么还要清SEG2的bit2-bit0,SEG1为什么不用清???
LDA TBR,00H;通过RTNW指令后把查表得到的高三位付给TBR
ORM SEG2,06H ; 显示分钟低位的egf 三段,这一步直接用STA SEG2,06H;不行吗???????


LCD 显示数据表:根据LCD 的矩阵表定出数据表是按egf,dcba 来建立的
ORG 07F0H
;0egf, dcba
RTNW 0101B,1111B ;0
RTNW 0000B,0110B ;1
RTNW 0110B,1011B ;2
RTNW 0010B,1111B ;3
RTNW 0011B,0110B ;4
RTNW 0011B,1101B ;5
RTNW 0111B,1101B ;6
RTNW 0000B,0111B ;7
RTNW 0111B,1111B ;8
RTNW 0011B,1111B ;9
上面我分析的这些对吗?
warm_ice 发表于 2009-9-11 09:31 | 显示全部楼层
LDI TBR,0FH;把0FH送到Bank6中的累加器和TBR ;把0FH送到BANK0的TBR寄存器,不是BANK6,如果是BANK6的,不能使用LDI指令
LDA MIN_L,00H;MIN_L送到Bank0的累加器
CALL 07FAH ;查表得显示数据
STA SEG1,06H ;通过RTNW指令后把查表得到的低四位付给累加器A再送给SEG1
显示分钟低四位dcba

LDI TMP,1000B;把1000B送到TMP和累加器A中?1000B是否可以改成08H呢??? ;可以,只是写成1000B看起来更直观一点
ANDM SEG2,06H;保留SEG2的bit3,可为什么还要清SEG2的bit2-bit0,SEG1为什么不用清???
;将SEG2的BIT2~BIT0清除掉是为了下二条指令的赋值方式。
LDA TBR,00H;通过RTNW指令后把查表得到的高三位付给TBR
ORM SEG2,06H ; 显示分钟低位的egf 三段,这一步直接用STA SEG2,06H;不行吗???????
;直接用STA SEG2,06H;的话,会改变SEG2的最高位的数据;
 楼主| mugangzhu 发表于 2009-9-11 09:41 | 显示全部楼层
谢谢啊,可是LDI TBR,0FH在上面程序中起什么作用?
warm_ice 发表于 2009-9-11 09:43 | 显示全部楼层
谢谢啊,可是LDI TBR,0FH在上面程序中起什么作用?
mugangzhu 发表于 2009-9-11 09:41

请你再回去查看一下TJMP查表是如何进行的就明白了
 楼主| mugangzhu 发表于 2009-9-11 09:54 | 显示全部楼层
TJMP 指令用于无条件程序跳转,但跳转的地址由(PC11~8)(TBR)(A)组成,程
序范例可以参照RTNW 指令。
可为什么要用0FH呢?
warm_ice 发表于 2009-9-11 10:06 | 显示全部楼层
TJMP 指令用于无条件程序跳转,但跳转的地址由(PC11~8)(TBR)(A)组成,程
序范例可以参照RTNW 指令。
可为什么要用0FH呢?
mugangzhu 发表于 2009-9-11 09:54

查表之前要对TBR和A进行赋值,这个值要与数据表所在的位置对应,数据表在7F0H,所以要赋值F。
 楼主| mugangzhu 发表于 2009-9-11 10:25 | 显示全部楼层
那经过LDI TBR,0FH这一步,TBR和A都是F了,地址也不是7F0H啊?
warm_ice 发表于 2009-9-11 11:45 | 显示全部楼层
那经过LDI TBR,0FH这一步,TBR和A都是F了,地址也不是7F0H啊?
mugangzhu 发表于 2009-9-11 10:25


还有一条LDA MIN_L,00H;呢,不能只看一条指令,要上下看全啊。
 楼主| mugangzhu 发表于 2009-9-11 12:01 | 显示全部楼层
那个7从哪出来的啊?
warm_ice 发表于 2009-9-11 12:08 | 显示全部楼层
那个7从哪出来的啊?
mugangzhu 发表于 2009-9-11 12:01

TJMP 指令用于无条件程序跳转,但跳转的地址由(PC11~8)(TBR)(A)组成

上面这句是你自己帖出来的,7就是TJMP时的PC11~PC8来的。
 楼主| mugangzhu 发表于 2009-9-11 12:14 | 显示全部楼层
呵呵,谢谢啊,举个例子说明一下吧?
 楼主| mugangzhu 发表于 2009-9-11 22:25 | 显示全部楼层
????
 楼主| mugangzhu 发表于 2009-9-14 09:08 | 显示全部楼层
给举个例子说明一下吧,呵呵,谢谢了
warm_ice 发表于 2009-9-14 09:12 | 显示全部楼层
你贴出来的例子就是这样的,ORG 7F0H就是定义了表的位置,在CALL表格时,因为表头在7F0H,自然(PC11~8)就是7,TBR和A在查表前已经赋值.
 楼主| mugangzhu 发表于 2009-9-14 09:20 | 显示全部楼层
呵呵,谢谢啊,
CALL 07FAH 这句的意思是只能查表到07FAH吧?
warm_ice 发表于 2009-9-14 10:00 | 显示全部楼层
呵呵,谢谢啊,
CALL 07FAH 这句的意思是只能查表到07FAH吧?
mugangzhu 发表于 2009-9-14 09:20

CALL指令是与TJMP共同使用的,CALL 07FAH只是跳到表格的位置,跑过去后通常会有一条TJMP,这时会根据TBR及A的值跳到具体的数据行来获取数据.
 楼主| mugangzhu 发表于 2009-9-14 11:22 | 显示全部楼层
呵呵,如果只是跳到表格的位置,那是否可以写成CALL 后面这个地址从07F0H到07FAH之间任意选个地址呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

358

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部