2735|8

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

问几个菜菜的问题!!! [复制链接]

看书遇到了几个问题怎么也搞不懂,求助于各位大大们了!!!
第一个是关于最大延时的计算!
(6MHz晶振频率)
    MOV    R5,#TIME1
LOOP2:MOV    R4,#TIME2
LOOP1:NOP
      NOP
      DJNZ   R4,LOOP1
      DJNZ   R5,LOOP2
      RET
最大定时时间计算公式为:
   (256*4+2+1)*256*2+4=525828(us)
这是怎么算出来的,我看了好多遍都没搞懂,最主要的就是+2 +1的那些数字不知道是怎么来的!
第二个是关于出入栈的问题!!
题目:在内部RAM的HEX单元中存有2位十六进制数,试将其转换为ASCII码,并存放于ASC和ACS+1两个单元中.
主程序(MAIN):    
               MOV    SP,#3FH
       MAIN:   PUSH   HEX
               ACALL  HASC
               POP    ASC
               MOV    A,HEX
               SWAP   A
               PUSH   ACC
               ACALL  HASC
               POP    ASC+1
子程序(HASC):
        HASC:  DEC    SP        (跨过断点保护内容)这里起到什么作用?
               DEC    SP     这里为什么又要再来一次这个指令呢?
               POP    ACC
               ANL    A,#0FH
               ADD    A,#7
               MOVC   A,@A+PC
               PUSH   ACC
               INC    SP
               INC    SP
               RET
      

最新回复

        MOV        SP ,        # 3FH        MAIN:        PUSH        hex                ;十六进制数进栈         ACALL        HASC                ;调用转换子程序         POP        asc                ;第一位转换结果送asc单元         MOV        A ,        hex        ;再取原十六进制数         SWAP        A                ;高低半字节交换         PUSH        ACC                 ;交换后的十六进制数进栈         ACALL        HASC                        POP        asc+l                 ;第二位转换结果送asc+l单元 子程序(HASC): HASC:        DEC        SP                ;跨过断点保护内容         DEC        SP                        POP        ACC                ;弹出转换数据         ANL        A ,        # 0FH        ;屏蔽高位         ADD        A ,        # 7        ;修改变址寄存器内容         MOVC        A ,        @A+PC        ;查表         PUSH        ACC                ;查表结果进栈         INC        SP                ;修改堆栈指针回到断点保护内容         INC        SP                        RET        SP                ASCTAB:        DB        “0,1,2,3,4,5,6,7”        ;ASCII码表         DB        “8,9,A,B,C,D,E,F”   详情 回复 发表于 2008-7-23 09:13
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
第一个
    MOV    R5,#TIME1  ; (1) 1 cyc
LOOP2:MOV    R4,#TIME2  ; (2) 1 cyc
LOOP1:NOP                 ; (3) 1 cyc
      NOP                 ; (4) 1 cyc
      DJNZ   R4,LOOP1    ; (5) 2 cyc
      DJNZ   R5,LOOP2    ; (6) 2 cyc
      RET                 ; (7) 2 cyc

里面的循环LOOP1: (3) - (5), 每个循环要 1+1+2周期
外面的循环LOOP2: (2) - (7), 每个循环要 1+LOOP1+2周期
全部时间最大为 (1) + 最大LOOP2 + (7) = 1 + 最大LOOP2 + 2 周期
  = 1 + 256*(1+最大LOOP1+2) + 2 周期
  = 1 + 256*(1+256*(1+1+2)+2) + 2
  = (256*4+2+1)*256+1+2+2(call)
  = 262917周期,因为时钟是6MHz, 每周期2us, 时间是525834微秒

和你的书不同, 我多6微秒.  该是我的对,你的书有误差.
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
第一个
    MOV    R5,#TIME1  ; (1) 1 cyc
