51单片机串口通讯 查询跟方式和中断方式

我这两天调试51单片机的通讯,想调一个最简单的程序,就是单片机收到数据后RI置1,我用了查询方式和中断方式,但是都不行。
希望大家能帮我看看。
//查询方式
/*****************************************************
程序功能:当检测到有串口数据发过来,不要求接受,只要求能检测到。
检测到有数据发过来,P2^0口置0。
我用的"串口调试助手"来给单片机发数。
******************************************************/
#include <reg51.h>
sbit D1=P2^0;

void init();
void delay();

void main()
{
init();
while(1)
{
if(RI==1)
{
RI=0;
D1=0;
}
}
}
//初始化,设定波特率(T1工作方式2方式,波特率为9600)打开串口
void init()
{ //定时器T1的操作
TMOD=0x20; //T1工作方式2
TH1=0xfd;
TH1=0xfd; //波特率设为9600
TR1=1; //T1开始工作
//打开串口并设置串口工作方式
REN=1;
SM0=0;
SM1=1;
//中断的操作
EA=1;
ES=1;

// RI=0;
}

你的程序不对。查询和中断法只可用其一。你的程序运行的结果是:收到数据,中断抢在主程序之前响应,但你没写中断程序。这样程序就会跑飞。
正确的做法是:查询法就把ES中断关掉,别让中断响应。中断法就是主程序什么也别做,把工作放到中断程序中。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-13
一楼正解
第2个回答  2009-04-13
要把输入的数据赋给SBUF寄存器才能使RI置1进入if语句,还有波特率应该是不是9600,你要位定义SMOD并且赋零。你试试!!!可以发到群的!!呵呵junjie

...讲解一下单片机串口通讯的串口中断方式和查询方式的区别吗?_百度知 ...
查询方式就是CPU间断地(连续的就不用指望干其他活了)查询串口的接受发送标志,决定是否进行后续处理,在查询的间隙里做其他工作。如果串口波特率较高,CPU在间隙里的任务比较重,工作时间比较长,就会出现丢失接收数据现象,因为串口接收缓冲器只有一个字节,不及时读取就会被覆盖。

请教51单片机使用串口中断发送和非中断发送有
51单片机串口发送数据,有两种方式,中断方式和查询方式。就发送数据的结果而言没有任何区别,也都很简单容易。要找区别,中断方式适合于稍复杂的系统,单片机执行程序需要完成的任务比较多,就不能采有查询方式发送,这样会白白浪费单片机大量的时间而影响完成其它任务了。所以,中断方式,节省单片机的时间,效...

请问51单片机如何解决多字节串口接收问题
1、查询方法更适合于半双工机制,编写的思路简单,程序结构简单,在全双工通信中易出问题。2、中断方法则更高效。你的程序把两种方法混搭使用,容易出错。以你的程序为例,一旦收到首个23H字符,就停止在中断服务中for循环里面等待5个剩余字符。假设传感器只发了3个字符,你的程序就停止在for循环里面。...

51单片机如何进行多字节串口接收?!!!
1、查询方法更适合于半双工机制,编写的思路简单,程序结构简单,在全双工通信中易出问题。2、中断方法则更高效。你的程序把两种方法混搭使用,容易出错。以你的程序为例,一旦收到首个23H字符,就停止在中断服务中for循环里面等待5个剩余字符。假设传感器只发了3个字符,你的程序就停止在for循环里面。...

51单片机串口中断能优先定时器中断吗?
可以的 51单片机的默认(此时的IP寄存器不做设置)中断优先级为: 外部中断0 > 定时\/计数器0 > 外部中断1 > 定时\/计数器1 > 串行中断; 但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务的优先级,而不...

C51单片机串口通信中断的问题
对于51而言,每帧产生一次中断。接收4个字节是分4次中断接收完成的。51的UART模块从串行移位寄存器接收完成后是直接放入接收缓冲的,而且接收缓冲只有一个单元。

51单片机串口中断怎么分
由中断号决定,一般计数器0是interrupt 0,定时器0是interrupt 1,接下来是计数器1,再是定时器1,再是串口,有些单片机还会有ADC,串口2,PCI等中断,具体看单片机的资料。Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表...

51单片机串口发送数据时会产生中断吗
如果开了串口中断,接收,发送都会产生中断。建议,都用中断方式。串口接收到数据后,如果没有读出来,又接收到数据了,前面的一个数据就丢掉了。特别是当你接收到字符串的时候,你关中断,或者用查询方式,就容易掉数据。

51单片机串口是什么工作方式?
(1)方式1输出 串行接口以方式1发送时,数据由TXD端输出。CPU执行一条数据写入发送缓冲 器SBUF的指令(例如,MOVSBUF,A),数据字节写入SBUF后,便启动串行口发送器发送,发送完一帧信息,置1放送中断标志TI。(2)方式1输入 串行口以方式1接收时,数据从RXD端输入。在REN置1以后,就允许接收器接收...

51单片机的串口通信中接收中断和发送中断的问题。
在程序中检测RI和TI,RI表示接收中断,TI表示发送中断,如果只要在接收中断时运行,可以如下设置:...JNB RI,EXIT ...CLR RI ...EXIT:RETI

相似回答