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

合集下载

C51单片机技术应用与实践课件3-4 设计单片机双机通信

C51单片机技术应用与实践课件3-4  设计单片机双机通信

串行通信的分类
1
理论认知
按照串行数据的时钟控制方式,串行通信可分为同步通信 和异步通信两类。
异步通信(Asynchronous Communication)
在异步通信中,接收端是依靠字符帧格式来判断发送端 是何时开始发送,何时结束发送的。字符帧格式是异步通 信的一个重要指标。
1
理论认知
异步通信的字符帧格式·
CRC2
同步通信的字符帧格式
1
理论认知
MCS-51串行口结构
MCS-51内部有两个独立的接收、发送缓冲器SBUF。 SBUF属于特殊功能寄存器。发送缓冲器只能写入不能读 出,接收缓冲器只能读出不能写入,二者共用一个字节 地址(99H)。
1
理论认知
串行口结构示意图
单片机与MAX232的接口原理图
1
同步通信(Synchronous Communication)
同步通信是一种连续串行传送数据的通信方式,一 次通信只传输一帧信息。
同步 数据 数据 数据 字符1 字符1 字符2 字符3
(a)
同步 同步 数据 数据 字符1 字符2 字符1 字符2
(b)
数据 字符n
CRC1
CRC2
数据 字符n
CRC1
任务实施
1.硬件设计 (1)单片机双机通件编程
(1) 端口分配 系统中有甲、乙两个单片机系统,在每个单片机的
P1.0和P1.1口均有两个按键,其中P1.0为增加控制键, P1.1为减少控制键,甲单片机的TXD引脚和乙单片机的 RXD相连同时乙单片机的TXD引脚和甲单片机的RXD相接。
2
实践训练
2
实践训练
任务分析:
甲乙两个单片机系统均具有接收和发送功能,可 通过查询的方式知道各自单片机系统的按钮按下的是 “计数增加”还是“计数减少”的按钮,用中断方式 接收对方单片机发过来的数据并显示。

51单片机串口通信实例

51单片机串口通信实例

51单片机串口通信实例一、原理简介51 单片机内部有一个全双工串行接口。

什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。

串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。

其缺点是传输速度较低。

与之前一样,首先我们来了解单片机串口相关的寄存器。

SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。

从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。

串行口控制寄存器SCON(见表1) 。

表1 SCON寄存器表中各位(从左至右为从高位到低位)含义如下。

SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。

经验分享:学习单片机重要的是实践,所以开发板是很重要,给大家推荐些淘宝上信誉良好并且软硬件及小零件等、售前售后服务良好的皇冠级金钻店铺给大家,在硬件购买上少走弯路。

按住Ctrl键单击即可:慧净电子单片机(一皇冠)【天津商盟】天津锐志(电子)单片机经营部(两皇冠)金沙滩工作室(5钻)深圳育松电子元件,模块,传感器,批发部:淘宝最全最平价(5皇冠)志宏电子(4钻)表2 串行口工作方式控制位其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。

SM2 :多机通信控制位。

该仅用于方式2 和方式3 的多机通信。

其中发送机SM2 = 1(需要程序控制设置)。

接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。

当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。

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

单片机端采用C51实现_单个单片机与PC串口通信任务

单片机端采用C51实现_单个单片机与PC串口通信任务

单个单片机与PC串口通信:1)测试通信状态先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,若PC与单片机通信正常,在PC程序的文本框中显示字符串“OK!”,否则显示字符串“ERROR!”。

2)循环计数单击“开始”按钮,文本框中数字从0开始累加,0、1、2、3…,并将此数发送到单片机的显示器上显示;当累加到10时,回到0重新开始累加,依次循环;任何时候,单击“停止”按钮,PC程序中和单片机显示器都停止累加,再单击“开始”按钮,接着停下的数继续累加。

3)控制指示灯在单片机继电器接线端子的2个通道上分别接上2个指示灯,在PC程序画面上选择指示灯号,如1号灯,单击画面“打开”按钮,单片机上1号灯亮,同时蜂鸣器响;单击画面“关闭”按钮,1号灯灭,蜂鸣器停止响;同样控制2号灯的亮灭(蜂鸣器同时动作)。

