51单片机串口通讯,怎么发送数据串口调试精灵收不到啊

来源:百度知道 编辑:UC知道 时间:2024/05/24 10:57:44
#include<reg51.h>
unsigned char rec[5];
unsigned char incept(void);
void serial() interrupt 4 // 串口中断
{
rec[0]=incept();
rec[1]=incept();
rec[2]=incept();
rec[3]=incept();
rec[4]=incept();
RI=0;
}
void uart(void) //初始化
{
TMOD=0x20;
SCON=0x40;
PCON=0x00;
REN=1;
RI=0;
TI=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
}
unsigned char incept(void) //由串口逐字节接收数据
{
unsigned char urt;
while(RI==0) ;
urt=SBUF;
RI=0;
return urt;
}
void send(unsigned char*str,unsigned char ss)
{
while(*str!=0x00)
{
SBUF=*str;
while(!TI);
TI=0;
str++;
}
SBUF=ss;
while(!TI);
TI=0;
}
void main()
{
unsigned int i;
uart();
for(i=0;i<5;i++)
{

真的很滥。这是一个发I Like You!的程序,简单实用。
没用中断,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata w[]="I Like You! "; //数据定义
void delay(uchar);
void main(void)
{
uchar count;
TMOD=0X20; //工作在方式2
TL1=0xfd; //T1波特率9600bps
TH1=0xfd; //串行工作在方式3
SCON=0xd8;
TR1=1; //启动T1
while(1)
{
count=0;
while(*(w+count)) //判断一串数据是否结束
{
SBUF=*(w+count); //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
count++; //准备发送一个数据
}
delay(100);
}
}
void delay(uchar times) //延时子程序
{
uchar i;
while(times--);
for(i=0;i<120;i++){}
}

呵呵,太滥了。

这个函数:void serial() interrupt 4 // 串口中断

当串行口,收到(或发送完)一个字节的时候,它会中断执行一次,你却在这个函数里面,调用了五次incept();,接收了5次串行数据!

你打算接收什么呢?