打印

怎么发现寄存器冲突

[复制链接]
3018|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jack.king|  楼主 | 2007-6-4 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
maychang| | 2007-6-4 15:14 | 只看该作者

我已经对你说过三次

必须看完整的程序,光看局部那是没办法解决的。

使用特权

评论回复
板凳
conwh| | 2007-6-4 15:23 | 只看该作者

是程序的问题

使用特权

评论回复
地板
conwh| | 2007-6-4 15:24 | 只看该作者

呵呵,看来还是原来的那个程序了

使用特权

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

RE

   我已经单独的再烧进去
    没有其他的程序
   就是转换和显示.
     若开始不把显示的寄存器里面放#00H就进位正常,只是要循环很久才能正常的显示很进位

使用特权

评论回复
6
jack.king|  楼主 | 2007-6-4 16:47 | 只看该作者

使用特权

评论回复
7
conwh| | 2007-6-4 17:07 | 只看该作者

把程序贴出来,省得自言自语了。呵呵~~

使用特权

评论回复
8
jack.king|  楼主 | 2007-6-4 19:21 | 只看该作者

好的

使用特权

评论回复
9
jack.king|  楼主 | 2007-6-4 19:44 | 只看该作者

高手们求救,帮我找找错误

       说明以下的程序显示子程序(DISS)没有错误,主要是看看其他的.  
       DI_DA  DATA 20H
          MSEC  DATA 21H
          SEC   DATA 22H
          MIN   DATA 23H
          HOUR  DATA 24H
          HM    DATA  25H       /*定义的MSEC*/
          MIAO  DATA 26H       /*定义的MIN*/
          FEN   DATA 27H       /*定义的MIN*/
          SHI   DATA 28H      /*定义的HOUR*/
                 ORG 0000H
                 LJMP MAIN
                 ORG 000BH
                 AJMP ITOP
                 ORG 0030H
           AJMP DDD
        MAIN:   MOV SP,#40H  
             MOV HM,#00H
             MOV MIAO,#00H
        MOV FEN,#00H
        MOV MSEC,HM  /*MSEC是0.1S单元*/
              MOV SEC,MIAO
         MOV MIN,FEN 
         MOV SHI,#0F0H    
    DDD:   LCALL CLEAR  /*清零*/
           MOV TL0,#0B0H/*定时50MS*/
               MOV TH0,#03CH
               MOV TMOD,#01H
               SETB TR0
               SETB ET0
    MOV DI_DA,#00H
     SETB EA
    DISPLAY:  ACALL CONV
               ACALL DISS 
              AJMP DISPLAY
     CONV:  MOV A,DI_DA
              CJNE A,#02H,DONE    /*0.1MS到否*/
              MOV DI_DA,#00H
              MOV A,MSEC
       INC A
              MOV MSEC,A
             CJNE A,#0AH,DONE  /*MSEC=0到*/
      MOV MSEC,#00H
      MOV A,SEC
        INC A
              MOV SEC,A
              CJNE A,#0AH,DONE /*SEC=0*/
       MOV SEC,#00H
          MOV A,MIN
       INC A
      MOV MIN,A
      CJNE A,#0AH,DONE
      MOV MIN,#00H
       CLR TR0  
      DONE: RET
        
       DISS:    MOV DPTR,#42H/*开始显示第一个数码管*/
       MOV A,HM
    SWAP A
    MOV HM,A
    MOV A,#0FH
    ORL A,HM
     MOVX @DPTR,A
    MOV A,HM
    SWAP A
    MOV HM,A    
    MOV A,#0FBH
    MOV DPTR,#40H
    MOVX @DPTR,A
    LCALL CLEAR2/*让第一个数码管灭*/
    LCALL DEL11MS
          MOV DPTR,#TAB
     MOV A,MSEC
          MOVC A,@A+DPTR
     MOV DPTR,#42H
          MOVX @DPTR,A
     MOV DPTR,#40H
          MOV A,#0F7H
          MOVX @DPTR,A
     LCALL CLEAR2/*让第二个数码管灭*/
          LCALL DEL11MS
          LCALL CLEAR1/*以上是显示MSEC*/
     MOV DPTR,#42H
     MOV A,MIAO
     SWAP A
    MOV MIAO,A
    MOV A,#0FH
    ORL A,MIAO
     MOVX @DPTR,A
    MOV A,MIAO
    SWAP A
    MOV MIAO,A
    MOV A,#0FDH
    MOV DPTR,#40H
    MOVX @DPTR,A
    LCALL CLEAR2/*让第三个数码管灭*/
    LCALL DEL11MS
    LCALL CLEAR1/*以上是显示MIAO*/
    MOV A,SEC
    MOV DPTR,#TAB
    MOVC A,@A+DPTR
    MOV DPTR,#42H
    MOVX @DPTR,A
         MOV DPTR,#40H
         MOV A,#0FBH
         MOVX @DPTR,A
    LCALL CLEAR2/*让第四个数码管灭*/
         LCALL DEL11MS
         LCALL CLEAR1/*以上是显示SEC*/
     MOV DPTR,#42H
          MOV A,FEN
     SWAP A
    MOV FEN,A
    MOV A,#0FH
    ORL A,FEN
         MOVX @DPTR,A
    MOV A,FEN
    SWAP A 
    MOV  FEN,A
    MOV A,#0FEH
    MOV DPTR,#40H
    MOVX @DPTR,A
     LCALL CLEAR2 /*让第五个数码管灭*/
    LCALL DEL11MS
    LCALL CLEAR1/*以上是显示FEN*/
         MOV A,MIN
    MOV DPTR,#TAB
    MOVC A,@A+DPTR
    MOV DPTR,#42H
    MOVX @DPTR,A
    MOV DPTR,#40H
          MOV A,#0FDH
          MOVX @DPTR,A
     LCALL CLEAR2/*让第六个数码管灭*/
          LCALL DEL11MS
          LCALL CLEAR1/*以上是显示MIN*/
     MOV DPTR,#42H
           MOV A,SHI
           MOVX @DPTR,A
           MOV DPTR,#40H
           MOV A,#0FEH
           MOVX @DPTR,A
     LCALL CLEAR2/*让第七个数码管灭*/
           LCALL DEL11MS
           LCALL CLEAR1/*显示SHI*/
    RET
    CLEAR2:      MOV A,#00H        /*数码管灭子程序*/
          MOV DPTR, #41H
         MOVX @DPTR,A
         RET
    CLEAR1: MOV A,#0FFH
     MOV DPTR,#40H
    MOVX @DPTR,A
            RET 
     TAB:  DB  0F0H,0F1H,0F2H,0F3H,0F4H
                DB  0F5H,0F6H,0F7H,0F8H,0F9H
       ITOP:   PUSH ACC   /*中断服务子程序*/
             PUSH DPL
         PUSH DPH
             MOV TL0,#0B0H
             MOV TH0,#3CH
             MOV TMOD,#01H
             INC DI_DA
             POP DPH
             POP DPL
             POP ACC
             RETI   
 DEL11MS:NOP/*延时子程序*/
      MOV R5,#01H
            LOOP2: MOV R7,#0AH
     AA: DJNZ R7,AA
                 DJNZ R5,LOOP2
                   RET  
     CLEAR:  MOV A,#00H/*清零子程序*/
                MOV DPTR,#041H
                MOVX @DPTR,A
       RET
       
                  END          