#include <reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit a1=P0^0;sbit a2=P0^1;sbit a3=P0^2;sbit a4=P0^3;sbit a5=P0^4;sbit a6=P0^5;sbit a7=P0^6;sbit a8=P0^7;void delay(uint x) //延时{uchar i;while(x--)for(i=0;i<120;i++);}void uart(void) interrupt 4 //把接收到的数据写入ucReceiveData(){TI=0;RI=0;if(SBUF=='h')//接收到'H'字符发送'OK'{SBUF='o';while(TI==0);TI=0;}else if(SBUF=='1') a1=0;else if(SBUF=='2') a1=1;else if(SBUF=='3') a2=0;else if(SBUF=='4') a2=1;else if(SBUF=='5') a3=0;else if(SBUF=='6') a3=1;else if(SBUF=='7') a4=0;else if(SBUF=='8') a4=1;else if(SBUF=='9') a5=0;else if(SBUF=='a') a5=1;else if(SBUF=='b') a6=0;else if(SBUF=='c') a6=1;else if(SBUF=='d') a7=0;else if(SBUF=='e') a7=1;else if(SBUF=='f') a8=0;else if(SBUF=='g') a8=1;}void main(void){uchar b=0xfe;TMOD=0x20; //定时器1--方式2IE=0x12; //中断控制设置,串口、T2开中断PCON=0x80; //电源控制SCON=0x50; //方式1TL1=0xFa;//0xF4; //12MHZ晶振,波特率为4800 0xf3 4800TH1=0xFa;//0xF4; //11.0592MHZ晶振,波特率为4800 0xf4 9600 0xfa 19200 0xfdTR1=1; //启动定时ES=1;EA=1;// P0=0;while(1){P1=0;}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Drawing.Drawing2D;namespace lsd1{public partial class Form1 : Form {int a = 0,b=2,c=0,d=0;int m;int sur = 0;int su = 0, sf = 0;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){this.skinEngine1.SkinFile = "WaveColor1.ssk";GraphicsPath gp = new GraphicsPath();gp.AddEllipse(pictureBox1.ClientRectangle);Region region = new Region(gp);pictureBox1.Region = region;pictureBox2.Region = region;pictureBox3.Region = region;pictureBox4.Region = region;pictureBox5.Region = region;pictureBox6.Region = region;pictureBox7.Region = region;pictureBox8.Region = region;gp.Dispose();region.Dispose();label5.ForeColor = Color.Red;timer1.Enabled = false;timer2.Enabled = false;}private void button8_Click(object sender, EventArgs e) {if (textBox1.Text != ""){if (serialPort1.IsOpen){pictureBox1.BackColor = Color.DarkSeaGreen; serialPort1.Write("2");pictureBox2.BackColor = Color.RosyBrown; serialPort1.Write("4");pictureBox3.BackColor = Color.DarkSeaGreen; serialPort1.Write("6");pictureBox4.BackColor = Color.RosyBrown; serialPort1.Write("8");pictureBox5.BackColor = Color.DarkSeaGreen; serialPort1.Write("a");pictureBox6.BackColor = Color.RosyBrown; serialPort1.Write("c");pictureBox7.BackColor = Color.DarkSeaGreen; serialPort1.Write("e");pictureBox8.BackColor = Color.RosyBrown; serialPort1.Write("g");sur = 20;serialPort1.Close();button8.Text = "打开串口";textBox1.Enabled = true;}else{sur = 0;serialPort1.PortName = comboBox1.Text;serialPort1.BaudRate =Convert.ToInt32(comboBox2.Text);try{serialPort1.Open();button8.Text = "关闭串口";textBox1.Enabled = false;comboBox2.Enabled = false;comboBox1.Enabled = false;timer1.Interval =Convert.ToInt32(textBox1.Text);timer1.Enabled = true;timer2.Enabled = true;}catch{MessageBox.Show("串口打开失败了!\n\n可能是串口已补占用。

51单片机与PC串口间通讯设计与分析

51单片机与PC串口间通讯设计与分析

51单片机与PC串口间通讯设计与分析一、串口通讯原理串口通讯是指通过串口来进行数据的收发传输的一种通讯方式。

串口通讯分为同步串行通讯和异步串行通讯两种方式,而51单片机与PC之间的串口通讯采用的是异步串行通讯方式。

异步串行通信是指每个数据字节之间可以有可变长度的停止位和起始位。

