‘壹’ 51单片机串口通信上位机接收数据丢失,怎么解决
数据丢失多半是因为中断造成的,当串口通讯时,系统被其他中断占用了,那么就会出现数据丢失的情况,所以为了保险,可以采取以下措施:
1、将串口中断优先级设为最高。
2、增加反馈信号,DTR和DSR两个信号可以用起来。
‘贰’ 请教51单片机使用串口中断发送和非中断发送有
51单片机串口发送数据,有两种方式,中断方式和查询方式。就发送数据的结果而言没有任何区别,也都很简单容易。要找区别,中断方式适合于稍复杂的系统,单片机执行程序需要完成的任务比较多,就不能采有查询方式发送,这样会白白浪费单片机大量的时间而影响完成其它任务了。
所以,中断方式,节省单片机的时间,效率是最高的,也是正式产品采用的方式。
查询方式,要整个发送数据期间内,除了发送数据是有效的指令,其余时间都是在循环等待,浪费了大量的时间,效率极低。但是,很适合一个小题目小程序采用,对于初学者编程比较容易。
‘叁’ 单片机中,比如51单片机有五个中断源,两个外部中断源,两个定时器中断源,一个串口中断。它们都在什么情
MCS-51单片机中断系统的结构:
5个中断源的符号、名称及产生的条件如下。
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。
INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。
T0:定时器/计数器0中断,由T0计满回零引起。
T1:定时器/计数器l中断,由T1计满回零引起。
TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。
整个中断系统的结构框图见下图一所示。
<51单片机中断系统结构>
如图所示,由与中断有关的特殊功能寄存器、中断入口、次序查询逻辑电路等组成,包括5个中断请求源,4个用于中断控制的寄存器IE、IP、ECON和SCON来控制中断类弄、中断的开、关和各种中断源的优先级确定。
教你详细认识!看看网址吧!
‘肆’ 请问51单片机如何解决多字节串口接收问题
串口的收发可以用查询和中断两个办法来实现。
1、查询方法更适合于半双工机制,编写的思路简单,程序结构简单,在全双工通信中易出问题。
2、中断方法则更高效。你的程序把两种方法混搭使用,容易出错。
以你的程序为例,一旦收到首个23H字符,就停止在中断服务中for循环里面等待5个剩余字符。假设传感器只发了3个字符,你的程序就停止在for循环里面。
以你的程序为例改进,在中断服务接收中,每次接收中断只收1个字符,完成后退出。
void uart_interrupt(void) interrupt 4 using 0
{
static unsigned char i=0;
unsigned char buf;
if(RI==1)
{
buf=SBUF;
switch(i)
{
case 0:
if(buf==0x23)i=1;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
buffer[i-1]=buf;
i++;
if(buf==0x23)
i=1;
if(i==5)
{
do_something_here(buffer);
i=0;
}
break;
default: i=0;break;
}
RI = 0; //RI清零
}
if(TI==1) TI=0; //TI清零
}
这样改符合你的思维习惯吗?实际串口协议解析与协议密切相关,用状态机做比较好。程序中i把它变成状态机的状态,思考一下,改改程序更佳。