亚洲春色中文字幕久久久-三上亚,啪啪啪网站,国产午夜伦鲁鲁,四虎影视在线永久免费观看,中国精品视频一区二区 ,半夜妺妺叫我吃她胸,亚洲无线看天堂av,人妻互换免费中文字幕,被群CAO的合不拢腿H的皇后,护士的下面又湿又紧10P

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 225|回復: 1
打印 上一主題 下一主題
收起左側

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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 2026-7-8 22:37 | 只看該作者
匯編的目的, 就是程序簡單化,沒必要,把簡單的應用,搞到復雜化吧?

你的按鍵都在 P2, 數碼管在 P0, 這么寫不是更簡單?

Start:
        MOV        P0,#0C0H
        MOV        DPTR,#TABLE
        CLR        A
        MOV        R2,A
Check_key:
        CPL        A
        XOR        A,P2
        JZ        Check_key
Key_Analysis:
        RRC        A
        INC        R2
        JNC        Key_Analysis
Key_Disp:
        MOV        A,R2
        MOVC A,@A+DPTR
        MOV        P0,A
        SJMP $

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


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表