PC机与单片机232通信协议
pc机和单片机之间的通信

pc机和单片机之间的通信在当今信息化社会中,计算机技术得到了广泛应用和发展,而PC 机和单片机作为计算机的两个重要组成部分,对于信息传输和通信起着至关重要的作用。
本文将重点探讨PC机和单片机之间的通信方式以及相互之间的优缺点。
一、串口通信串口通信是PC机和单片机之间最常见的通信方式之一。
通过串口通信,PC机和单片机可以进行双向数据传输。
串口通信主要通过串行接口来实现,传输速度相对较慢,但稳定可靠,适用于数据量较小且对实时性要求不高的应用场景。
同时,串口通信具有成本低、易于实现的优点,因此在一些简单的嵌入式系统中得到了广泛应用。
二、并口通信并口通信是PC机和单片机之间另一种常见的通信方式。
并口通信通过并行接口来实现,传输速度相对较快,适用于数据量较大且对实时性要求较高的应用场景。
并口通信相对于串口通信而言,不仅传输速度更快,而且还可以一次传输多个数据位,提高了数据传输效率。
但与之相对的是,并口通信所需引脚较多,设计和布线相对复杂,因此在一些对硬件成本和实现难度要求较高的场景下使用较少。
三、USB通信USB通信作为一种常见的通信方式,具有较高的传输速度和较强的兼容性。
对于PC机和单片机之间的通信而言,通过USB接口连接PC机和单片机,可以实现双向数据传输。
USB通信支持热插拔和即插即用的特性,因此使用非常方便。
同时,USB接口还支持供电功能,可以为单片机提供电源。
但需要注意的是,USB通信相对于串口和并口通信而言,实现难度较大,需要借助专门的USB芯片或模块。
四、网络通信随着互联网的快速发展,PC机和单片机之间的网络通信越来越常见。
通过网络通信,PC机和单片机能够实现远程数据传输和控制。
网络通信可以基于以太网、Wi-Fi等多种网络协议进行,其传输速度和稳定性相对较高。
但与之相对应的是,网络通信的实现相对较为复杂,需要考虑网络协议、安全性等诸多因素,同时还需要保证网络的可靠性和稳定性。
五、无线通信无线通信作为一种便捷的通信方式,得到了广泛应用。
单片机与电脑接口(TTL与RS232电平模拟转换)电路及工作原理

