找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机汇编语言八路抢答器数组越界问题

[复制链接]
跳转到指定楼层
楼主
ID:1013578 发表于 2026-7-7 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:使用51单片机P0口驱动共阳数码管实现8路抢答器,上电默认显示0,然后1-8按键被按下就显示该数值,且后续任何按键按下无效,按复位键从来。问题:代码1刚上电,数码管无任何显示!!!;1-8按键功能正常。
问题分析:通过KEIL调试发现初始化A=00,1:LOOP行完后A是0XC0,P0是0XC0(显示数字0);2:第一轮结束然后跳转到LOOP执行完后A变成0X00(TABLE【192的偏移地址是多少?越界了所以是0X00】),P0又变为00(显示数字0.),然后程序不断循环1、2
解决方案:让循环发生在P0赋值0之后、或者每次循环都重新赋值P0为0,代码B就是让循环发生在P0赋值之后,这样P0端口在没有按键按下的时间都是固定值(循环前被赋值MOV P0,A)
代码A:
KEY2 BIT P2.1
KEY3 BIT P2.2
KEY4 BIT P2.3

KEY5 BIT P2.4
KEY6 BIT P2.5
KEY7 BIT P2.6
KEY8 BIT P2.7

ORG 00H
MAIN:
     MOV A,#00
     MOV DPTR,#TABLE
LOOP:
         MOVC A,@A+DPTR
     MOV P0,A

KEYA:JB KEY1,KEYB
         MOV A,#1
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYB:JB KEY2,KEYC
         MOV A,#2
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
                 
KEYC:JB KEY3,KEYD
     MOV A,#3
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYD:JB KEY4,KEYE
     MOV A,#4
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYE:JB KEY5,KEYF
     MOV A,#5
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYF:JB KEY6,KEYG
         MOV A,#6
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYG:JB KEY7,KEYH
         MOV A,#7
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYH:JB KEY8,LOOP
         MOV A,#8
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
        

TABLE:DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8
      DB 0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e
          END
/***********************/
代码B:
KEY2 BIT P2.1
KEY3 BIT P2.2
KEY4 BIT P2.3

KEY5 BIT P2.4
KEY6 BIT P2.5
KEY7 BIT P2.6
KEY8 BIT P2.7

ORG 00H
MAIN:
     MOV A,#00
     MOV DPTR,#TABLE
LOOP:
         MOVC A,@A+DPTR
     MOV P0,A

KEYA:JB KEY1,KEYB
         MOV A,#1
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYB:JB KEY2,KEYC
         MOV A,#2
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
                 
KEYC:JB KEY3,KEYD
     MOV A,#3
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYD:JB KEY4,KEYE
     MOV A,#4
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYE:JB KEY5,KEYF
     MOV A,#5
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYF:JB KEY6,KEYG
         MOV A,#6
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYG:JB KEY7,KEYH
         MOV A,#7
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $
         
KEYH:JB KEY8,KEYA
         MOV A,#8
         MOVC A,@A+DPTR
     MOV P0,A
         JMP $


TABLE:DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8
      DB 0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e
          END





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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