单片机接受串口的数据
大家好,单片机接受串口的数据!
单片机接受串口的数据,接受字符超过14个,则会不停的产生串口中断。反复接受字符,单步跟踪可以接受完14个字符,如果直接运行就全部乱了,很是着急。
如果小于14个则可以的,换了一块板子是可以的,但是有3块板子都是不行的,估计不是板子问题。
哪位前辈可遇到类似的问题,谢谢指点下! 单片机接受串口
[解决办法]
调试可以,正常运行不可以,说明中间有延时了就可以了,你看看程序是不是接收部分时间过长或者过短呢
[解决办法]
51串口例程
标签:51串口
发送程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<112;j++);
}
void init()
{
TMOD= 0X20; //T1 方式2 ,8位 自动重装
TH1=0Xfd;
TL1=0Xfd; //9600
TR1=1; // 定时器1启动
//SCON= 0X40; // 串口工作模式 1
SM0=0; // 设置串口的工作模式
SM1=1; //方式1
REN=0; // 不允许串口接收数据
//ES=1; // 串口中断应许
//EA=1; // 开启中断
}
void uart_sendB(uchar d)
{
SBUF=d;
while(!TI);
TI=0;
}
void uart_sendS(uchar *str)
{
while(*str)
{
uart_sendB(*str) ;
str++;
delay(1);
}
}
void main()
{
init();
//uart_sendB('S');
uart_sendS("XXXXXXXXXXXaaa@@@@@@@@@@ ");
//uart_sendB(0x0d); //换行
//uart_sendB(0x0a);
while(1);
}
========================================================================
========================================================================
========================================================================
接收程序
#include <reg52.h>
#include "1602.h"
#define uchar unsigned char
#define uint unsigned int
uchar BUF[30],i=0;
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<112;j++);
}
void init_uart()
{
TMOD= 0X20; //T1 方式2 ,8位 自动重装
TH1=0Xfd;
TL1=0Xfd; //9600
TR1=1; // 定时器1启动
//SCON= 0X40; // 串口工作模式 1
SM0=0; // 设置串口的工作模式
SM1=1; //方式1
//SM2 = 1; //;收到有效的停止位时才将RI置1yh
REN=1; // 允许串口接收数据
ES=1; // 串口中断应许
//RI=0;
EA=1; // 开启中断
}
void uart_sendB(uchar d)
{
SBUF=d;
while(!TI);
TI=0;
}
void uart_sendS(uchar *str)
{
while(*str)
{
uart_sendB(*str) ;
str++;
delay(1);
}
}
void main()
{
init_uart();
init_1602();
LCD_write_string(0,0,"LYQ"); //列x=0-15,行y=0,1
BUF[0]='\0';
RI=0;
while(1)
{
LCD_write_string(0,1,BUF);
}
}
void uart_rx(void) interrupt 4 //using 3
{
EA=0;
if(RI)
{
//RI=0;
BUF[i++]=SBUF;
//uart_sendB(BUF[i]);
//LCD_write_char(12,1,'i');
}
EA=1;
}
while(1)
{
LCD_write_string(0,1,BUF);
}