串口通讯一般由以下几个部分组成:1.传输数据线:用于传输数据的信号线,包括发送数据线(TXD)和接收数据线(RXD)。

2.时钟线:用于提供通讯双方的时钟信号。

3.控制线:用于控制串口通讯的流程,包括数据准备好(DSR)、数据就绪(DTR)等。

二、串口通讯协议串口通讯协议是约定通讯双方数据传输的格式和规则,常见的串口通讯协议有RS-232、RS-485等。

在51单片机与PC之间的串口通讯中,一般使用的是RS-232协议。

RS-232协议规定了数据的起始位、数据位数、校验位和停止位等。

起始位用于标识数据的传输开始,通常为一个逻辑低电平;数据位数指定了每个数据字节的位数,常见的值有5位、6位、7位和8位等;校验位用于校验数据的正确性,一般有无校验、奇校验和偶校验等选项;停止位用于表示数据的传输结束,通常为一个逻辑高电平。

三、51单片机串口的程序设计#include <reg52.h>#define UART_BAUDRATE 9600 // 波特率设置#define UART_DIV 256- UART_BAUDRATE/300void UART_Init( //串口初始化TMOD=0x20;SCON=0x50;PCON=0x00;TH1=UART_DIV;TL1=UART_DIV;TR1=1;EA=1;ES=1;void UART_SendByte(unsigned char ch) //串口发送字节TI=0;SBUF = ch;while(TI == 0);TI=0;void UART_Interrupt( interrupt 4 //串口中断处理if(RI)unsigned char ch;ch = SBUF;RI=0;//处理接收到的数据}if(TI)TI=0;//发送下一个字节}void mainUART_Init(;while(1)//主循环}在上述程序中,首先通过UART_Init(函数进行串口初始化,其中设置了波特率为9600;然后使用UART_SendByte(函数发送数据,调用该函数时会把数据放入SBUF寄存器,并等待TI标志位变为1;最后,在UART_Interrupt(函数中,使用RI标志位判断是否收到数据,然后对数据进行处理,TI标志位判断是否发送完当前字节。

51单片机串行口课件

51单片机串行口课件

验数据在传送过程中是否出错的奇偶校验位。奇
偶校验是收发双方预先约定好的差错检验方式之
一。有时也可不用奇偶校验。
(4) 停止位:
字符帧格式的最后部分是停止位,逻辑“1”电平
有效,它可占1/2位、1位或2位(在串行通信时每
位的传送时间是固定的)。停止位表示传送一帧 信息的结束,也为发送下一帧信息作好准备。
⑦RI:接收中断标志位。RI=1,表示一帧数据接收
结束。可由软件查询RI位标志,也可以向CPU申请
中断。
注意:RI在任何工作方式下也都必须由软件清0。 在8051中,串行发送中断TI和接收中断RI的中 断入口地址是同是0023H,因此在中断程序中必须 由软件查询TI和RI的状态才能确定究竟是接收还是
起发送。接收端收到该数据块和校验码后,进行
同样的运算来校验传送是否出错。目前CRC已广
泛用于数据存储和数据通信中,并在国际上形成 规范,市面上已有不少现成的CRC软件算法。
五、8051单片机的串行接口
8051内部有一个可编程全双工串行通信接口。
该部件不仅能同时进行数据的发送和接收,也可 作为一个同步移位寄存器使用。 下面将对其内部结构、工作方式以及波特率 进行介绍。
信两种基本通信方式。 1. 同步通信(Synchronous Communication) 同步通信是一种连续传送数据的通信方式,一
次通信传送多个字符数据,称为一帧信息。数据传
输速率较高,通常可达56000bps或更高。其缺点是 要求发送时钟和接收时钟保持严格同步。
同步通信的数据帧格式如图8.3所示。
发送 接收 发送 接收
A 端
B 端
图8.6 半双工制式
3. 全双工制式(Full duplex) 全双工制式是指通信双方均设有发送器和接

51单片机和PC机串行通信系统设计

