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

合集下载

51单片机和计算机之间实现串口通信的电路图

51单片机和计算机之间实现串口通信的电路图

51单片机和计算机之间实现串口通信的电路图串口通讯参考程序如下:来源:深入浅出AVR单片机#include<reg51.h>unsigned char UART_RX; //定义串口接收数据变量unsigned char RX_flag; //定义穿行接收标记/**************************************************************************************** *****函数名:UART串口初始化函数调用:UART_init();参数:无返回值:无结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)备注:振荡晶体为12MHz,PC串口端设置[ 4800,8,无,1,无]/**************************************************************************************** ******/void UART_init (void){EA = 1; //允许总中断(如不使用中断,可用//屏蔽)ES = 1; //允许UART串口的中断TMOD = 0x20; //定时器T/C1工作方式2SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)TH1 = 0xF3; //定时器初值高8位设置TL1 = 0xF3; //定时器初值低8位设置PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)TR1 = 1; //定时器启动}/**************************************************************************************** ******//**************************************************************************************** *****函数名:UART串口接收中断处理函数调用:[SBUF收到数据后中断处理]参数:无返回值:无结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)备注:过长的处理程序会影响后面数据的接收/**************************************************************************************** ******/void UART_R (void) interrupt 4 using 1{ //切换寄存器组到1RI = 0; //令接收中断标志位为0(软件清零)UART_RX = SBUF; //将接收到的数据送入变量UART_dataRX_flag=1; //标记接收//用户函数内容(用户可使用UART_data做数据处理)//SBUF = UART_data; //将接收的数据发送回去(删除//即生效)//while(TI == 0); //检查发送中断标志位//TI = 0; //令发送中断标志位为0(软件清零)}/**************************************************************************************** ******//**************************************************************************************** *****函数名:UART串口发送函数调用:UART_T (?);参数:需要UART串口发送的数据(8位/1字节)返回值:无结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式备注:/**************************************************************************************** ******/void UART_T (unsigned char UART_data){ //定义串口发送数据变量ES=0; //禁止穿行中断SBUF = UART_data; //将接收的数据发送回去while(TI == 0); //检查发送中断标志位TI = 0; //令发送中断标志位为0(软件清零)ES=1; //打开穿行中断}/**************************************************************************************** *****函数名:UART串口发送字符串函数调用:UART_S (?);参数:需要UART串口发送的数据(8位/1字节)返回值:无结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式备注:/**************************************************************************************** ******/void UART_S(unsigned char *str){while(1){if(*str=='\0') break;UART_T(*str++);}}/**************************************************************************************** *****函数名:主函数调用:main();参数:返回值:无结果:备注:/**************************************************************************************** ******/void main(){unsigned char Buf_data[]={" welcome to MCU world. \n\r"}; UART_init();UART_S(Buf_data);while(1){if(RX_flag==1){UART_T(UART_RX);RX_flag=0;}}}。

51单片机与PC机串口通信的仿真与实现

51单片机与PC机串口通信的仿真与实现

51单片机与PC机串口通信的仿真与实现作者:李健来源:《电脑知识与技术》2018年第32期摘要:介绍了利用几种常见软件实现的51单片机与PC机串口通信的仿真过程,可以在单片机课程的理论教学中加以应用,具有效率高、成本低等优点,有助于教师的教学和学生对知识的掌握和应用。

关键词:51单片机;PC机;串口通信;仿真中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)32-0038-02在实际应用中,单片机与PC机间的通信非常普遍[1]。

这时单片机主要完成现场数据采集和设备监控[2],PC机接收单片机发来的数据进行分析、处理,并对结果再次发送单片机进行现场控制等。

笔者在单片机课程的理论教学中,由于课堂上受到条件的约束,采用了纯软件的方法对单片机串口通信进行仿真和演示,便于实现和让学生理解。

下面通过一个实例来介绍51单片机与PC机之间串口通信的仿真与实现过程。

1 所需软件使用到的软件有:VSPD、Proteus、Keil和串口助手[3]。

