发新帖我要提问
12
返回列表
打印

怎么发现寄存器冲突

[复制链接]
楼主: jack.king
手机看帖
扫描二维码
随时随地手机跟帖
21
jack.king|  楼主 | 2007-6-5 00:37 | 只看该作者 回帖奖励 |倒序浏览

继续请教

   
   我可以肯定的告诉您ORL  不是ANL 上面的的三个数码管亮
   必须要屏蔽下面四个数码管亮
    说明七个数码管都是有P0口扩张到2个4511上去控制数码管
   上面的三个数码管是有P0.7~P0.4.下面的四个数码管是又P0.3~P0.0控制,数码管的公共端都是有P0.3~0.0控制
    为了消除干扰 则必须要用ORL 而不是ANL

使用特权

评论回复
22
jack.king|  楼主 | 2007-6-5 00:42 | 只看该作者

RE

  是ORL 
 不是ANL 
   数码管全部是又P0口通过2个4511控制数码管的
    P0.7~P0.4是控制上面三个数码管,P0.3~P0.0是控制下面四个数码管的,
    并且七个数码管的公共段都是又P0.0~P0.3控制
  为了消除干扰 必须要用ORL
   我开始也是用的ANL但是有干扰后来我改成ANL后就正常了

使用特权

评论回复
23
conwh| | 2007-6-5 02:06 | 只看该作者

显示部分没看到图纸,只有根据你的程序进行调整的

