问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Keil C51模拟器实战:UART#1窗口调试技巧

创作时间:
作者:
@小白创作中心

Keil C51模拟器实战:UART#1窗口调试技巧

引用
CSDN
8
来源
1.
https://blog.csdn.net/qq_57162529/article/details/136433792
2.
https://blog.csdn.net/2301_77580474/article/details/139027611
3.
https://blog.csdn.net/mx_jun/article/details/137235711
4.
https://blog.csdn.net/qq_38786770/article/details/139632930
5.
https://blog.csdn.net/qq_20312079/article/details/104651130
6.
https://blog.csdn.net/2401_89325981/article/details/144097918
7.
https://cn.silabs.com/mcu/8-bit-microcontrollers/c8051f32x-f34x/device.c8051f340-gq
8.
https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter19/chapter19.html

在嵌入式开发领域,Keil C51是一款广泛使用的集成开发环境(IDE),它提供了强大的调试功能,包括串口调试。本文将介绍如何在Keil C51模拟器中使用UART#1窗口进行串口输出调试,帮助开发者快速上手并解决实际项目中的问题。

Keil C51模拟器简介

Keil C51是德国Keil Software公司出品的51系列兼容单片机的C语言软件开发系统。它提供了完整的开发工具链,包括编辑器、编译器、链接器和调试器。Keil C51的调试器支持硬件仿真和软件模拟两种模式,可以方便地进行单步调试、断点设置和寄存器查看等操作。

UART#1窗口的使用

在Keil C51模拟器中,UART#1窗口主要用于显示和监控串口输出的数据。要使用UART#1窗口,首先需要在项目中正确配置串口参数,包括波特率、数据位、停止位和校验位等。然后,在调试模式下,可以通过UART#1窗口查看串口输出的数据,这对于调试串口通信非常有帮助。

实战案例:串口控制数码管显示

为了更好地理解UART#1窗口的使用,我们来看一个实际案例:使用51单片机通过串口控制数码管显示数据。

硬件准备

  • 普中51单片机开发板
  • STC官方下载器自带的串口调试功能

软件配置

  1. 首先需要配置串口参数。在代码中,我们使用以下函数来初始化串口:
void configuart(u16 baud)
{
    SCON=0x50;
    TMOD&=0x0f;
    TMOD|=0X20;
    TH1=256-(11059200/12/32/baud);
    TL1=TH1;
    ET1=0;
    TR1=1;
    ES=1;
}

这里我们设置波特率为9600,这是串口通信中最常用的波特率之一。

  1. 在主函数中调用串口初始化函数:
void main()
{
    EA=1;
    configuart(9600);
    while(1)
    {
        // 主循环代码
    }
}

数据接收与处理

当串口接收到数据时,会触发中断服务程序。在中断服务程序中,我们需要处理接收到的数据:

void interruptUART() interrupt 4
{
    unsigned long int i,b,c;
    EA=0;
    if(RI==1)
    {
        RI=0;
        if(SBUF=='.') 
        {
            dp_pos=num; //记录小数点位置
        }
        else
        {
        shuju[num]=SBUF-0x30;		num++; 
        }
    received_length = num;//记录接收到的数组的长度
        flag=1;
    }
    EA=1;
    if(flag==1)               
    {
        a=0;
        for(i=0;i<num;i++)     
        {
            b=shuju[i]/16;
            c=shuju[i]%16;
            if(b!=0)
            {
                a=a*16*16+shuju[i];
            }
            else
            {
                a=a*16+c;
            }
        }
    }
    if(TI==1)
        TI=0;
}

数据显示

处理完接收到的数据后,我们需要在数码管上显示对应的数据:

void smg_display(u32 b)
{
    u8 i=0,flag=0;
    shuju[0]=b%16;
    shuju[1]=b/16%16;
    shuju[2]=b/16/16%16;
    shuju[3]=b/16/16/16%16;
    shuju[4]=b/16/16/16/16%16;
    shuju[5]=b/16/16/16/16/16%16;
    shuju[6]=b/16/16/16/16/16/16%16;
    shuju[7]=b/16/16/16/16/16/16/16%16;
    
    for(i=7;i>=0;i--)
    {
        if(shuju[i]==0)
            shuju[i]=16;

        else if(shuju[i]!=0)//从高位开始检测是不是有0一旦检测到有0退出循环
            break;
    }
    
    for(i=0;i<8;i++)
    {
        switch(i)//位选
        {
            case 7: LSC=1;LSB=1;LSA=1;break;
            case 6: LSC=1;LSB=1;LSA=0;break;
            case 5: LSC=1;LSB=0;LSA=1;break;
            case 4: LSC=1;LSB=0;LSA=0;break;
            case 3: LSC=0;LSB=1;LSA=1;break;
            case 2: LSC=0;LSB=1;LSA=0;break;
            case 1: LSC=0;LSB=0;LSA=1;break;
            case 0: LSC=0;LSB=0;LSA=0;break;
        }

        if(i==received_length-dp_pos)//小数点显示的位置计算
          SMG_A_DP_PORT=gsmg_code[shuju[i]] |0x80;
        
        else
        {
        SMG_A_DP_PORT=gsmg_code[shuju[i]];//传送段选数据

        }
        delay(100);//延时一段时间,等待显示稳定
        SMG_A_DP_PORT=0x00;//消影
    }
}

实验步骤

  1. 打开串口助手页面,并打开串口
  2. 选择合适的波特率(这里为9600)
  3. 在发送缓冲区选择文本模式(字符)
  4. 填入要发送的数字,观察数码管显示结果

通过这个案例,我们可以看到UART#1窗口在串口调试中的重要作用。它可以帮助我们实时监控串口输出的数据,从而更方便地进行调试和问题排查。

调试技巧分享

  1. 使用断点和单步调试:在串口通信程序中设置断点,可以方便地查看程序执行到哪一步,以及相关寄存器的值。

  2. 检查串口配置:确保串口的波特率、数据位、停止位和校验位等参数配置正确,否则会导致通信异常。

  3. 使用串口助手工具:配合Keil的UART#1窗口,使用串口助手工具可以更直观地查看和发送数据,有助于调试。

  4. 注意数据格式:串口通信中常见的数据格式有ASCII码和十六进制,确保发送和接收的数据格式一致。

通过以上介绍,相信你已经掌握了Keil C51模拟器中UART#1窗口的基本使用方法和一些实用的调试技巧。在实际开发中,这些知识将帮助你更高效地进行串口通信的调试工作。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号