找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手编写程序,串口助手接受缓存区无数据显示,请问如何解决

[复制链接]
跳转到指定楼层
楼主
芯片型号iap15f2k61s2,程序见下,按下s1,计数功能正常,按下s2发送数据,串口接收缓存区无显示,重新按下s1,计数功能不工作,请问如何解决
ORG 0000H
LJMP MAIN

ORG 0100H
MAIN:
    MOV SP, #70H       ; 设置堆栈指针
    ACALL INIT_UART    ; 初始化串口
    MOV R5, #0         ; 初始化计数器
    ACALL DISPLAY      ; 初始显示00

MAIN_LOOP:
    ACALL KEY_SCAN     ; 扫描按键
    SJMP MAIN_LOOP     ; 主循环


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             ; 清除发送中断标志
    RET

; 数码管显示
DISPLAY:
    MOV A, R5          ; 读取计数值
    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

    ; 计数器加1 (00-99循环)
    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

    ; 发送当前计数值 (ASCII格式)
    MOV A, R5
    MOV B, #10
    DIV AB             ; A=十位, B=个位
    ADD A, #30H        ; 十位转ASCII
    ACALL SEND_CHAR    ; 发送十位
    MOV A, B
    ADD A, #30H        ; 个位转ASCII
    ACALL SEND_CHAR    ; 发送个位

    ; 发送换行符便于查看
    MOV A, #0DH        ; 回车
    ACALL SEND_CHAR
    MOV A, #0AH        ; 换行
    ACALL SEND_CHAR
EXIT_S2:
    RET

; 串口发送函数
SEND_CHAR:
    MOV SBUF, A        ; 发送字符
    JNB TI, $          ; 等待发送完成
    CLR TI             ; 清除发送标志
    RET

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

; 数码管段码表
; 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, 下载次数: 0)

{BF17C830-D373-4A89-8849-734FFFF302B7}.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2025-6-23 10:40 | 只看该作者
晶振须11.0592MHz, 程序没有问题
回复

使用道具 举报

板凳
ID:1154915 发表于 2025-6-23 15:27 | 只看该作者
看一下芯片型号和接口是不是有问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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