使用特权

评论回复
10
conwh| | 2007-6-4 23:32 | 只看该作者

我大体看了下程序,感觉有些思路不对,也可能没有理解透

谈谈看法吧:
1)采用顺序显示
你的结构是
      显示第一位
      延时
      显示第二位
      延时
       :
       :
      显示最后一位
      延时
      返回
评语
这样不是不行,关键问题在于你在主程序中是完成2项任务,第一项就是显示;第二项就是计算,由于你的时钟是50mS的扫描,那么你显示的时间已经远大于50mS(你每个显示的延时是11mS),这样就会产生积累误差。就是说:有当进2的时候,你却没有进行计算。
2)显示时间
你在每显示一位的时候就采用了延时11mS,这样的数码管肯定会产生闪烁(好象你是采用的动态显示。如果不是动态显示,就不要延时了)。
3)数据结构
数据结构太乱,看程序,也就是显示秒、分、小时,你怎么用那么多的变量,而且有的就莫名其妙了,也没有运算程序中参加运算,半路就出来了。
评语
如果有些参数是在显示程序中运算的,最好拿到运算程序中。因为你所有的数据都是相关联的,也就是在计算秒、分、时的同时也就出来了,显示的子程就负责显示好了

说的不是太婉转,呵呵~~~

使用特权