51单片机和PC机串行通信系统设计
图 1 RS2232C接口引脚定义
3 通信软件的设计 PC机和单片机在进行通信时 ,首先分别对各自
的串行口进行初始化 、确定串行口工作方式 、设定波 特率 、传输数据长度等 ,然后才开始数据传输 ,这些 工作是由软件来完成的 ,因此对 PC 机和单片机均 需设计相应的通信软件 。
收稿日期 : 2005202221
图 2 MC1488引脚示意图
图 3 MC1489引脚示意图
图 4 单片机与 RS2232标准接口电路
开始通信前 ,首先要初始化串口 ,包括选串口 、 设置串口掩码 、设置缓冲区 、设置波特率 、创建同步 事件 、创建线程并让辅助线程处于发信号状态等 。 用户通过调用 AP I提供的函数来完成 。W in 32 对 I/O 口 ,如串口 、并口等进行操作需通过“文件 ”方式 实现 ,串口的打开 、关闭 、读取和写入所用的函数和 操作文件的方式相似 。常用的函数调用有 :
·41·
( 3)设置缓冲区大小 。如果程序需要重新分配 发送和接收缓冲区 ,则使用 SetupComm ( )函数 。
( 4)清除缓冲区 。可使用 PurgeComm ( )函数 。 ( 5)从串口接收数据 。可使用 Read2File ( ) 函 数。 ( 6)从串口发送数据 。可使用 W rite2File ( ) 函 数。 ( 7)关闭串口 。可使用 CloseHandle ( )函数 。 有了 W in32 AP I串行通信函数 ,就可以实现串 口的打开和关闭 ,设置串口状态 ,并进行串行数据的 发送和接收 ,完成串行通信任务 。编写 W in32 串行 通信程序的基本步骤是 : ①使用 CreateFile ( )函数获得串口句柄 ; ②使用 BuildCommDCB ( )和 SetCommState ( )函 数设置串口工作状态 ; ③可根据需要选择相应的结构和函数进行其它 设置 。如重新设置发送接收缓冲区可使用 Setup2 Comm ( )函数 ;设置超时则可修改 COMMTIMEOUTS 结构并使用 SetCommTimeouts( )函数等 ; ④使用 ReadFile ( ) 和 W riteFile ( ) 函数读写串 口; ⑤串行通信结束时 ,使用 CloseHandle ( )函数关 闭串口以释放控制权 ,使串口可以被其它的程序使 用。 3. 2 单片机收发软件设计 设计单片机的通信软件 ,实际上是对单片机的 串行口的设计 ,通常采用汇编语言来设计 。首先必 须设置串行通 信 方式 ( SCON ) 和 波特 率 ( PCON ) 。 汇编程序如下所示 : ( 1)发送程序的设计 。 TRT: MOV SCON , #50H; 初始化方式 1,波特率

51单片机C语言应用开发实例精讲8结构实例6:单片机的串口通信

51单片机C语言应用开发实例精讲8结构实例6:单片机的串口通信

8. 结构实例6:单片机串口通信虽然那个流水灯游戏的可玩性和按键手感问题还值得再好好提升一下,但小月更希望调剂一下,转而开始了对手头烧写板上关于RS-232转换部分的学习。

小月的做法并不难以理解,毕竟与RS-232转换的相关电路在原理图中还是相当显眼的,甚至于他手头编程器的别名就是RS-232转换器。

图8.1 单片机中负责RS-232通讯的电路在烧写器一端与电脑连接的两个接头中,9针的RS-232接口就是串口通信线,而另一个USB口仅接通了+5V和GND,只有给烧写器供电的作用。

这样就可以知道,电脑可以通过RS-232对单片机的内部程序进行改写。

那么,这就意味着单片机与电脑间必然可以进行数据的交换,这种交换,就叫做通信。

所谓串口通信,就是指这种基于RS-232串口的通信方式。

RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。

最早是为使电脑通过电话线系统相互通信的调制解调器上而是设计的。

后来发展到连接鼠标或打印机上,目前已经被支持设备的即插即用和热插拔功能的USB所替代,但仍广泛的用于工业仪器仪表中,同时也是单片机最基础和最常见的通信方式。

不过要把“最基础和最常见”这两个最拆开来说,就要在后面加上“之一”了。

虽然目前的通信技术日新月异,但这种说法在今后很长一段时期内都是成立的,也正因为这样的特点,STC的51系列单片机都是默认通过RS-232方式进行烧写的。

作为两台设备之间进行的通信,必然需要共同遵守某种规定或规则,包括交流什么、怎样交流及何时交流。

这个规则就是通信协议。

RS-232通信中通信协议的原则就是串口按位(bit)发送和接收数据。

线路上,RS-232通信使用3根线完成,分别是地线、发送、接收。

