51串口通讯 中断注意

发布者:小牛队最新更新时间:2017-11-11 来源: eefocus关键字:51串口通讯  中断注意 手机看文章 扫描二维码
随时随地手机看文章

首先是自己遇到了问题,然后在同事的帮助下解决了,然后上网一查有这样的注意文章,就转过来了

 

一、深入了解字符串的问题

char str11[]="a";

P1=strlen(str11);

上面的一个是一个测试字符个数的实例,用仿真就可以看到结果。结果是1。也就是说字符’’是不会被计入的。那么我们就可以通过此函数来分辩是否是字符和字符串。当然如果字符串是一个字符的话,那么就是我们上面的那个情况了,会直接被当做一个数看待。

注:上位机发过来的数据全部是字符串格式的。

二、串口中断问题

先看下面的程序。

void UART_SendByte(unsigned char dat)

{

       SBUF=dat;

       while(!TI) ;//等待发送完毕

       TI=0;

}

这个程序就是一个简单的串口发送字符的程序,为了能够实现自动发送和接收,我们分析一下它。我们要同时实现接收,有接收那么就要有串口中断,通过串口中断达到接收数据的目的。可是当ES=1,程序并不会像我们想的那样运行,当执行完SBUF=dat后,程序开始等待,大概是5个时钟周期后,程序并没有直接运行TI=0这句,而是,因为缓冲区中的字符而直接跳转到串口中断函数中,甚至出现死循环这样的情况。

为了避开这种情况,我们引入了下面的程序:

void UART_SendByte(unsigned char dat)

{

       SBUF=dat;

       ES=0;

       while(!TI) ;

       TI=0;

       ES=1;

}

 

或者写做一个中断处理函数,空的函数也可以:

void Com_INT() interrupt 4      //串口中断
{
}


关键字:51串口通讯  中断注意 引用地址:51串口通讯 中断注意

上一篇:51单片机 数码动态显示
下一篇:C8051f300_UART0串口发送初始化

推荐阅读最新更新时间:2024-03-16 15:44

关于STM32利用硬件仿真串口中断处理函数应注意的问题
我们在利用jlink或其他仿真器对串口中断处理函数的数据接收进行仿真时,如果在中断函数中设置了断点,我们向串口发送数据端会采用逐个字节发送而不能采用一次性发送多个字节,当然从广义上来讲,你一次发那么多字节我在断点处程序已经停止了再运行肯定你的数据我会丢失啊,所以需要逐个字节发送这是可以理解的。而我这里讲的是如果你一次发送多个字节将会导致什么后果的问题. 假设1:假如你的断点设置在res = USART_ReceiveData(USART1)之后,以下面发送的这串字符为例,那么实际上当你停到断点处看到接收到fe时由于DR寄存器之前已经清空,实际上01已经存到DR中了,这时你运行会再次运行到这个断点,即受到了fe 和01两
[单片机]
关于STM32利用硬件仿真串口<font color='red'>中断</font>处理函数应<font color='red'>注意</font>的问题
8051串口通讯及应用
在微型计算机数字系统里,数据传输可分为并行传输与串行传输两种,并行式传输一次传输多个位(通常是8位)。因此,连接两个系统之间的传输线必须有多条,当然一次传输多个位,传输的速度比较快,但是传输用到的线数也多,线路费用相对会高,线路噪声,阻抗匹配等问题也多,所以并行式传输不适合长距离通讯。 串行式传输每次传输一个位,数据传输的速度表面上不怎么快,但连接两个系统之间,只要两条传输线即可,适合长距离的通信。实际上,目前串行端口传输速率已比并行端口输出传输速率快。 实际中考虑使用并行式传输还是串行式传输要根据数据量与环境而定。若要将8051系统的数据传至另一8051系统,则可以使用串行式数据传输。 最典型的串行式数据传输接口是R
[单片机]
80<font color='red'>51</font> 的<font color='red'>串口通讯</font>及应用
51单片机IO口模拟串口通讯3-中断
硬件环境:STC89C52 软件环境:IDE Keil uVision V4.10 编译器 C51 V9.0 代码如下: /********************************************** 方法3:中断法 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 波特率:9600 描述:所谓中断法是指根据模拟出的波特率,每1位持续的时间的长短是通过定时器计数 溢出产生中断来延时的。 测试1:上电发送1个0x03的字符 测试2:上电先发送1个0x03的字符,然后等待接收,将收到的字符再发送出去(分别一个一个发送0x01,0x02,0x03,0x04,0x0
[单片机]
<font color='red'>51</font>单片机IO口模拟<font color='red'>串口通讯</font>3-<font color='red'>中断</font>法
ARMLinux(mini2440)串口与51单片机的9位串口通讯
当51单片机的串口模式在方式2或方式3时为9位通讯方式,即当串行数据第9位为 1 时,前8位数据指示的是用来和主机通讯的从机地址;当串行数据第9位为 0 时,前8位数据则用为真正的数据。具体请参考: https://www.eeworld.com.cn/mcu/2011/0621/article_4424_1.html 而FriendlyARM的mini2440可以设置的数据位数为5~8位,即CS5,CS6,CS7,CS8。关于Linux串口的编程教学请参见: http://www.adamjiang.com/pukiwiki/index.php?Linux串口编程详解#ec39e271 查阅了一下前人的做法,有两种:1.硬方
[单片机]
ARMLinux(mini2440)串口与<font color='red'>51</font>单片机的9位<font color='red'>串口通讯</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved