1楼:单片机另类
串口之间是有协议的,有起始位和停止位,中间是数据。当发送方检测到接收方空闲,就会发起数据发送,先有起始位,然后是数据,最好是停止位。接收方在接受数据的时候是一个串入并出的一个寄存器。
当最后一个停止位到达时,寄存器输出到sbuf,并置位ri,引起串口中断。这个时候sbuf中就是刚收到的数据。
接收函数一般都是在中断中处理(有些情况也可以在main函数中轮询)发送数据的时候,促发串口发送的指令是 mov sbuf,a 也就是说给sbuf赋值即可触发串口发送数据,发送完毕后硬件将ti置位。需要手动清除。
发送函数可以参考以下:
void putc_to_serialport(uchar c)
2楼:杨培文第二代
能不能发一下你的**,你采纳那个回答有一点漏洞。那就串口分四种模式,其中有一种是先触发再去处理数据的接受和发送。此时还没有进入寄存器sbuf。
你可以看看寄存器版本的c51去具体看看那四种模式工作方式。
3楼:匿名用户
你的问题补充里面说的对,但是存入sbuf是需要有一句**的,比如:sbuf=i;其中i就是所谓的数据了
4楼:匿名用户
不需要一直检测,只要中断置位了就会进入中断程序,但需要你手动将中断位ri清0。
51单片机的串口接收一帧数据有几位?
5楼:
发送的位数跟工作方式有关。51单片机的发送和接受,只有10位和11位两种。
先说单片机串口的工作方式:
单片机串口的工作方式共4种,方式0--方式3.
方式0:用移位脉冲。rxd做输入/输出,txd进行移位。收发的数据为八位。
方式1:传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由txd发送,由rxd接收
方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。
方式2和方式3:发送(通过txd)和接收(通过rxd)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。
可见:不论单片机串口接收还是发送一帧数据是多少位,实际有效位数据位都是8位,其余位是为了奇偶校验、做起始位或终止位用的。
以前所述有误,特修正。
6楼:匿名用户
串口通信应该是8到11位。要看你自己程序怎样编写。你需要的数据如何定义。1楼说的是对的
7楼:雨后g雨之叶
51系列发送和接收都是8-11位,8位只是数据位,另3位是起始位 停止位 奇偶校验位.一般11位更好
8楼:匿名用户
标准的8位!因为它是八位单片机,操作位数一般都是8位。一楼那位说的是计算机串口输出规则!
51单片机串行口可以同时接收和发送数据吗?
9楼:匿名用户
51串行口是半双工的,收发寄存器是一个地址,怎么可能同时收发!!你去找下资料就知道了
10楼:匿名用户
51单片机串口通信是全双工的。cpu不可以同时发出发送和接受指令,且发送寄存器只能写入而接受寄存器只能读取,所以给这两个寄存器赋予同一地址。
其实发送和接收可以同时进行。
11楼:匿名用户
可以的,各存于收发寄存器内,全双工的。
51单片机串口通信上位机接收数据丢失,怎么解决
12楼:匿名用户
数据丢失多半是因为中断造成的,当串口通讯时,系统被其他中断占用了,那么就会出现数据丢失的情况,所以为了保险,可以采取以下措施:
1、将串口中断优先级设为最高。
2、增加反馈信号,dtr和dsr两个信号可以用起来。
13楼:风雪画戟
你说出的问题笼统了。
这要看单片机与上位机,的串口通信使用的是什么。
如果时rs485,那需要51单片机多发一位数据可以解决。
如果ttl通信,你得看看波特率。
根据通信方式,查数丢失原因
C串口连续发送接收数据蓝屏问题,C# 串口连续发送接收数据蓝屏问题 20
1楼 匿名用户 看看蓝屏时提示的错误原因,多收集几次蓝屏的错误原因及出错地址,看看有没有规律性。 里加上打印debug信息,看看最后是在哪个函数里导致的蓝屏,debug信息可以包括 循环次数 局部数组的大小 字符串的长度 等等。 c 中,两个窗体同时不断的调用同一个串口,不断重 送命令,接收数据的操...
51单片机的串行口由哪些功能部件组成
1楼 丶葬暧丶 目测你这应该是你要的答案吧 51单片机的串行口是一个全双工的串行口,它既可以用于网络通信也可实现串行异步通信,还可以作为同步移位寄存器使用 它是有串行数据缓冲器sbuf 串行控制寄存器scon和电源控制寄存器pcon等这些特殊功能 51单片机内部包含哪些主要功能部件 各功能部件的主要...
单片机程序问题stc双串口,stc89c52单片机怎么实现用两个串口控制两个模块?
1楼 这东西还得自己去多思考,多琢磨 串口通信 由串口1发出至上位机 你上位机是完全没收到数据吗? 波特率,校验位之类的设置对没? 你可以一步一步的来调 先调通串口2 再调串口1 最后联调 2楼 匿名用户 不用示波器光看程序太费劲了,用示波器看看是哪个地方的问题,没有示波器用万用表看看电影值是否变动...