標題: 新手編寫程序,串口助手接受緩存區(qū)無數(shù)據(jù)顯示,請問如何解決 [打印本頁]

作者: demoegg123    時間: 2025-6-22 16:37
標題: 新手編寫程序,串口助手接受緩存區(qū)無數(shù)據(jù)顯示,請問如何解決
芯片型號iap15f2k61s2,程序見下,按下s1,計數(shù)功能正常,按下s2發(fā)送數(shù)據(jù),串口接收緩存區(qū)無顯示,重新按下s1,計數(shù)功能不工作,請問如何解決
ORG 0000H
LJMP MAIN

ORG 0100H
MAIN:
    MOV SP, #70H       ; 設(shè)置堆棧指針
    ACALL INIT_UART    ; 初始化串口
    MOV R5, #0         ; 初始化計數(shù)器
    ACALL DISPLAY      ; 初始顯示00

MAIN_LOOP:
    ACALL KEY_SCAN     ; 掃描按鍵
    SJMP MAIN_LOOP     ; 主循環(huán)


INIT_UART:
    ANL PCON, #7FH     ; 波特率不倍速 (SMOD=0)
    MOV TMOD, #20H     ; 定時器1模式2 (自動重裝)
    MOV TH1, #0FDH     ; 波特率9600 (11.0592MHz晶振)
    MOV TL1, #0FDH
    SETB TR1           ; 啟動定時器1
    MOV SCON, #50H     ; 串口模式1,允許接收
    CLR TI             ; 清除發(fā)送中斷標志
    RET

; 數(shù)碼管顯示
DISPLAY:
    MOV A, R5          ; 讀取計數(shù)值
    MOV B, #10         ; 除以10分離十位和個位
    DIV AB
    MOV R6, A         
    MOV R7, B         

    ; P0顯示十位
    MOV DPTR, #TABA
    MOV A, R6
    MOVC A, @A+DPTR
    MOV P0, A

    ; P2顯示個位
    MOV DPTR, #TAB
    MOV A, R7
    MOVC A, @A+DPTR
    MOV P2, A
    RET

; 按鍵掃描
KEY_SCAN:
    ; 檢測S1按鍵 (P3.2)
    JNB P3.2, KEY_S1_PRESSED
    ; 檢測S2按鍵 (P3.3)
    JNB P3.3, KEY_S2_PRESSED
    RET

KEY_S1_PRESSED:
    ACALL DELAY_10MS   ; 延時消抖
    JB P3.2, EXIT_S1   ; 確認按鍵按下

    ; 等待按鍵釋放
WAIT_S1_RELEASE:
    ACALL DISPLAY      ; 保持顯示更新
    JNB P3.2, WAIT_S1_RELEASE

    ; 計數(shù)器加1 (00-99循環(huán))
    INC R5
    MOV A, R5
    CJNE A, #100, UPDATE_DISPLAY
    MOV R5, #0         ; 達到100則歸零

UPDATE_DISPLAY:
    ACALL DISPLAY      ; 更新顯示
EXIT_S1:
    RET

KEY_S2_PRESSED:
    ACALL DELAY_10MS   ; 延時消抖
    JB P3.3, EXIT_S2   ; 確認按鍵按下

    ; 等待按鍵釋放
WAIT_S2_RELEASE:
    ACALL DISPLAY      ; 保持顯示更新
    JNB P3.3, WAIT_S2_RELEASE

    ; 發(fā)送當前計數(shù)值 (ASCII格式)
    MOV A, R5
    MOV B, #10
    DIV AB             ; A=十位, B=個位
    ADD A, #30H        ; 十位轉(zhuǎn)ASCII
    ACALL SEND_CHAR    ; 發(fā)送十位
    MOV A, B
    ADD A, #30H        ; 個位轉(zhuǎn)ASCII
    ACALL SEND_CHAR    ; 發(fā)送個位

    ; 發(fā)送換行符便于查看
    MOV A, #0DH        ; 回車
    ACALL SEND_CHAR
    MOV A, #0AH        ; 換行
    ACALL SEND_CHAR
EXIT_S2:
    RET

; 串口發(fā)送函數(shù)
SEND_CHAR:
    MOV SBUF, A        ; 發(fā)送字符
    JNB TI, $          ; 等待發(fā)送完成
    CLR TI             ; 清除發(fā)送標志
    RET

; 10ms延時消抖
DELAY_10MS:
    MOV R0, #20
DL1:
    MOV R1, #250
DL2:
    DJNZ R1, DL2
    DJNZ R0, DL1
    RET

; 數(shù)碼管段碼表
; P2段碼表 (用于個位顯示)
TAB:   DB 88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H
; P0段碼表 (用于十位顯示)
TABA:  DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H

END

{BF17C830-D373-4A89-8849-734FFFF302B7}.png (271.03 KB, 下載次數(shù): 0)

{BF17C830-D373-4A89-8849-734FFFF302B7}.png

作者: tyrl800    時間: 2025-6-23 10:40
晶振須11.0592MHz, 程序沒有問題
作者: wangjz451    時間: 2025-6-23 15:27
看一下芯片型號和接口是不是有問題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1