VSPD是一个虚拟串口小软件,可以虚拟出一对串行接口用于仿真;Proteus是一款流行的单片机仿真软件,用于建立串口通信仿真电路;Keil是用于编写单片机程序的软件;串口助手是用于上位机即PC机的软件,用来向单片机发送数据,或者接收单片机发送来的数据并进行显示。

2 设计与仿真过程预期实现的功能为:PC机通过串口助手向单片机发送一个字节数据,单片机接收到后将数据的二进制形式通过八个数码管的亮灭显示出来,接收的“1”对应的灯亮,接收的“0”对应的灯灭。

同时单片机将接收的数据发回给PC机,PC机将数据在串口助手中再显示出来。

2.1 利用Proteus设计仿真电路如图1所示,在Proteus软件中选用AT89C51单片机、COMPIM、电阻和发光二极管组成仿真电路。

COMPIM在仿真中相当于PC机上配置的RS232标准串行接口,为D型九针插座[4]。

在实际中,单片机和PC机之间需要通过MAX232芯片进行电平转换才能连接,但在仿真图中可以直接将两者的RXD(接收数据)和TXD(发送数据)连接起来进行串行通信。

51单片机-串行口ppt课件

51单片机-串行口ppt课件

为发送时CPU是主动的,不会产生重叠错误。
最新课件
21
8.2.2 80C51串行口的控制寄存器
SCON 是一个特殊功能寄存器,用以设定串行口的工 作方式、接收/发送控制以及设置状态标志:
SM0和SM1为工作方式选择位,可选择四种工作方式:
最新课件
22
●SM2,多机通信控制位,主要用于方式2和方式3。 当接收机的SM2=1时可以利用收到的RB8来控制是否 激活RI(RB8=0时不激活RI,收到的信息丢弃; RB8=1时收到的数据进入SBUF,并激活RI,进而在 中断服务中将数据从SBUF读走)。当SM2=0时,不 论收到的RB8为0和1,均可以使收到的数据进入 SBUF,并激活RI(即此时RB8不具有控制RI激活的 功能)。通过控制SM2,可以实现多机通信。
起 空始 闲位
一个字符帧 数据位
校停 验止 位位
空 下一字符 闲 起始位
LSB
MSB
异步通信的特点:不要求收发双方时钟的
严格一致,实现容易,设备开销较小,但 每个字符要附加2~3位用于起止位,各帧 之间还有间隔,因此传输效率不高。
最新课件
9
2、同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制, 使双方达到完全同步。此时,传输数据的位之间的距离均 为“位间隔”的整数倍,同时传送的字符间不留间隙,即 保持位同步关系,也保持字符同步关系。发送方对接收方 的同步可以通过两种方法实现。
波特率=2SMOD/32×T1的溢出率 = 2SMOD × fosc/[ 32 × 12×(2K-初值)]
最新课件
19
回目录 上页 下页
3、传输距离与传输速率的关系
串行接口或终端直接传送串行信息位流的

51单片机与PC机串口通信

51单片机与PC机串口通信

单片机P2口接8只LED灯,P3.2~P3.3引脚连接有K1和K2共2个按键,使用单片机串行口与PC机通信。

1)由PC机控制单片机的P2口,将PC机送出的数以二进制形式显示在LED灯上;2)按下按键K1向PC机发送数字0x55,按下K2向PC机发送数字0xAA。

