找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 57|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

新手編寫程序,串口助手接受緩存區(qū)無數(shù)據(jù)顯示,請(qǐng)問如何解決

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
芯片型號(hào)iap15f2k61s2,程序見下,按下s1,計(jì)數(shù)功能正常,按下s2發(fā)送數(shù)據(jù),串口接收緩存區(qū)無顯示,重新按下s1,計(jì)數(shù)功能不工作,請(qǐng)問如何解決
ORG 0000H
LJMP MAIN

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

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


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

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

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

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

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

KEY_S1_PRESSED:
    ACALL DELAY_10MS   ; 延時(shí)消抖
    JB P3.2, EXIT_S1   ; 確認(rèn)按鍵按下

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

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

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

KEY_S2_PRESSED:
    ACALL DELAY_10MS   ; 延時(shí)消抖
    JB P3.3, EXIT_S2   ; 確認(rèn)按鍵按下

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

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

    ; 發(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ā)送標(biāo)志
    RET

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

; 數(shù)碼管段碼表
; P2段碼表 (用于個(gè)位顯示)
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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:275826 發(fā)表于 2025-6-23 10:40 | 只看該作者
晶振須11.0592MHz, 程序沒有問題
回復(fù)

使用道具 舉報(bào)

板凳
ID:1154915 發(fā)表于 2025-6-23 15:27 | 只看該作者
看一下芯片型號(hào)和接口是不是有問題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表