当前位置:首页 > 单片机 > 单片机
[导读]想问一下:单片机串口在接收的时候是怎么接收的?如上位机一次发送一个字符串11223344,通过串口助手下发给单片机。用下面的程序 /******************************************************************/ /* 串口中

想问一下:单片机串口在接收的时候是怎么接收的?如上位机一次发送一个字符串11223344,通过串口助手下发给单片机。用下面的程序
/******************************************************************/
/* 串口中断程序 */
/******************************************************************/
void UART_SER () interrupt 4
{

uchar Temp; //
定义临时变量


if(RI) //
判断是接收中断产生


{


RI=0; //
标志位清零


Temp=SBUF; //
读入缓冲区的值


P1=Temp; //
把值输出到 P1 口,用于观察


SBUF=Temp; //
把接收到的值再发回电脑端


}


if(TI) //
如果是发送标志位,清零


TI=0;

}

单片机能够把上位机的数据全部接收后原样传输回去
------------------------------------

我修改了一下程序:,把上面的判断改为

if(RI) //
判断是接收中断产生


{


RI=0; //
标志位清零


Temp=SBUF; //
读入缓冲区的值


P1=Temp; //
把值输出到 P1 口,用于观察


SBUF=Temp; //
把接收到的值再发回电脑端


while(!TI);


TI=0;


SBUF='o';


}


即想每次读入缓冲区内容后,送回上位机,然后再送回一个字母o,以此来判断单片机读入缓冲区内容的是每次读一个字节还是能够一次性都读完,运行结果为:
        上位机发送11223344,单片机传回的是11223344o
看来单片机每次串口接收终端后,缓冲区中能把全部数据读入,但是SBUF只有一个字节,怎么会能够都读入进来呢?
-------------------------------------
把中断函数里面的内容继续修改为:

if(RI) //
判断是接收中断产生


{


RI=0; //
标志位清零


Temp=SBUF; //
读入缓冲区的值


P1=Temp; //
把值输出到 P1 口,用于观察


SBUF=Temp; //
把接收到的值再发回电脑端


while(!TI);


TI=0;


SBUF='o';


while(!TI);


TI=0;


}

运行结果为:
       上位机用串口助手发送11223344,单片机收到后,传回串口助手,内容显示为1o1o2o3o4o
这就不明白了。
上位机发送的数据单片机每次应该只能收到一个字符,然后下一个字符会触发一个新的接收中断,如此经过多次中断处理后才能收到完整的内容,不知道我这么理解是否正确。请指点,谢谢。

NE5532回复:

楼主在犯一个常见错误——在接收中断里面等发送,接收缓冲区溢出了咋办?

楼主:确实如此,但是
RI=0; // 标志位清零

Temp=SBUF; // 读入缓冲区的值

P1=Temp; // 把值输出到 P1 口,用于观察

SBUF=Temp; // 把接收到的值再发回电脑端

while(!TI);

TI=0;

SBUF='o';
怎么就能全部收到11223344,而且最后能加一个字符o

NE5532版主:

在错误的东西基础上研究如何错误没有任何意义,正确只有一种,错误有无数种。你实在要找是怎么错的,可能找得到,但是对解决问题意义不大,用来培养自己熟悉单片机还成。

中断倒不是不能在里面做事,是看在做事的同时,外面还有没有事要做,如果没有,呆里面也没问题。具体问题具体分析,不能胡子眉毛一把抓。总的来说中断服务程序是尽量短。

【更多资源】

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月17日 /美通社/ -- 在2024 F1中国站即将拉开帷幕之际,高端全合成润滑油品牌美孚1号今日举办了品牌50周年庆祝活动。三届F1年度车手总冠军马克斯•维斯塔潘也亲临现场,共同庆祝这一里程...

关键字: BSP 汽车制造 行业标准 产品系列

北京2024年4月17日 /美通社/ -- 2024年4月13日,由北京康盟慈善基金会主办的"县域诊疗,规范同行"——肿瘤诊疗学术巡讲项目首站在广州隆重召开。本次会议邀请全国多位肺癌领域专家和县域同道...

关键字: AI技术 医疗服务 BSP 互联网

海口2024年4月16日 /美通社/ -- 4月14日,在中法建交60周年之际,科学护肤先锋品牌Galenic法国科兰黎受邀入驻第四届中国国际消费品博览会(以下简称"消博会")法国馆。Galenic法...

关键字: NI IC BSP ACTIVE

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

伦敦2024年4月16日 /美通社/ -- ATFX宣布任命Siju Daniel为首席商务官。Siju在金融服务行业拥有丰富的经验和专业知识,曾在全球各地的高管职位上工作了19年以上。Siju之前担任FXCM首席商务官...

关键字: NI AN SI BSP

STM32与51单片机之间有什么差异呢?两者可以说是一场科技与性能的较量了。在科技飞速发展的今天,微控制器(MCU)已广泛应用于各类电子设备和系统中,发挥着举足轻重的作用。其中,STM32和51单片机作为两种常见的微控制...

关键字: STM32 51单片机 MCU

51单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对51单片机的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 51单片机

在嵌入式系统开发中,单片机是不可或缺的重要组成部分。其中,STM32单片机和51单片机是两种常见的单片机芯片。本文将对比分析这两种单片机的区别,并探讨STM32单片机的优势。

关键字: stm32单片 51单片机

51单片机是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了许多品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基...

关键字: 51单片机 串行通信
关闭
关闭