端口能够在一根线上发送数据的同时在另一根线上接收数据,即全双工传输。

全双工传输是传输制式的一种分类方式中的一类,除此还有单工传输和半双工传输。

单工传输,是指消息只能单方向传输的工作方式。

c51单片机控制红外通信接口电路图的设计

c51单片机控制红外通信接口电路图的设计

c51单片机控制红外通信接口电路图的设计原理图的求证:注:黑色字体为我的个人阐述,其他颜色字体为单片机手册节选文章。

如图(原图)电路图中电阻R6-R13为多余的,其作用如下文:(这几个电阻是需要的!!起限流和保护单片机,LED的作用,不能少,一般选择220-510欧姆,流过LED电流在10-20毫安为好)2.4 发光二极管显示部分设计有8个发光二极管与单片机的P1口相连,二极管的正极与电源正极相连,负极串联一个电阻与Pl口相连,给Pl口送低电平就得到不同的显示状态。

因为,电阻R6-R13没有参与光的发射和接收所以我认为它是多余的。

去掉后节省出来P1.0-P1.7的引脚,用作他用。

(这不对的,如果你LED接到了P1口,P1就不能做其它用了,如果作其它用的话,LED指示就让你感觉莫名其妙了)2.3 数码显示部分在系统中,选用一个双七段数码管来显示发送和接收的数据。

数码管采用DPY双位七段共阳数码管。

高位的共阳极是lO脚,低位的共阳极是5脚。

由单片机的P O口控制数码管的阴极,P2.6,P2.7口分别控制数码管的高位和低位,当P2口输出数位“0”时,相应的三极管导通。

根据PO口输出不同数位,数码管显示不同的数字,当P2口输出数位“l”时,三极管截止,数码管不显示。

我不需要数码显示部分,而跟他相关的电子元件没有参与红外线的发射和接受,所以我认为直接去掉就行。

(这个有会更好些,因为可以显示的东西会比LED显示效果更好。

前提是你得写单片机程序,要是我在LED 与它之间做取舍的话,我将保留它,舍掉LED,不过编写程序会复杂些)这样一来图中保留了,主要的红外线发射部分的电路图,没有因为删减部分而影响它的正常功能,却剩出了16个引脚。

红外线发射部分的运作原理如下:2.1 发射部分设计红外发送电路包括脉冲振荡器、三极管和红外发射管等部分。

其中脉冲振荡器有NE555定时器、电阻和电容组成,用于产生38 kHz的脉冲序列作为载波信号,红外发射管HG选用Vishay公司生产的TSAL6238,用来向外发射950 nm的红外光束。

计算机和单片机之间的串行通信

计算机和单片机之间的串行通信

PC和单片机的串行通信设计一.PC和单片机的通信单片机的串行口除了可用作与其他单片机的通信外,还能作为与普通计算机通信的通道,从而使得单片机在通信与控制领域得到了广泛的应用。

串行通讯方式具有使用线路少、成本低,适合远程传输。

PC机与单片机之间由RS-232C接口相连,在计算机的串行口都是公头,称为DB-9P。

而可插入公头的是母头,称为DB-9S。

计算机通过串口软件发送和显示数据,发送的数据通过晶片MAX232传到单片机中,并由LED数码管显示出来。

二.系统设计1.系统方案单片机与计算机之间的串行通信实验框图如图1所示:图1 PC与单片机的串行通信实验框图实验主要实现计算机向单片机发送一些数据并在LED数码管中显示出来,另外,在按键的控制下,单片机向计算机发送一行字符串并在计算机中显示出来。

通过本次试验,来验证单片机与计算机之间的串行通信。

2.硬件实现(1)单片机AT89S51介绍图2 单片机AT89S51引脚图MCS-51单片机是美国Intel公司于1980年推出的产品,AT89S51是目前比较流行的内核系列兼容的单片机。

AT89S51是一个低功耗高性能CMOS8位单片机,具有如下特点:40个引脚,8KBFlash片内程序存储器,128B的随机存取数据存储器,32个外部双向I/O口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗电路,片内时钟振荡器。

图3 单片机AT89S51结构框图(2)复位电路AT89S51单片机的第9脚(RST)为复位引脚,系统上电后,时钟电路开始工作,只要RST 引脚上出现大于两个机器周期时间的高电平即可引起单片机执行复位操作。