评论回复
11
jack.king|  楼主 | 2007-6-4 23:40 | 只看该作者

RE

    你好!
    这个是数码管动态扫描,一共有7个数码管.
    其中HM MIAO FEN 上面三个数码管的存数据的
   MSEC SEC MIN SHI是下面四个数码管存数据的,
   实现的效果是,MSEC SEC MIN SHI 时间在走动
    HM MIAO FEN 显示时间不走动
    有个问题出来了
    1:在初始化的时候若不跟MSEC,SEC,MIN,SHI置零
    通过一段时间 进位正常,
    但是就是要经过比较长的一段时间
    2:若初始化的时候把MSEC,SEC,MIN,SHI,置零
     则出现的效果是当MSEC=9,SEC=1是自动重新开始
    

使用特权

评论回复
12
jack.king|  楼主 | 2007-6-4 23:44 | 只看该作者

继续请教

  下面是数码管的位置和循序

使用特权

评论回复
13
原野之狼| | 2007-6-4 23:57 | 只看该作者

用C写多好啊。。。。

使用特权

评论回复
14
conwh| | 2007-6-4 23:57 | 只看该作者

手够快的了,准备看几个帖子再往下写。还真准备问你几个

1)你的进位关系错了,秒到分是60进制的,你作成10进制的。到100秒又清零了
2)也就是说HM MIAO FEN就不用管它了?
3)    MOV A,#0FH
       ORL A,MIAO
      -------------应该是
       MOV A,#0FH
       ANL A,MIAO 吧?
4)你说的情况有可能就是我上面提出的积累误差造成的。
你回复后,我看看能否给你提出一个方案来

使用特权

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

继续请教


   说明MSEC SEC MIN中的值是可以调整的
   MSEC是0.1S单元,SEC是1S单元,MIN是10S单元
  进位应该没有错.
    MSEC SEC MIN是的由HM MIAO FEN 送给他们 HM MIAO FEN 的值是可以调节的都是在0到9之间

使用特权

评论回复
16
conwh| | 2007-6-5 00:03 | 只看该作者

不对吧4位数怎么能显示小时、分、秒、秒/10

使用特权

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

RE

   不是显示时,分,秒最多是99.9S
   我只是用MSEC是存0.1单元. SEC是1S单元. MIN是10S单元.

使用特权

评论回复
18
conwh| | 2007-6-5 00:07 | 只看该作者

基本明白你的意思了,你就是显示1000秒,精度是1/10秒

控制精度是秒。数据是由别的程序提供的,是这样的吧?

使用特权

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

RE

   不是1000S;是100S精确0.1S
    有个程序来控制MSEC, SEC, MIN,的大小

使用特权

评论回复
20
conwh| | 2007-6-5 00:25 | 只看该作者

知道了,到底是ORL A,MIAO还是ANL A,MIAO

使用特权

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

本版积分规则

488

主题

2158

帖子

1

粉丝