找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4953|回复: 1
打印 上一主题 下一主题
收起左侧

程序编译出错了,麻烦版主看看

[复制链接]
跳转到指定楼层
楼主
ID:25279 发表于 2010-7-27 00:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我想在51hei-5单片机开发板上实现如下的功能:
    上电后让8个数码管显示右下角的点。按INTO按键时八个数码管全显示1,按TO按键时,第二位显示二,按S4按键时第三位显示三,按S5按键时第四位显示五。问题如下图

我搞了好久百思不得其解啊.现在连编译都通不过

 

       ORG 000H
       LJMP MAIN
       ORG 030H
main:  setb   p2.6   ;上电全显示点
       mov p0,#080H 
    clr p2.6 
      SETB P2.7 
       mov p0,#00H
    clr p2.7
    lcall ys 
       JNB P3.2,F1  ;等于O转到F1   (八位数码管全显示1)
    JNB P3.4,F2  ;等于O转到F2   (第二位显示2)
    JNB P3.6,F3  ;等于0转到F3    (第三位显示3)
    JNB P3.7,F4  ;等于O转到F4    (第四位显示4)
       LJMP MAIN
F1:    SETB P2.6   ;1
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0FEH
       CLR P2.7
       LCALL YS1S
    SETB P2.6   ;1
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0FDH
       CLR P2.7
       LCALL YS1S
    SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0FBH
       CLR P2.7
       LCALL YS1S

    SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0F7H
       CLR P2.7
       LCALL YS1S

    SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0F7H
       CLR P2.7
       LCALL YS1S

  SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0F7H
       CLR P2.7
       LCALL YS1S

    SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0F7H
       CLR P2.7
       LCALL YS1S

  SETB P2.6   ;1 
       MOV P0,#06H
       CLR P2.6
       SETB P2.7
       MOV P0,#0F7H
       CLR P2.7
       LCALL YS1S


       LJMP MAIN

F2:   SETB P2.6    ;显示2
      MOV P0,#05BH
      CLR P2.6
     SETB P2.7
     MOV P0,#0FDH
     CLR P2.7
     LCALL YS1S

     LJMP MAIN
F3:  SETB P2.6    ;显示3
     MOV P0,#04FH
     CLR P2.6
     SETB P2.7
     MOV P0,#0FBH
     CLR P2.7
     LCALL YS1S

     LJMP MAIN
F4:  SETB P2.6     ;显示4
     MOV P0,#066H
  CLR P2.6
  SETB P2.7
  MOV P0,#0F7H
  CLR P2.7
  LCALL YS1S
  LJMP MAIN
YS:  MOV R7,#0AH    ;延时
YS1: MOV R6,#0FFH
YS2: DJNZ R6,YS2
  DJNZ R7,YS1
  RET
YS1S:MOV R5,#0FFH
YS1S1:LCALL YS
      DJNZ  R5, YS1S1
  RET
  END

[此贴子已经被作者于2010-7-27 0:05:58编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2010-7-27 00:26 | 只看该作者

JNB是短转移指令,你那F3离他太远了,够不着哦

你上面的 JNB P3.6,F3 指令,转移的范围在-128~+127字节之内,程序编写大了,超出范围是常有的事。

可以在其范围之内,加个“接力点”,再用LJMP这个长转移指令(64KB范围内)转移一次即可。
 
你只需要修改为:
       JNB P3.2,F11  ;等于O转到F11   (八位数码管全显示1)
    JNB P3.4,F22  ;等于O转到F22   (第二位显示2)
    JNB P3.6,F33  ;等于0转到F33    (第三位显示3)
    JNB P3.7,F44  ;等于O转到F44    (第四位显示4)
F11:Ljmp F1
F22:Ljmp F2
F33:Ljmp F3
F44:Ljmp F4

下面我给你加了四行 这个就是接力点,
还有我烧录这个代码到51hei-5板子上以后,发现你这个还有其他的问题,你并没有循环检测按键,只是在开机的时候检测了一次,所以你必须要在开机前就按住按键不动才能实现你上面说的效果,你还要慢慢改


关于转移指令你可以看看这个帖子:
http://zhidao.baidu.com/question/85590549.html  

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表