有两种方法可以使AT89S51单片机复位,即在RST引脚加上大于两个机器周期时间的高电平或WDT计数溢出。

单片机复位后,PC=0000H,CPU从程序存储器的0000H开始取指执行。

复位后,单片机内部各SFR 的值如表2.3所示。

第19章-51系列单片机与PC的串行通信

第19章-51系列单片机与PC的串行通信
21天学51单片机开发
第十九讲:51系列单片机与PC的串行通信
课程安排
• 串行通信接口概述 • 串行通信接口芯片 • 单片机与PC的串行通信实例
串行通信接口概述
• 串行通信也就是数据按照比特逐个发送和接收的通 信标准。 • 主要包括如下几种:
– – – – – 基本串行通信接口RS-232C; 高速率增强型串行通信接口RS-449; 平衡方式高速率增强型串行通信接口RS-422; 非平衡方式增强型串行通信接口RS-423; 多发送/接收器远距离增强型串行通信接口RS-485;
RS-423A串行通信接口标准
• RS-423A标准是另外一种采用非平衡数据传输的方 式 • RS-423A标准采用了差分接收器代替原来的RS232C的单端接收器
发送器 DS3691 数据输入 RS-423A信号线 接收器 26L32 数据输出
信号公用线
RS-422A串行通信接口标准
• RS-422A标准是另外一种以平衡方式传输的标准 • 发送端和接收端分别采用平衡发送器和差动接收器。 • 该标准中规定只有一个发送器,但可以有多个接收器
– 抗干扰串行通信接口20mA电流环。
RS-232C串行通信接口标准
识别代号 最后一次修订的标准版本号
RS
Recommended Standard (推荐标准)
232
C
RS-449串行通信接口标准
• RS-449标准利用的是信号导线之间的信号电压差 ,也就是平衡信号差。 • 速率高 • 传输距离远 • 可以实现多点或使用公共线通信
1 2 3 4 5 6 7 8 9
TxD
GND
GND
单片机与PC的串行通信实例
运行结果
性格决定命运, 专注成就人生

PC与51单片机串口通信

PC与51单片机串口通信

PC与51单片机串口通信PC与51单片机串口通信。

包括单片机内运行的程序,及MATLAB调试助手简易程序等!PC与51单片机串口通信串行通信是计算机和外设进行通讯、对外设进行监控并获取由外设采集到的监测数据的一个非常重要的手段。

由于其所用的传输线少,成本低,实现起来方便易行,因而得到广泛的应用。

STC89C52RC有一个可编程的全双工串行通信接口,可以方便的实现PC机与其之间的串行通信。

一、总体方案系统中采用STC89C52RC/STC89C54RD+单片机作为下位机,PC机为上位机,二者通过CH340将PC的USB口转成RS232的串行口接收或上传数据。

单片机部分的程序采用C语言编程,用KeiluVision4编译后产生HEX文件下载到单片机内,从而实现数据收发。

PC端采用一个串口调试助手(ss4.2)或MATLABGUI实现数据的收发。

二、具体方案1、简单通信测试程序本程序为了测试通信方式是否合适,以便于下一步增加程序的内容。

(1)利用STC提供STC-ISP-V4.83软件检查MCU选项MCUTypeis:STC89C54RD+MCUFirmwareVersion:3.2CChinese:MCU固件版本号:3.2CDoublespeed/双倍速:12T/单倍速振荡放大器增益:fullgain下次下载时P1.0/P1.1与下载无关内部扩展AUX-RAM:允许访问(强烈推荐)下次下载用户应用程序时将数据Flash区擦除:NO用户软件启动内部看门狗后:复位关看门狗ALEpin仍为ALE 内部时钟频率:11.061806M外部时钟频率:11.061806M(2)串行口初始参数设定串行口工作方式为方式1(10位异步收发),波特率为9600bps,用定时器1作波特率发生器,选用定时器模式2,其它详见程序及说明。

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

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

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工作在方式1TH1 =0xfA; //实现波特率9600(系统时钟11。

  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()串口初始化函数
// 函数功能:在系统时钟为时,设定串口波特率为9600bit/s
// 串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率发生器
SCON =0x50; //选择串口工作方式1,打开接收允许TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfA; //实现波特率9600(系统时钟)
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++;
}
}。

相关文档
最新文档