单片机串口通信c语言程序,【51单片机】RS232串口通讯C语言程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

//-----------------------函数声明,变量定义-------------------------------------

#include

#define COUNT 10 // 定义接收缓冲区大小

unsigned char buffer[COUNT]; //定义接收缓冲区

unsigned char point; //定义接收数据个数指示变量

void UART_init(); //串口初始化函数

void COM_send(void); //串口接收函数

unsigned char CLU_checkdata(void);//计算校验位函数

//-----------------------------------------------------------------------------

// 函数名称: UART_init()串口初始化函数

// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s

// 串口接收中断允许,发送中断禁止

//----------------------------------------------------------------------------

void UART_init()

{ //初始化串行口和波特率发生器

SCON =0x58; //选择串口工作方式,打开接收允许

TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1

TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)

TR1 =1; //启动定时器T1

ET1 =0;

ES=1; //允许串行口中断

PS=1; //设计串行口中断优先级

EA =1; //单片机中断允许

}

//---------------------------------------------------------------------

// 函数名称: com_interrup()串口接收中断处理函数

// 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区

//----------------------------------------------------------

com_interrupt(void) interrupt 4 using 3

{

unsigned char RECEIVR_buffer;

if(RI) //处理接收中断

{

RI=0; //清除中断标志位

RECEIVR_buffer=SBUF; //接收串口数据

if(point==0) //如果还没有接收到起始位

{

if(RECEIVR_buffer=='S') //判断是否起始标志位

point++; //是准备接收下一位

else

point=0; //不是,继续等待起始位

}

else if(point>0&&point<10) //判断是否接收够十位数据

buffer[point++]=RECEIVR_buffer; //不够,把接收到的数据放入接收缓存区

else point=0; //缓冲区已满,清除缓存区内数据重新接收

}

If(TI) //处理发送中断

{

TI=0;

}

}

//-----------------------------------------------------------------------

// 函数名称: COM_send()串口发送函数

// 函数功能: 把数据缓冲区的十位数据发送出去

//-----------------------------------------------------------------------

void COM_send(void)

{

for(point=0;point<=10,TI=1;point++) //连续发送十位数据

//把缓存区的数据都发送到串口

{

SBUF=buffer[point];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值