LOOP2:MOV    R4,#TIME2  ; (2) 1 cyc
LOOP1:NOP                 ; (3) 1 cyc
      NOP                 ; (4) 1 cyc
      DJNZ   R4,LOOP1    ; (5) 2 cyc
      DJNZ   R5,LOOP2    ; (6) 2 cyc
      RET                 ; (7) 2 cyc

里面的循环LOOP1: (3) - (5), 每个循环要 1+1+2周期
外面的循环LOOP2: (2) - (6), 每个循环要 1+LOOP1+2周期
全部时间最大为 (1) + 最大LOOP2 + (7) = 1 + 最大LOOP2 + 2 周期
  = 1 + 256*(1+最大LOOP1+2) + 2 周期
  = 1 + 256*(1+256*(1+1+2)+2) + 2
  = (256*4+2+1)*256+1+2+2(call)
  = 262917周期,因为时钟是6MHz, 每周期2us, 时间是525834微秒

和你的书不同, 我多6微秒.  该是我的对,你的书有误差.

(前面对LOOP2的描述有误)
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
第二个
               MOV    SP,#3FH
       MAIN:   PUSH   HEX     ; 参数由堆栈传递
               ACALL  HASC
               POP    ASC     ; 返回值由堆栈传递
               MOV    A,HEX
               SWAP   A
               PUSH   ACC
               ACALL  HASC
               POP    ASC+1
子程序(HASC):
        HASC:  DEC    SP  ; 要从堆栈弹出传入的参数,先要跨过返回地址
               DEC    SP ; 返回地址有2字节,要两次POP. --这是不安全的,
               POP    ACC ; 如果此时产生中断,返回地址就破坏了
               ANL    A,#0FH
               ADD    A,#7
               MOVC   A,@A+PC
               PUSH   ACC
               INC    SP
               INC    SP
               RET
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
第一题:      
      MOV    R5,#TIME1 ;TIME1=0 ,2us
LOOP2:MOV    R4,#TIME2 ;TIME2=0,2us
LOOP1:NOP              ;2us
      NOP              ;2us
      DJNZ   R4,LOOP1  ;4us
      DJNZ   R5,LOOP2  ;4us
      RET              ;4us
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
     ((1+1+2)*256+1+2)*256*2+(1+2)*2=525830us 应该是这样
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

6
 
第二个,你得把程序写完呀
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢大家!我现在对照你们的解答再好好看看!我看的是李光第老师的书((单片机基础)),看第一遍的时候可真是云里雾里绕啊,看到第二遍就好多了,不过还是有好多不明白的地方,希望以后大家再好好的教教我!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
MAIN:       PUSH       HEX           ;   参数由堆栈传递
             ACALL     HASC
            POP         ASC           ;   返回值由堆栈传递
             MOV         A,HEX
           SWAP       A
           PUSH       ACC
           ACALL     HASC
           POP         ASC+1

PUSH HEX  
放入堆栈后
POP ASC  出来的值是HEX 的内容吗???
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
        MOV        SP ,        # 3FH       
MAIN:        PUSH        hex                ;十六进制数进栈
        ACALL        HASC                ;调用转换子程序
        POP        asc                ;第一位转换结果送asc单元
        MOV        A ,        hex        ;再取原十六进制数
        SWAP        A                ;高低半字节交换
        PUSH        ACC                 ;交换后的十六进制数进栈
        ACALL        HASC               
        POP        asc+l                 ;第二位转换结果送asc+l单元
子程序(HASC):
HASC:        DEC        SP                ;跨过断点保护内容
        DEC        SP               
        POP        ACC                ;弹出转换数据
        ANL        A ,        # 0FH        ;屏蔽高位
        ADD        A ,        # 7        ;修改变址寄存器内容
        MOVC        A ,        @A+PC        ;查表
        PUSH        ACC                ;查表结果进栈
        INC        SP                ;修改堆栈指针回到断点保护内容
        INC        SP               
        RET        SP               
ASCTAB:        DB        “0,1,2,3,4,5,6,7”        ;ASCII码表
        DB        “8,9,A,B,C,D,E,F”
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表