2010年11月28日21:381.先介绍电脑上与单片机进行通讯的接口的名称(1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图这个接口有个专业的名称,叫RS23接口,而RS232接口是串口通讯的一种,其实所谓的接口,我的理解就是一种通信协议,规定了传输电平,传输方式,及怎么传输数据等等。
协议标准规定采用一个25个脚的DB25连接器,还规定了连接器的每个引脚的信号内容,同时还对各种信号的电平加以规定。
但随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。
(2)电脑上的RS232接口采用的是负逻辑电平:-15~-3表示逻辑1;+15~+3表示逻辑0;电压值通常在7V左右(3)我们可以使用串口电缆直接连接两台PC机的串口,实现两台PC机的串口通讯。
但是PC机和单片机的通讯却不能够用电缆直接进行连接,原因是PC机RS232串口的电平标准和单片机的TTL电平不一致,因此单片机和PC机之间的串口通讯必须要有一个RS232/TTL电平转换电路。
通常这个电路都选择专用的RS232接口电平转换集成电路进行设计,如MAX232、HIN232等。
2.单片机串口输出的逻辑电平单片机的串口输出电路采用的逻辑电平是TTL电平。
这种电平信号由TTL器件产生的,一般的芯片,如运放,数字器件等...TTL:Transistor-Transistor Logic 三极管结构。
Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V3.单片机与电脑串口的连接首先解决的就是逻辑接口电平的问题,其次就是通信方法及方式的问题(1)在这里我们可以使用集成芯片MAX232,这是一款专门用来进行信号电平的转换的芯片,使用起来简单方便,这里把电路贴出。
(2)当然,我们也可以使用分立元件来搭建RS232电平转换电路以供我们实验使用,下图给出了一个常见电路,只要器件完好,电路焊接完毕后即可正常工作,经实际使用,效果良好。
单片机与PC机通信协议(RS232)

帧格式如下:其中LB、DS在命令帧和应答帧中无。
差错控制与校验采用纵向冗余校验(LRC)。
发送方校验和生成方法:将FD、LB、DS域逐个字节相加求和,在求和过程中舍弃进位,最后将所得的和(单个字节)取补码作为检验和(CS)。
生成校验和的函数为:static unsigned char LRC(auchMsg,usDataLen) /* 函数返回unsigned char 类型的LRC 结果*/ unsigned char *auchMsg ; /* 要计算LRC 的报文*/unsigned short usDataLen ; /* 报文的字节数*/{unsigned char uchLRC = 0 ; /* LRC 初始化*/while (usDataLen--) /* 完成整个报文缓冲区*/uchLRC += *auchMsg++ ; /* 缓冲区字节相加,无进位*/return ((unsigned char)(-((char)uchLRC))) ; /* 返回二进制补码*/}接收方校验方法:将所有接收到的数据,即FD、LB、DS、CS等域逐个字节相加求和,在求和过程中舍弃进位,若结果为零(低字节)则传输无错,否则出错。
应答:接收方对接收数据进行校验后,若无错则向发送方发送传输无错应答帧,若有错则向发送方发送传输出错应答帧。
所需通信数据分为:数据帧、命令帧、应答帧上行数据:下位机(单片机)向上位机(PC机)传送数据⑴初始化上位机(IPC):FD=0x01 (InitPC)单片机将电梯模拟器的参数发送至PC机,初始化PC机端的可视化程序。
PC机上的可视化程序完成初始化后,应向单片机发送初始化完毕命令。
帧格式:⑵发送模拟器状态信息:FD=0x02 (SendMsgToPC)包括:轿厢位置,轿厢状态——上行/下行/停止,轿厢运行速度其中轿厢状态:上行——0x05下行——0x0A停止——0x00⑶开门命令:FD=0x03⑷开门到位命令:FD=0x04⑸关门命令:FD=0x05帧格式:⑹关门到位命令:FD=0x06⑺询问上位机是否准备好:FD=0x07 (IfPCReady)帧格式:下行数据:上位机(PC机)向下位机(单片机)传送数据⑴上位机准备好:FD=0x11⑵初始化完毕:FD=0x12 (PCInitFinish)⑶修改模拟器参数:FD=0x13 (AlterPara)⑷完成修改模拟器参数:FD=0x14 (FinishAlterPara)⑸下送模拟器参数:FD=0x15 (SendParaToMCU)帧格式:应答帧:⑴接收到的数据无错:FD=0xF1帧格式:⑵接收到的数据出错:FD=0xF2模拟器运行流程图修改模拟器参数流程图模拟器参数定义//参数号定义#define ID_Total_Floors 1#define ID_Special_Floor_A 3#define ID_Special_Floor_B 5#define ID_ID_Observe_Para 7#define ID_Dist_Bottom_Limit_Location 10#define ID_Dist_Bottom_Restrict_Location 11#define ID_Duration_Close_LiftDoor 16#define ID_Duration_Open_LiftDoor 17#define ID_Factor_FreqDivid_Hall 18#define ID_Polarity_Photoswitch 19#define ID_Floor_Lift_Lieto 29#define ID_Location_Lift 30#define ID_Length_UnivFloor 2#define ID_Length_Special_Floor_A 4#define ID_Length_Special_Floor_B 6#define ID_Length_Floor_Level_Board 8#define ID_Length_Speed_Alter_Board 9#define ID_Dist_Bottom_SpAlter_UpEnd 12#define ID_Dist_Top_SpAlter_LowEnd 13#define ID_Dist_Top_Restrict_Location 14#define ID_Dist_Top_Limit_Location 15ubyte Total_Floors; //最高楼层数ubyte Special_Floor_A; //专用楼层号Aubyte Special_Floor_B; //专用楼层号Bubyte ID_Observe_Para; //观测参数号ubyte Dist_Bottom_Limit_Location; //下极限与底楼平层的距离(向下计算),单位:厘米ubyte Dist_Bottom_Restrict_Location; //下限位与底楼平层的距离(向下计算),单位:厘米ubyte Duration_Close_LiftDoor; //电梯关门到位时间,单位:秒ubyte Duration_Open_LiftDoor; //电梯开门到位时间,单位:秒ubyte Factor_FreqDivid_Hall; //输入霍尔脉冲分频系数ubyte Polarity_Photoswitch; //平层区光电开关极性:0 - 进入平层区光电开关输出断开,1 - 进入平层区光电开关输出闭合ubyte Floor_Lift_Lieto; //电梯当前楼层uword Location_Lift; //电梯位置值,单位:厘米uword Length_UnivFloor; //通用楼层距离,单位:厘米uword Length_Special_Floor_A; //专用楼层号A的楼层距离(向上计算),单位:厘米uword Length_Special_Floor_B; //专用楼层号B的楼层距离(向上计算),单位:厘米uword Length_Floor_Level_Board; //平层挡板的长度,单位:毫米uword Length_Speed_Alter_Board; //上、下强换挡板的长度,单位:厘米uword Dist_Bottom_SpAlter_UpEnd; //下强换顶端与底楼平层的距离(向上计算),单位:厘米uword Dist_Top_SpAlter_LowEnd; //上强换底端与顶楼平层的距离(向下计算),单位:厘米uword Dist_Top_Restrict_Location; //上限位与顶楼平层的距离(向上计算),单位:厘米uword Dist_Top_Limit_Location; //上极限与顶楼平层的距离(向上计算),单位:厘米。
单片机与pc机通信

单片机与PC机通信1. 引言随着物联网的发展,单片机在各个领域中的应用越来越广泛。
在许多场景中,单片机与PC机的通信是必不可少的。
本文将介绍单片机与PC机通信的原理、常用的通信方式,以及如何实现单片机与PC机的通信。
2. 通信原理单片机与PC机通信的原理是通过串行通信实现的。
串行通信是一种逐位传输数据的通信方式,数据的传输速率较低,但占用的引脚少,适合单片机与PC机之间的通信。
3. 通信方式单片机与PC机之间的通信方式有多种,常见的方式包括:- 串口通信:使用串口通信可以方便地实现单片机与PC机之间的数据传输。
串口通信需要通过串口线连接单片机和PC机,单片机通过串口发送数据,PC机通过串口接收数据。
- USB通信:通过USB接口连接单片机和PC机,可以实现高速的数据传输。
USB通信需要使用USB转串口模块或者USB转串口芯片来实现。
- 以太网通信:通过以太网接口连接单片机和PC机,可以实现远程的数据传输。
以太网通信需要使用以太网模块或者以太网芯片来实现。
4. 实现单片机与PC机通信的步骤下面将介绍如何实现单片机与PC机的通信。
以串口通信为例,步骤如下:4.1. 硬件连接首先,需要通过串口线连接单片机和PC机。
单片机的串口引脚连接到串口线的发送端和接收端,PC机的串口引脚连接到串口线的接收端和发送端。
确保连接正确可靠。
4.2. 单片机程序编写在单片机上编写程序,使其能够通过串口发送数据给PC机。
根据单片机的型号和开发平台,选择相应的串口通信库或者使用底层的串口驱动程序来实现串口通信功能。
4.3. PC机程序编写在PC机上编写程序,使其能够通过串口接收来自单片机的数据。
根据PC机的操作系统和编程语言,选择相应的串口通信库或者使用底层的串口驱动程序来实现串口通信功能。
4.4. 通信测试与调试编写完成的单片机程序和PC机程序可以进行通信测试与调试。
首先确保单片机和PC机之间的连接没有问题,然后运行单片机程序和PC机程序,观察数据的发送和接收情况。
采用MA232实现MCS51单片机与PC机的通信

采用MA232实现MCS51单片机与PC机的通信一、本文概述随着微处理器技术的飞速发展,单片机作为一种集成度高、功能强大的微控制器,在工业自动化、智能仪表、嵌入式系统等领域得到了广泛应用。
MCS51单片机作为其中的佼佼者,以其稳定的性能和广泛的适应性受到了工程师们的青睐。
然而,单片机与PC机之间的通信一直是困扰工程师们的难题之一。
本文旨在探讨采用MA232串口通信模块实现MCS51单片机与PC机之间通信的方法,为工程师们提供一种可靠的解决方案。
本文将首先介绍MCS51单片机的特点及其在嵌入式系统中的应用,然后详细阐述MA232串口通信模块的工作原理及其与MCS51单片机的接口方法。
在此基础上,本文将重点分析采用MA232实现MCS51单片机与PC机通信的硬件电路设计和软件编程实现。
通过实例演示和测试结果分析,验证采用MA232实现MCS51单片机与PC机通信的可行性和可靠性,为工程师们在实际项目中应用提供参考和借鉴。
通过本文的学习,读者可以深入了解MCS51单片机与PC机通信的原理和实现方法,掌握采用MA232串口通信模块实现通信的关键技术,为实际应用提供有力的技术支持。
二、MCS51单片机简介MCS51单片机,又称为Intel 8051微控制器,是Intel公司在1980年代初推出的一款8位CISC(复杂指令集计算机)单片机。
自推出以来,由于其出色的性能、合理的价格和广泛的应用场景,MCS51单片机在全球范围内得到了广泛的使用,成为了嵌入式系统领域的经典之作。
MCS51单片机采用了典型的微处理器结构,包括中央处理器(CPU)、内部数据存储器(RAM)、外部数据存储器(外部RAM)、各种I/O 接口电路以及时钟电路等。
其中,CPU是单片机的核心部分,负责执行程序中的指令,进行数据的运算和处理。
内部数据存储器用于存放程序和数据,而外部数据存储器则提供了更大的存储空间,用于存放更多的数据或程序。
MCS51单片机还提供了丰富的I/O接口电路,包括并行I/O口、串行通信口、定时/计数器、中断系统等,使得单片机可以与外部设备进行通信和控制。
实验6 单片机与PC机间的串行通信

实验6 单片机与PC机间的串行通信一、实验目的1、掌握电平转换器件RS-232的使用方法;2、掌握Proteus VSM虚拟终端(VITUAL TERMINAL)的使用;3、掌握单片机与PC机间的串行通信软硬件设计方法。
二、实验内容实现利用虚拟终端仿真单片机与PC机间的串行通信。
PC机先发送从键盘输入的数据,单片机接收后回发给PC机。
单片机同时将收到的30~39H间的数据转换成0~9的数字显示,其他字符的数据直接显示为其ASCII码。
单片机和PC机进行通信时,要求使用的波特率、传送的位数等相同。
要能够进行数据传送也必须首先测试双方是否可以可靠通信。
可在PC机和单片机上各编制非常短小的程序,具体可分成PC机串行口发送接收程序、单片机串行口发送程序和单片机串行口发送接收程序。
这三个程序能运行通过,即可证明串行口工作正常。
PC机串行口发送接收程序设置串行口为波特率9600、8位数据、1位停止位、无奇偶校验的简单设置。
从键盘接收的字符可从串行口发送出去,从串行口接收的字符在屏幕上显示。
通过让串行口发送线和接收线短接可测试微机串行口,通过让串行口和单片机系统相接,使用此程序可进一步测试单片机的串行通信状况。
具体程序用BASIC编制,简单易懂。
直接输入即可运行。
程序RS232.三、实验电路原理图图7-1 单片机与PC机间电路原理图四、实验步骤1、在PROTEUS中画好电路原理图。
2、串口模型属性设置串口模型属性设置为:波特率―4800;数据位―8;奇偶校验―无;停止位-1,如图7-2所示。
图7-2 串口模型属性设置3、虚拟终端属性设置PCT代表计算机发送数据,PCR用来监视PC接收到的数据,它们的属性设置完全一样,如图7-3所示。
SCMT和SCMR分别是单片机的数据发送和接收终端,用来监视单片机发送和接收的数据,它们的属性设置也完全一样,如图7-4所示。
单片机和PC机双方的波特率、数据位、停止位和检验位等要确保和串口模型的设置一样,并且同单片机程序中串口的设置一致。
单片机与PC机的串口通信

单片机与PC机的串口通信单片机以其体积小、价格低、抗干扰性好等特点,在现代控制系统中常用在操作现场进行数据采集,以及实现现场控制中.但是由于其数据存储容量和数据处理能力都较低,所以一般情况下要通过通信手段使它与PC机相连,把所采到的数据传送到PC机上,再在PC机上进行数据处理,充分发挥两者各自的优势.由于单片机输入、输出电平是TTL电平,而PC机配置的是RS-232标准串行接口,两者的串行规范不一致,因此需要完成单片机与PC机的串口通信原理的方案。
标签:单片机通信串行通信数据通信1 串行通信的基本知识1.1 数据通信的基本概念在实际应用中,计算机的CPU与外部设备之间经常要进行信息交换;一台计算机与其他计算机之间也往往要交换信息,这些信息交换都可称为通信。
通信的方式有串行和并行两种。
串行通信是指数据一份一位按顺序传送的通信方式。
其突出特点是只需少数几条线就可以在系统间交换信息,大大降低了传送成本.尤其适用于远距离通信。
但华行通信的速度比较低。
并行通信是指数据的各位同时进行传送的通信方式。
其优点是数据的传送速度快,缺点是传输线多,数据有多少位,就需要多少传输线。
一般适用于高速短距离的应用场合,典型的应用是计算机和打印机之间的连接。
1.2 串行通信的传送方向串行通信的传送方向有单工、半双工和全双工三种。
单工方式下只允许数据向一个方向传送,要么只能发送,要么只能接收;半双工方式下允许数据在一条传输线上往两个相反的方向传送,但不能同时传送,只能交替进行。
为了避免双方同时发送,需另加联络线或制定软件协议:全双工是指数据可以同时往两个相反的方向传送,需要两个独立的数据线分别传送两个相反方向的数据。
1.3 串行通信的同步方式串行通信中必须规定一种双方都认可的同步方式,以便接收端完成正确的接收。
串行通信有异步和同步两种基本方式。
1.3.1 异步通信:在异步通信中,数据按帧传送,用一位起始位(“0”电平)表示一个字符的开始,接着是5-8个数据位。
PIC单片机之RS232串口通信篇

PIC单片机之RS232串口通信篇大家是否觉得这样一个单片机系统似乎缺少点什么呢?不错,本期我们将介绍单片机与电脑通讯,使单片机与PC 机能够联机工作。
单片机除了需要控制外围器件完成特定的功能外,在很多应用中还要完成单片机和单片机之间、单片机和外围器件之间,以及单片机和微机之间的数据交换和指令的传输,这就是单片机的通信。
单片机的通信方式可以分为并行通信和串行通信。
并行方式传送一个字节的数据至少需要8 条数据线。
一般来讲单片机与打印机等外围设备连接时,除8条数据线外,还要状态、应答等控制线,当传送距离过远时电线要求过多,成本会增加很多。
单片机的串行通信方法较为多样,传统的串行通信方式是通过单片机自带的串行口进行RS232 方式的通信。
串行通信是以一位数据线传送数据的位信号,即使加上几条通信联络控制线,也比并行通信用的线少。
因此,串行通信适合远距离数据传送,如大型主机与其远程终端之间,处于两地的计算机之间,采用串行通信就非常经济。
串行通信又分为异步传送和同步传送两种基本方式。
异步通讯:异步通信传输的数据格式一般由1个起始位、7 个或8 个数据位、1 到2 个停止位和一个校验位组成。
它用一个起始位表示字符的开始,用停止位表示字符的结束。
其每帧的格式如图1 所示。
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。
用这种格式表示字符,则字符可以一个接一个地传送。
在异步通讯中,通信双方采用独立的时钟,起始位触发双方同步时钟。
在异步通信中CPU 与外设之间必须有几项约定,即每一帧位数,字符格式和波特率。
字符格式的规定是双方能够在对同一种0 和1 的数据串理解成同一种意义。
原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII 标准。
同步通讯:在同步通讯中所传输的数据格式是由多个数据组成,每帧有一个或两个同步字符作为起始位以触发同步时钟开始发送或接收。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PC 机与单片机通信(RS232 协议)目录:1、单片机串口通信的应用2、PC控制单片机IO口输出3、单片机控制实训指导及综合应用实例4、单片机给计算机发送数据:[实验任务]单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。
个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机系统接收后,用LED显示接收到的数据和向上位机发回原样数据。
[硬件电路图][实验原理]RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。
RS-232串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为20kBps。
RS-232协议以-5V-15V表示逻辑1;以+5V-15V 表示逻辑0。
我们是用MAX232芯片将RS232电平转换为TTL电平的。
一个完整的RS-232接口有22 根线,采用标准的25芯插头座。
我们在这里使用的是简化的9芯插头座。
注意我们在这里使用的晶振是11.0592M的,而不是12M。
因为波特率的设置需要11.0592M的。
“串口调试助手V2.1.exe”软件的使用很简单,只要将串口选择‘CMO1’波特率设置为‘9600’数据位为8 位。
打开串口(如果关闭)。
然后在发送区里输入要发送的数据,单击手动发送就将数据发送出去了。
注意,如果选中‘十六进制发送’那么发送的数据是十六进制的,必须输入两位数据。
如果没有选中,则发送的是ASCLL码,那么单片机控制的数码管将显示ASCLL码值。
[C语言源程序]#include "reg52.h" //包函8051 内部资源的定义unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容sbit gewei=P2^4; //个位选通定义sbit shiwei=P2^5; //十位选通定义sbit baiwei=P2^6; //百位选通定义unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10 void Delay(unsigned int tc) //延时程序{while( tc != 0 ){unsigned int i;for(i=0; i<100; i++);tc--;}}void LED() //LED显示接收到的数据(十进制){gewei=0; P0=table[dat%10]; Delay(10); gewei=1;shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1;baiwei=0; P0=table[dat/100]; Delay(10); baiwei=1;}///////功能:串口初始化,波特率9600,方式1/////////void Init_Com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////void main(){Init_Com();//串口初始化while(1){if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据SBUF赋与datRI=0; //RI 清零。
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)}LED(); //显示接收到的数据}}///这一个例子是以扫描的方式编写的,还可以以中断的方式编写,请大家思考//////[实验任务]PC控制单片机IO口输出#include "reg52.h" //包函8051 内部资源的定义unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容void Delay(unsigned int tc) //延时程序{while( tc != 0 ){unsigned int i;for(i=0; i<100; i++);tc--;}}///////功能:串口初始化,波特率9600,方式1/////////void Init_Com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////void main(){Init_Com();//串口初始化while(1){if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据SBUF赋与datif(dat==0x00) //如果PC发送十六进制00,单片机P1口全亮。
P1=0x00;else if(dat==0x01)P1=0x01;else if(dat==0x02)P1=0x02;else if(dat==0x03)else if(dat==0x04)P1=0x04;RI=0; //RI 清零。
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)}}}[实验任务]单片机控制实训指导及综合应用实例#include "reg52.h" //包函AT89S52 内部资源的定义(注视参看书160页)#define uchar unsigned char //宏定义uchar led [10]={0xbf,0x06,0xdb,0xcf,0x66,0xed,0xfd,0x87,0xff,0xef}; //数字1~10,字符串uchar led1[64]; //存储接收数据unsigned int i,j,t,k;sbit P32=P3^2;void scjs(void)interrupt 4 //定义中断{ES=0;// 使能串行口的中断k=1;while(1){RI=0;led1[k-1]=SBUF; //将接收数据送段码表k++;TH0=0x3c; //t0定时50sm内接收不到数据跳过接收TL0=0xb0;TR0=1;while(!RI){if(!TF0) goto FH;}}FH:TF0=0;//TF0不清零不能重新接收TR0=0;P32=1;for(j=1;j<k;j++){SBUF=led[j-1];//数据送回给pcwhile(!TI);TI=0;}P32=0;}{ES=1;SCON=0x50;for(i=0;i<t;i++);ES=0;SCON=0x00;}void main (void){int a,c;TMOD=0x21;TH1=0Xfd;TL1=0xfd;SCON=0x50;PCON=0x00;IE=0x90;TR1=1;k=1;P32=0;while(1){ES=0;SCON=0x00;for(a=0;a<=k+1/k*8;a++) {for(c=5;c>=0;c--){if(a+c<k+1/k*8+1){if(k==1)SBUF=led[a+c]; else SBUF=led1[a+c];}else SBUF=0x00;while(!TI);TI=0;}delay(39000);}}}#include "reg52.h" //包函8051 内部资源的定义#define uchar unsigned charsbit P3_2=P3^2;uchar zdzt=0x0c;uchar zsgw=0x02;uchar zsdw=0x00;uchar bs=0;uchar zqsbw=0;uchar zqssw=0;uchar zqsgw=0;uchar yxsj=0x11;uchar zs=20;int zqs=0;uchar zqsgzj=0x00;uchar zqsdzj=0x00;uchar zsscgw=0x1f;uchar zsscdw=0x00;uchar bzsj;uchar ztsj;void key (void);void keyprc();void binbcd();void disp();void delay();code uchar tab[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x39}; code uchar zssc[160]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77,0x7c,};void key(void){TR0=0;if(!(P2&0X01)){delay();while(!(P2&0X01));zdzt=0x0a;disp();}else if(!(P3&0X08))delay();while(!(P3&0X08));zdzt=0x0b;disp();}else if(!(P3&0X10)){delay();while(!(P3&0X10));zs=zs+1;keyprc();disp();}else if(!(P2&0X02)){delay();while(!(P2&0X02));zs=zs-1;keyprc();disp();}}void keyprc(){if(zs<20)zs=20;if(zs>99)zs=99;zsgw=zs/10;zsdw=zs%10;}void djzd(void) interrupt 1 {TH0=zssc[(zs-20)*2];TL0=zssc[(zs-20)*2+1]; if(zdzt==0x0a)yxsj=yxsj<<1|yxsj>>7; else if (zdzt==0x0b)yxsj=yxsj<<7|yxsj>>1; else if(zdzt==0x0c){P1=0xff;goto LP;P1=yxsj;bs++;if(bs==48){bs=0;zqs++;}LP:binbcd();disp();}void binbcd(){zqsbw=zqs/100; zqssw=zqs%100/10; zqsgw=zqs%10;}void disp(){TR1=0;ES=0;SCON=0x00; TMOD=0x01; SBUF=tab[zqsgw]; while(!TI);TI=0; SBUF=tab[zqssw]; while(!TI);TI=0; SBUF=tab[zqsbw]; while(!TI);TI=0; SBUF=tab[zsdw]; while(!TI);TI=0; SBUF=tab[zsgw]; while(!TI);TI=0; SBUF=tab[zdzt]; while(!TI);TI=0; TMOD=0x02;TH1=0Xfd;TL1=0xfd;SCON=0x50;TR1=1;ES=1;}void delay(){int k;for(k=0;k<1200;k++); }void sin()interrupt 4 {P1=0xff;ES=0;bzsj=SBUF;RI=0;while(!RI);RI=0;ztsj=SBUF;if(bzsj==0x30)zdzt=ztsj-0x37;if(bzsj==0x31){if(ztsj==0x49)zs++;else zs--;}ES=1;P3_2=0;keyprc();zqs=0;disp();}main(){TMOD=0x21;TH1=0xfd;TL1=0xfd;SCON=0x50; PCON=0x00;IE=0X92;PS=1;TR1=1;P3_2=0;TH0=0x1f;TL0=0x00;SP=0x60;disp();while(1){key();if(zdzt==0x0c){TR0=0;P1=0xff;}else TR0=1;}}单片机给计算机发送数据:#include "reg52.h" //包函8051 内部资源的定义unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容unsigned char fan;int i,j;void Delay() //延时程序{for(i=0; i<100; i++)for(j=0; j<100; j++);}void delays(){int k;for (k=0;k<1200;k++);}///////功能:串口初始化,波特率9600,方式1/////////void Init_Com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////void main(){Init_Com();//串口初始化while(1){if ( RI ) //扫描判断是否接收到数据,{dat = SBUF; //接收数据SBUF赋与datif(dat==0x30) //如果PC发送十六进制00,单片机P1口全亮。