一个51单片机串口通信的简单故障~~大家帮忙看看是咋回事儿啊?
unsigned char *ss 一个指针型形参
实际调用时可用数组代换
while(*ss) {senddata(*ss++);}
指的是数组内容不为空时,发送一次内容,并且指针加一,指向下一个元素
肯定不会运行while(TI==0);下面的程序的,因为你的中断开着,程序跳到中断服务程序里面了,然后中断处理结束了之后,TI自动清零了,所以一直在while(TI==0);无限循环。
程序里面,既然开通了中断功能,那你就一直使用中断功能,为什么你还要使用查询功能呢?甚至有时把中断给禁止了,这里面容易出现问题哈。
你不要使用查询功能,就一直使用中断,具体程序查看下面:
#include
#define uint unsigned int
#define uchar unsigned char
void delay(int z);
char a,flag;
void main()
{
EA=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
ET1=0;
TR1=1;
ES=1;
REN=1;
SM0=0;
SM1=1;
while(1);
}
void ser_interrupt()interrupt 4
{
if(RI==1)
{
RI=0;
a=SBUF; //P1口接的发光二极管,以此查看接收到的数据
P1=a;
SBUF=a;
}
else if(TI==1)TI=0;
}
一般12MHz发送9600波特率的数据就可能出现乱码,接收错误。
应该使用11.0592MHz的晶振。
那说明你的串口接收处理有问题,把程序发上来看看吧。
波特率可能不够精确
建议用11.0592的晶体
是你波特率的问题,晶振不精确...
mcs51单片机的串行口是
MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器...
51单片机中串口通信在哪个端口,有没有固定的。。
51单片机中的串口通信是通过P3口的两个引脚(即P3.0和P3.1)实现的,其中P3.0口为串口接收引脚(RXD),P3.1口为串口发送引脚(TXD)。在51单片机中,串口通信的端口是固定的,即P3.0口和P3.1口。这两个引脚通过串口通信电路与串口通信芯片相连,实现串口通信功能。需要注意的是,在使用51单...
51单片机1个就可以实现的功能,为什么用两个串口通讯
51单片机自身有圈双工的异步通信串口。串口通信基本通信方式有两种:并行通信和串行通信,串行通信根据帧信息的格式分为异步通信和同步通信。串口通信主要用于单片机与外部设备的通信,51单片机自身有圈双工的异步通信串口。
mcs51单片机不能实现串口通讯
mcs51单片机不能实现串口通讯原因如下。1、先判断硬件的问题,用跳线讲串口的pin2和pin3短接,用串口调试助手发送数据看调试助手能不能自己收到,能就说明是单片机程序有问题。2、确认接口芯片与单片机正确连接,确认信号正确进入引脚后再检查串口配置,波特率,停止位数,字长,最后仿真确认正确发送到单片机。
单片机串口通讯波特率是多少?
51单片机波特率计算:方式0: Baud=Fosc\/12;方式1: Baud=2^(SMOD)\/32×T1溢出率;方式2: Baud=2^(SMOD)\/64 ×Fosc;方式3: Baud=2^(SMOD)\/32 ×T1溢出率;注:T1溢出率=1\/T1中断时间;题目串口工作方式1,选择 Baud=2^(SMOD)\/(32×T1中断时间);①式 按标准51单片机 12T模式计算,T1...
51单片机串口通信问题
一个一个问题回答:1、是在一个字节接收成功或一个字节发送成功以后进入中断程序(不过,一般在发送时是将中断关闭的,也就不进入中断了)。此时,定时器的作用就是为了设定串口速率,因为单片机的速度和串口的速度不是一个数量级的,所以一定要有个变速箱。2、数据的接收是由硬件控制的,其实,数据的...
51单片机的串行通信有哪几种格式
串行口分四种工作方式,由SCON中的SMO、SM1二位选择决定。1.方式0 (1)特点 1.用作串行口扩展,具有固定的波特率,为Fosf\/12。2.同步发送\/接收,由TXD提供移位脉冲,RXD用作数据输入\/输出通道。3.发送\/接收8位数据,低位在先。(2)发送操作 当执行一条“MOV SBUF,A”指令时,启动发送操作,由...
51单片机串口通信是全双工的,但是为什么又说它的发送和接受不可以同时进...
51单片机串口通信是全双工的,发送和接受可以同时进行。不可以同时进行的是半双工。全双工方式分别由两根不同的传输线传送数据时,通信双方都能在同一时刻进行发送和接收操作,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在发送和接受两个方向上传送。半双工使用同一根传输线既作接收又...
51单片机多串口同时通信
当然是可以的。不过,取决于设备性能以及你的软件设计水平,模拟串口的精度和实时性有限,通信速率无法做到太高。
51单片机串口是什么工作方式?
51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本...
牟邹祛痰: 可能晶振有问题 一般12MHz发送9600波特率的数据就可能出现乱码,接收错误.应该使用11.0592MHz的晶振.
措美县13057838277: 51单片机串口通信问题求解 - ?
牟邹祛痰: 51单片机串口通信接收数据和发送出去,这不是一个整个过程,即接收和发送没有什么关系的,是完全可以只发送,或只接收的,不需要接收就发出去的.而且不论是接收或发送,每次都是一个字节的,没有什么8个字节的事.但是每发送一个字节,或接收一个字节,数据本身是8个位,注意是8个位,并不是8个字节.但是串口通信并不是只发送这8位数据,需要加一个起始位和一个停止位,组成一帧数据,共10个位.即是要发送一个字节的8个位,需要加一个头和一个尾,对8位数据包装起来.
措美县13057838277: 51单片机串口通信中断的问题 - ?
牟邹祛痰: 肯定不会运行while(TI==0);下面的程序的,因为你的中断开着,程序跳到中断服务程序里面了,然后中断处理结束了之后,TI自动清零了,所以一直在while(TI==0);无限循环.程序里面,既然开通了中断功能,那你就一直使用中断功能,为什...
措美县13057838277: 51单片机简单的串口通信问题:修改程序 满足题意要求,谢谢. - ?
牟邹祛痰: 按你这程序,那只能是把:SBUF=receiveData;while(!TI); 修改成:SBUF='O'; while(!TI); SBUF='K'; while(!TI); 如果一定要指定接收'Y',那就在这4条语句外括上if条件,if(receiveData=='Y'){xxxxx} 不过本人建议你不要这么搞,这个while(!TI);是潜在死循环,也是N多串口通信导致死机的起因,它可能导致系统其他任务无法执行,出现所谓“死机”现象.另外,标准51单片机,9600bps,其晶振必定得使用非整数晶振,如11.0592MHz.用 12MHz的晶振,会因其误码率过大而导致通信失败.
措美县13057838277: 51单片机串口通讯,中断方式,最简单的代码,感觉正确,但是收到的数不对. - ?
牟邹祛痰: 这种情况应该是设置的波特率和串口精灵的波特率不一样引起的,建议再仔细算算..........
措美县13057838277: 51单片机串口通信问题问题程序如下怎样改才能电脑仿真软件发送一个字节单片机接收一个就回一个 - ?
牟邹祛痰: PC端发一个,对于单片机而言就是接受,产生接收中断,然后再将接收到的数据发送出去,你的中断服务子程序里貌似不是这样
措美县13057838277: 单片机与电脑串口通信故障? - ?
牟邹祛痰: 1/电压问题,电脑输出电压与单片机不符 2、通讯问题,查看连接口,及协议 3、单片机问题,芯片程序是否正确 4、连接线问题,换连接线试试.
措美县13057838277: 51单片机和PC串口通信问题 - ?
牟邹祛痰: 这个不是通讯问题.发送过来的实际编码应该都是一样的,但因为在单片机通讯中,中文占两个字符(BYTE),英文和数字占一个字节,在英文和中文混排的时候,部分软件的显示功能对中文显示不给力(其实这是在BOM和UNICODE等技术出现之前,中文系统的通病),尤其是当中文之前的英文为单数个的时候,经常容易显示为乱码.因此才有了各种多国语言规范,防止混排出现乱码的问题.简单的说,就是编码显示问题,你的通讯接收应该都是正确的.
措美县13057838277: 51单片机串口通讯,数据在发送后,上位机没有接收到数据. - ?
牟邹祛痰: 51单片机,数据在发送后,上位机没有接收到数据.而且,串口中断也没进去,弄了很久不知道是什么问题!---- 既然没有收到,也没有进入串口中断,那么,你怎么就知道,数据发送出去了?既然,你确信是发出去了,应该就是上位机的问题,那么,你换一个上位机,再试试看.
措美县13057838277: 51单片机双机串口通讯的问题~ - ?
牟邹祛痰: 1、上位机向下位机发送数据,请先弄个通信协议;2、如果下位机未开启,应该重复询问下位机是否准备好3、下位机准备好,应该作出回应4、上位机收到回应后开始正常发送数据你的问题肯定就...