源程序如下:#define uchar unsigned char#include "string.h"#include "reg51.h"unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x08,0x03,0x46,0x21,0x06,0x0e}; //十六进制-7段译码表void mDelay(unsigned int DelayTime) //延时函数{ unsigned char j=0;for(;DelayTime>0;DelayTime--) //延时循环{ for(j=0;j<125;j++){;}}}void SendData(uchar Dat) //发送函数{ uchar i=0;SBUF=Dat; //发送Datwhile(1){if(TI) //如果发送中断标志为1,则等待,{ TI=0; break; } //否则清除发送中断标志}}uchar Key() //按键处理函数{ uchar KValue; //声明键值函数P3|=0x3e; //中间4位置高电平 0011 1101if((KValue=P3|0xe3)!=0xff) //如果按键按下{ mDelay(10); //延迟时间函数if((KValue=P3|0xe3)!=0xff) //如果按键还在按下状态{ for(;;) //等待if((P3|0xe3)==0xff) //如果按键抬起,return(KValue); //返回键值}}return(0); //如果按键没有按下,返回0}void main() //主函数{ uchar KeyValue; //定义键值变量KeyValueunsigned char ns,ng,temp; //定义变量ns,ng,tempP2=0xff; //熄灭P2口连接的所有发光管TMOD=0x20; //确定定时器工作模式,模式2,常数自动装入TH1=0xFD;TL0=0xFD; //定时器1的初值波特率为9600,晶体为11.0592MHz //PCON&=0x80; 若是SMOD=1 可以使波特率加倍TR1=1; //启动定时器1SCON=0x40; //串口工作方式1 运行在8位模式REN=1; //允许接收for(;;) //无限循环{if(KeyValue=Key()) //调用按键函数,获取按键信息{ if((KeyValue|0xfb)!=0xff) //如果按键k1按下SendData(0x55); //调用发送函数,送出0x55if((KeyValue|0xf7)!=0xff) //如果k2按下SendData(0xaa); //调用发送函数,送出0xaa}if(RI) //如果接收中断发生{ P2=SBUF; //将接收数据写到端口P2RI=0; } //清除接收标志位temp=P2; //暂存接收到的数据ng=temp & 0x0f; //取接收数据低4位ns=temp>>4; //将高4位右移4位ns &=0x0f; //取接收数据高4位P0=table[ng]; //P0口连接的数码管显示低4位P1=table[ns]; //P1口连接的数码管显示高4位}}。

51单片机与PC机通信

51单片机与PC机通信

《专业综合实习报告》专业:电子信息工程年级:2013级指导教师:学生:目录一:实验项目名称二:前言三:项目内容及要求四:串口通信原理五:设计思路5.1虚拟串口的设置5.2下位机电路和程序设计5.3串口通信仿真六:电路原理框图七:相关硬件及配套软件7.1 AT89C51器件简介7.2 COMPIN简介7.3 MAX232器件简介7.4友善串口调试助手7.5 虚拟串口软件Virtual Serial Port Driver 6.9八:程序设计九:proteus仿真调试十:总结十一:参考文献一:实验项目名称:基于51单片机的单片机与PC机通信二:前言在国内外,以PC机作为上位机,单片机作为下位机的控制系统中,PC机通常以软件界面进行人机交互,以串行通信方式与单片机进行积极交互,而单片机系统根据被控对象配置相应的前向,后向信息通道,工作时作为主控机测对象,作为被控机接受PC机监督,指挥,定期或受命向上位机提供对象及本身的工作状态信息。

目前,随着集成电路集成度的增加,电子计算机向微型化和超微型化方向发展,微型计算机已成为导弹,智能机器人,人类宇宙和太空和太空奥妙复杂系统不可缺少的智能部件。

在一些工业控制中,经常需要以多台单片机作为下位机执行对被控对象的直接控制,以一台PC机为上位机完成复杂的数据处理,组成一种以集中管理、分散控制为特点的集散控制系统。

为了提高系统管理的先进性和安全性,计算机工业自动控制和监测系统越来越多地采用集总分算系统。

