C51单片机和电脑串口通信电路图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C51单片机和电脑串口通信电路图与源码

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。

串口通讯的硬件电路如上图所示

在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。

按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站可以找到

软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。

#include

#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'在内的十位数据到数据缓冲区

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

相关文档
最新文档