打印
[经验分享]

容易写错的串口中断请求标志位TI

[复制链接]
1209|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-8 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口UART初始化文件“UartInit.c”
#include <REGX52.H>

//文件说明
/*
*****************************
*@file                UartInit.c
*@author        RuiXiong
*@version        V1.0.0
*@date                2024/04/02
*@brief        串口UART初始化
*****************************
*/

//函数说明
/*
*****************************
*@brief        串口UART初始化
*@param        无
*@return        无
*****************************
*/

void UartInit(void)                //4800bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x40;                //8位数据,可变波特率
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xFA;                //设定定时初值
        TH1 = 0xFA;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
}


/*
*****************************
*@brief        串口发送一个字节数据
*@param        byte 要发送的一个字节数据
*@return        无
*****************************
*/
void SendByte (unsigned char byte)
{
        SBUF = byte;
        while (T1 == 0);
        T1 = 0;
}

主文件“main.c”
#include <REGX52.H>
#include "Delay.h"
#include "UartInit.h"

int main (void)
{
        unsigned char sec = 0x00;
       
        UartInit ();
       
        while (1)
        {
                SendByte (sec);
                sec++;
                Delay (1000);
        }
        return 0;
}

1,错误描述
烧录代码后,stc-isp中的串口助手中,接收缓冲区不会按1s间隔显示数据00 01 02 03....;

按一次复位键接收缓冲区就显示一次00 01;

2,解决办法
1,打开串口UART初始化文件“UartInit.c”

2,将函数SendByte中的串口发送中断标志位T1改为TI;

Tips:就算你写错成T1(1,2,3的1),编译时也不会报错,如果我不是习惯每一个模块完成后编译调试,我根本检查不出这个错误!!!

void SendByte (unsigned char byte)
{
        SBUF = byte;
        while (TI == 0);//发送完毕后硬件自动将TI置1
        /*
        注意是TI(I,J,K的I)不是T1(1,2,3的1),
        你要是写T1编译也不会报错就很**,Debug成狗
        */
        TI = 0;
}
3,总结
1,以后看手册的时候一定要仔细,尤其不要把1与I,0与O搞错!!!

2,接收缓冲区不显示数据,我第一时间应该优先检查SendByte函数。

3,如果确定是某一个模块出错了,但是语法,甚至逻辑没有问题,那一定去仔细检查书写。

4,每一个模块完成后一定要调试,多测试!!!!这真是一个好习惯。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_73101636/article/details/137279530

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

13

粉丝