较为常见的形式是由一台做管理用的上位主计算机(主机)和一台直接参与控制检测的下位机(单片机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。

主机的作用一是要向从机发送各种命令及参数:二是要及时收集、整理和分析从机发回的数据,供进一步的决策和报表。

从机被动地接受、执行主机发来的命令,并且根据主机的要求向主机回传相应烦人实时数据,报告其运行状态。

用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。

C51语言编程-单片机与 PC 串口通信程序

C51语言编程-单片机与 PC 串口通信程序
‘,’L’,’I’,’M’,’I’,’N’,’G’,0x0d,0x0a,0x00};
ucharidatatrdata3[]={
‘Y’,’I’,’N’,’G’,’Y’,’O’,’N’,’G’,’K’,’E’,’X’,’U’,’E’,’X’,’U’,’E’,’Y’,’U’,’A’,’N’,0x0
d,0x0a,0x00};
YINGYONGKEXUEXUEYUAN。
PC机上的串口调试软件,会在窗口显示出单片机送回来相应字符串;
如果接送的字符串不正确,单片机不响应。
采用html
//---------------------------------------------------------
TMOD=0x20;//T1定时方式2
TH1=0xfd;//波特率9600bps@fosc=11.0592MHz
TL1=0xfd;
TR1=1;//启动T1
ES=1;//开串口中断.
EA=1;//开总中断.
}
//---------------------------------------------------
voidUart_INT(void)interrupt4//串口中断函数
{
ucharTcv=0;
if(RI){//接收?.
RI=0;//标志位清零.
RxBuf[Rx_i]=SBUF;
if((RxBuf[Rx_i-1]==‘g’)&amp;&amp;(RxBuf[Rx_i]==‘o’))Rx_p=1;
ucharidatatrdata1[]={
‘W’,’E’,’L’,’C’,’O’,’M’,’E’,’‘,’T’,’O’,’
‘,’C’,’H’,’I’,’N’,’A’,’!’,0x0d,0x0a,0x00};

单片机原理及接口技术(C51编程)串行口的工作原理及应用

单片机原理及接口技术(C51编程)串行口的工作原理及应用

8.2.1 方式0
2.方式0输入
图8-8 串口方式0外接并行输入、串行输出的同步移位寄存器
8.2.1 方式0
2.方式0输入
参考程序如下:
#include <reg51.h>
#include "intrins.h"
#include<stdio.h>
sbit P1_0=0x90;
sbit P1_1=0x91;
8.2.1 方式0
1.方式0输出 方式0的发送时序见图8-5。
图8-5 方式0发送时序
8.2.1 方式0
1.方式0输出
(2)方式0输出的应用案例 典型应用是串口外接串行输入/并行输出的同步移位寄 存器74LS164,实现并行端口的扩展。 图 8-6为 串 口 方 式 0, 通 过 74LS164输 出 控 制 8个 外 接 LED发光二极管亮灭的接口电路。当串口设置在方式0输出 时 , 串 行 数 据 由 RXD端 ( P3.0) 送 出 , 移 位 脉 冲 由 TXD端 (P3.1)送出。在移位脉冲的作用下,串行口发送缓冲器的 数据逐位地从RXD端串行地移入74LS164中。
1.方式0输出
//串行口中断服务程序
void Serial_Port( ) interrupt 4 using 0 {
if(TI) {
// 如果TI=1,1个字节串行发送完毕
P1_0=1;
// P1_0=1,允许74LS164并行输出,
//流水点亮二极管
SBUF=nSendByte;
8.2.1 方式0
1.方式0输出
参考程序:
#include <reg51.h>
#include <stdio.h>

C51开发板原理图

C51开发板原理图

U15
CPU
P00 P01 P02 P03 P04 P05 P06 P07 U1 8051 P20 P21 P22 P23 P24 P25 P26 P27 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27
VCC C4 C1
POWER
R2
D1 LED
RELAY
JP4: 1、2相连,继电器有效; 2、3相连,外扩红外遥控有 效(U8)
R12
R13
R14
R15
R16
R17
R18
R19
键盘及数码管显示
B RR0 RR1 RR2 RR3 RR4 RR5 RR6 RR7 RR0 RR1 RR2 RR3 RR4 RR5 RR6 RR7 RR0 R64 L2 LED1 VCC SEG0 RST RSTI C25
Q7
Q8
Q9
时钟电路
9 10 11 12 13 14 15 16 H4 VCC Q10
9 10 11 12 13 14 15 16
Edited by Foxit PDF Editor Copyright (c) by Foxit Software Company, 2004 For Evaluation Only.
DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 GND
VCC
LOAD DIN DCLK U20 CH451 DOUT RST ADJ RST# RSTI CLKO CLK
  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 <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++;
}
}。

相关文档
最新文档