找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初学者请教:单片机串口接收数据错误

[复制链接]
跳转到指定楼层
楼主
初学者请教:
         学习串口接收数据,在网上下了一段代码。运行出现几个错误。请指教-------------!

#include "main.h"
#include "mcu_uart.h"
uchar UartRxBuffer[ 64 ] = { 0 }; //uart串口接收数据
volatile uchar        RX_Cnt = 0; //接收计数
bit TX_Busy = 0;  //发送忙标志

void uart_init()
{
    SCON = 0x50;//设置串口工作方式1
    TMOD = 0x20;//设置计数器工作方式2
    PCON = 0x00;//即SMOD=0,波特率不加倍
    TH1 = 0xFD;//计数器初值,波特率是9600,晶振11.0592MHz
    TL1 = 0xFD;
    ES = 1;//打开接收中断
    EA = 1;//打开总中断
                REN = 1;
    TR1 = 1;//打开计数器
}

void main()
{
        uart_init();
        while(1);
}

void UART_INT (void) interrupt 4
{
        if(RI)
        {
                RI = 0;
                UartRxBuffer[RX_Cnt] = SBUF;
                RX_Cnt++;
        }
        if(TI)
        {
                TI = 0;
                TX_Busy = 0;
        }
}

uchar uart_rx_string( uchar* RxBuffer )
{
        uchar rxLength = 0;
        uint uartRxTimOut = 0x7FFF;

        while( uartRxTimOut-- )
        {
                if( 0 != RI )
                {
                        RI = 0;
                        *RxBuffer = SBUF;
                        RxBuffer++;
                        rxLength++;
                        uartRxTimOut = 0x7FFF;
                }
        }
        return rxLength;
}

运行问题如下:
第一次循环:1-到32行,点击发送。2-到31行,(错误1)RI应当为0,但仍然为1。3-到32行,(错误2)UartRxBuffer[0]=1,应当=c?



第二次循环:1-到31行,(错误3)RI应当为0,但仍然为1。2-到32行,(错误4)UartRxBuffer[0]=0x0A,没有字符?



第三次循环:1-到31行,RI=0正确。2-到32行,(错误5)UartRxBuffer[0]=0x0A,仍然没有字符?




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:997772 发表于 2021-12-28 12:33 | 只看该作者
本帖最后由 zubajie2179 于 2021-12-28 12:36 编辑

补了一张图

第一次循环.jpg (609.1 KB, 下载次数: 24)

第一次循环.jpg
回复

使用道具 举报

板凳
ID:57657 发表于 2021-12-28 18:01 | 只看该作者
头文件 main.h、mcu_uart.h 里的内容贴出来看看。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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