首页 > 编程知识 正文

51单片机串口通信例程,单片机与单片机串口通信

时间:2023-05-04 07:22:26 阅读:175925 作者:4375

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *本文引用地点: http://www .

文件说明:以51单片机为例,通过简单的串行通信协议c程序,

协议以0XAA开始,以0XCC、0x33、0XCC和0XCC结束,数据长度不是恒定的

*****************************

#define uchar unsigned char

#define uint unsigned int

bit RXAAOK; 接收到0XAA开头标志

bit RXFRMOK; 接收//1帧的完整数据标记

//如果在接收中断过程中是完整的一个数据集,则在主函数中输入

//处理完成后清除

uchar RXBUF[32]; //接收缓存

uchar RX_P; //数据数

voiduarto_ISR(interrupt4//接收中断可能是函数声明,具体取决于处理器

{

uchar i; //有用地提取接收缓冲区的字符

是if(ri )

{ i=SBUF; //提取字符

RI=0;

判断是否接收到if(rxfrmok==0)//开头字符0XAA

收到{if(rxaaok ) 0XAA后,继续接收下一个字符

{ RXBUF[RX_P]=i; //将字符放入数组

if () rx_P3 ) ) RXBUF[RX_P-3]==0xcc ) ) ) ) ) ) ) ) ) )。

(rxbuf(rx_p-2 )==0x33 ) (rxbuf ) rx_p-1 )==0xC3 ) ) ) ) ) ) ) ) )。

(RXBUF[RX_P]==0x3c ) )//确定一帧的数据接收是否完成

{ RXFRMOK=1; //接收完成后,设置RXFRMOK;

RXAAOK=0; //清除开始标志位RXAAOK

}

RX_P; //在接收计数器上加1

}

if (! rxaaok(I==0xaa ) )

{RXAAOK=1;

RX_P=0;

}

}

}

}

void main ()//主程序

{

while(1)。

{

是射频(rxfrmok )

{

if(rxbuf[0]==0x78 ) ) ) ) )。

//输入自己的处理函数即可

}

if(rxbuf[0]==0x7c ) ) ) ) )。

//输入自己的处理函数即可

}

RXBUFMOK=0; //处理完成,清除信息

}

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。