;----------------------时间显示(时间计数到设定时间----------------------
;要求:时间精度到0.1S,三位整数+1位小数,同时显示3位设定的数据(时间)
;晶振:12MHz
;------------------------------------------------------------------------
;使用TIMER0作为显示,并建立计数标志
;在主程序中计算时间
;------------------------------------------------------------------------
;建立时间:1:00 2007-6-5
;修改时间:
;========================================================================
DISPLAY*LEN        EQU    7    ;7位显示
TIMER*0*H        EQU    0F8H    ;2mS
TIMER*0*L        EQU    30H
;------------------------------------------------------------------------
TIME.FLAG        EQU    0
;------------------------------------------------------------------------
DISPLAY_COUNT[11]    EQU    22H                ;显示位计数器
DISPLAY_COUNT_LAST    EQU                    ;上一位的显示位
DISPLAY_UNIT(8)        EQU                    ;0是2mS计数,其他的是显示
SP*VAL            EQU
;=======================主程序===========================================
      :
      :
        MOV    SP,            #SP*VAL
        MOV    TMOD,            #11H
        MOV    TH0,            #TIMER*0*H
        MOV    TL0,            #TIMER*0*L
        SETB    EA
        SETB    ET0
        SETB    TR0
        MOV    DISPLAY_COUNT,        #DISPLAY*LEN
        MOV    DISPLAY_COUNT_LAST,    #0
        MOV    DISPLAY_UNIT(0),    #50
MAIN-PROGRAM-LOOP:
        JNB    TIME.FLAG,        MAIN-PROGRAM-LOOP
        CLR    TIME.FLAG
        DJNZ    DISPLAY_UNIT(0),    MAIN-PROGRAM-LOOP-EXIT
        MOV    DISPLAY_UNIT(0),    #50
        INC    DISPLAY_UNIT(1)
        MOV    A,            DISPLAY_UNIT(1)
        CJNE    A,            #10,        MAIN-PROGRAM-LOOP-COMP
        MOV    DISPLAY_UNIT(1),    #0
        INC    DISPLAY_UNIT(2)
        MOV    A,            DISPLAY_UNIT(2)
        CJNE    A,            #10,        MAIN-PROGRAM-LOOP-COMP
        MOV    DISPLAY_UNIT(2),    #0
        INC    DISPLAY_UNIT(3)
        MOV    A,            DISPLAY_UNIT(3)
        CJNE    A,            #10,        MAIN-PROGRAM-LOOP-COMP
        MOV    DISPLAY_UNIT(3),    #0
        INC    DISPLAY_UNIT(4)
MAIN-PROGRAM-LOOP-COMP:
        MOV    R0,            #DISPLAY_UNIT(1)
        MOV    R1,            #DISPLAY_UNIT(5)
        MOV    R2,            #3
        CLR    C
MAIN-PROGRAM-LOOP-COMP-LOOP:
        MOV    A,            @R0
        SUBB    A,            @R1
        INC    R0
        INC    R1
        DJNZ    R2,            MAIN-PROGRAM-LOOP-COMP-LOOP
        JC    MAIN-PROGRAM-LOOP-EXIT
;-----------------------满足设定要求并清零------------------------------------
        MOV    DISPLAY_UNIT(1),    #0
        MOV    DISPLAY_UNIT(2),    #0
        MOV    DISPLAY_UNIT(3),    #0
        MOV    DISPLAY_UNIT(4),    #0
MAIN-PROGRAM-LOOP-EXIT:
        SJMP    MAIN-PROGRAM-LOOP-EXIT
;=======================显示中断===============================================
TIMER-0-DISPLAY:
        MOV    TH0,            #TIMER*0*H
        MOV    TL0,            #TIMER*0*L
        PUSH    A
        PUSH    PSW
        SETB    RS0
        SETB    TIME.FLAG
;-----------------------清上次的显示--------------------------------------------
;以下基本是原有的格式
;-------------------------------------------------------------------------------
        MOV    A,            #00H
        MOV    DPTR,            #41H
        MOVX    @DPTR,            A
;-----------------------输出字段码-----------------------------------------------
        MOV    A,            #DISPLAY_UNIT(0)
        ADD    A,            DISPLAY_COUNT
        MOV    R0,            A
        MOV    A,            @R0
        MOV    DPTR,            #42H
        SWAP    A
        ORL    A,            #0FH
        MOVX    @DPTR,            A
;-----------------------输出位扫描----------------------------------------------
        MOV    DPTR,            #DISPLAY-BIT-LAB
        MOV    A,            DISPLAY_COUNT
        MOVC    A,            @A+DPTR
        MOV    DPTR,            #40H
        MOV    @DPTR,            A
;-----------------------退出----------------------------------------------------
        POP    PSW
        POP    A
        RETI
;======================显示位表================================================
DISPLAY-BIT-LAB:
        DB    0,没看出规律,没有硬件图,不知道了

使用特权

评论回复
24
maychang| | 2007-6-5 08:19 | 只看该作者

我有点糊涂

数码管全部是又P0口通过2个4511控制数码管的
P0.7~P0.4是控制上面三个数码管,P0.3~P0.0是控制下面四个数码管的,并且七个数码管的公共段都是又P0.0~P0.3控制

P0.3-P0.0通过4511显示,控制下面四个数码管,怎么又能控制七个数码管的公共端?另加了锁存器?

使用特权

评论回复
25
寒雨飞扬| | 2007-6-5 08:29 | 只看该作者

结构有问题

我只看了你的中断程序,觉得似乎有问题,作为一个时钟程序,计时和进位都应该在中断中完成,这样不仅可以使程序结构简单,重要的是防止主程序进位的时候进入中断而造成计数错误。

使用特权

评论回复
26
jack.king|  楼主 | 2007-6-5 09:58 | 只看该作者

RE

    P0口是通过373到2个4511的
    数码管是一个三位一体
   和一个四位一体的
    

使用特权

评论回复
27
gyt| | 2007-6-5 10:30 | 只看该作者

向conwh致敬!

conwh诲人不倦。佩服!

使用特权

评论回复
28
conwh| | 2007-6-5 11:30 | 只看该作者

呵呵,俺都是跟HOTPOWER学的,专睡“日月神觉”

显示部分确实是看不懂,既然是动态显示,怎么什么上面的、下面的?数据(显示段数据线)应该是并联的,怎么现在是分开的?

使用特权

评论回复
29
jack.king|  楼主 | 2007-6-5 14:18 | 只看该作者

RE

您告诉我您的邮箱地址我发图给你。我的上面和下面的意思就是开始我发的发个图上面是一个三位一体的数码管,下面是一个四位一体的数码管。是这个意思

使用特权

评论回复
30
conwh| | 2007-6-5 15:08 | 只看该作者

EMAIL:conwh@yeah.net

使用特权

评论回复
31
jack.king|  楼主 | 2007-6-5 15:50 | 只看该作者

RE

 已经发到您的邮件里面去了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则