51 单片机与PC 串口通信程序及硬件电路图

51 单片机与PC 串口通信程序及硬件电路图

2009-10-16 10:18



#include <reg51.h>
#define BUFFERLEGTH 10
//-----------------------------------------------------------------
void UART_init(); //串口初始化函数
void COM_send(void); //串口发送函数
char str[20];
char j;
//-------------------------------------------------------------------
void main(void)
{
unsigned char i;
UART_init();
j=0; //初始化串口
for(i = 0;i < 10 ;i++)
{
COM_send(); //首先发送一次数据作为测试用
};
while(1);
}
//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ 时,设定串口波特率为9600bit/s
// 串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率发生器
SCON =0x50; //选择串口工作方式1,打开接收允许
TMOD =0x20; //定时器1 工作在方式2,定时器0 工作在方式1
TH1 =0xfA; //实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
//------------------------------------------------------------
void COM_send(void)
{
unsigned char point = 0;
for(point=0;str[point]!='\0';point++) //连续发送二十位数据//把缓存区{
SBUF=str[point];
while(!TI);
TI=0;
//str[point]='\0';
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer;
bit flag=1;
if(RI) //处理接收中断
{
RI=0; //清除中断标志位
RECEIVR_buffer=SBUF; //接收串口数据
str[j]=SBUF;
if (RECEIVR_buffer == '$')
{ ES=0;
str[j]='\0';
SCON =0x40; //接收不允许
COM_send(); //发送数据
ES=1;
j=0;
flag=0;
SCON=0x50; //接收允许
}
if(flag)
j++;
}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值