2301_77450812 2023-09-05 23:09 采纳率: 75%
浏览 28
已结题

8051单片机串口发hex模式两数接收hex模式他们的和,想问怎么接收到和,试了好久写不出来

我的理解是hex模式发的是十六进制数,我先把它变为十进制数进行加法运算(因为我以为接收到的十六进制不可以直接运算),然后我想把两数和一个一个数字输出,但是这个地方就不太清楚了,一直出问题

img


#include <REGX52.H>


unsigned char UART_Receive()    //返回电脑输入数据函数
{
    if(RI==1)            //接收控制器接收后变1,需软件复位0
        RI=0;
    return SBUF;
}

void UART_Init(void)        //串口初始化函数  
                            //4800bps@12.000MHz
{
    PCON |= 0x80;        //使能波特率倍速位SMOD
    SCON = 0x50;        //8位数据,可变波特率,使能接收
    TMOD &= 0x0F;        //设置定时器模式
    TMOD |= 0x20;        //设置定时器模式
    TL1 = 0xF3;            //设置定时初始值
    TH1 = 0xF3;            //设置定时重载值
    ET1 = 0;            //禁止定时器中断
    TR1 = 1;            //定时器1开始计时
    EA=1;                //串口中断
    ES=1;
}

void UART_SendByte(unsigned char Byte)       //串口发送一个字节数据
{
    SBUF=Byte;
    while(TI==0);     //发送控制器发送后变1,需软件重新赋值0
    TI=0;
}        

unsigned char Ten(unsigned char sixteen)          //例:将0x05变为5
{
    unsigned char ten;
    ten=(sixteen/16)*10+(sixteen%16);
    return ten;
}


unsigned char data1,data2,sum,data3,data4;

void main()
{
    UART_Init();

    while(1)
    {

    }
}

void UART_Routine() interrupt 4    
{
    data1=UART_Receive();           //返回电脑输入第一个数据函数,十六进制
    data2=UART_Receive();        //返回电脑输入第二个数据函数,十六进制
    data1=Ten(data1);            //把发送缓冲区接收到的十六进制数据转为十进制数
    data2=Ten(data2);
    sum=data1+data2;
    data3=sum/10;
    data4=sum%10;
    UART_SendByte(data3);
    UART_SendByte(data4);
}
  • 写回答

3条回答 默认 最新

  • 老皮芽子 2023-09-06 08:36
    关注

    中断程序不对
    串口中断,包含了发送和接收两个中断,需要分别处理。
    一个接收中断,只能接收一个数,你的代码中有两次接收
    发送可以不用中断
    比如

    //中断服务函数可以随便写  但interrupt 4代表的串口0中断
    //这是程序的框架
    void uart0_interrupt (void) interrupt 4
    {
        if(RI)  //RI为1代表接收完成一帧数据
        {
            /*
            需要具体做的事情
            */
            RI = 0;//清除标志位,以便当接收到下一帧数据进入中断
        }
        if(TI)//TI为1代表发送完成中断
        {
            /*
            需要具体做的事情
           */
            TI = 0;//清除标志位,以便当接收到下一帧数据进入中断
     
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月5日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向