当前位置:首页 > 单片机 > 单片机
[导读]通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。测试方法:可以将串口调试助手的发送框写上 95 10 20 25,

通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。

测试方法:可以将串口调试助手的发送框写上 95 10 20 25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。

//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收

//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的

#i nclude

#i nclude

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3;

bit read_flag= 0 ;

void init_serialcomm( void )

{

SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr

TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload

PCON |= 0x80 ; //SMOD=1;

TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz

IE |= 0x90 ; //Enable Serial Interrupt

TR1 = 1 ; // timer 1 run

// TI=1;

}

//向串口发送一个字符

void send_char_com( unsigned char ch)

{

SBUF=ch;

while (TI== 0 );

TI= 0 ;

}

//向串口发送一个字符串,strlen为该字符串长度

void send_string_com( unsigned char *str, unsigned int strlen)

{

unsigned int k= 0 ;

do

{

send_char_com(*(str + k));

k++;

} while (k < strlen);

}

//串口接收中断函数

void serial () interrupt 4 using 3

{

if (RI)

{

unsigned char ch;

RI = 0 ;

ch=SBUF;

if (ch> 127 )

{

count3= 0 ;

inbuf1[count3]=ch;

checksum= ch- 128 ;

}

else

{

count3++;

inbuf1[count3]=ch;

checksum ^= ch;

if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )

{

read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,

//就置位取数标志

}

}

}

}

main()

{

init_serialcomm(); //初始化串口

while ( 1 )

{

if (read_flag) //如果取数标志已置位,就将读到的数从串口发出

{

read_flag= 0 ; //取数标志清0

send_string_com(inbuf1,INBUF_LEN);

}

}

}

串行通信虽然有其自身优点:如适合长距离通信,有一定的纠错能力等,但并行通信在短距离(数米范围内)传输过程中的优点是显而易见的。首先串行通信时要设置串口数据,如:串口号(Com1、Com2或者其他串口)、波特率、数据位数、停止位、校验位等等。而且单片机与PC机的串口数据必须一一对等,否则不能传输。而并行传输时,无需上述过程。其次,PC机的串口电平值为+12V~-12V,单片机是TTL电平(0~+5V),两者必须要经过电平转换芯片进行电平间的转换。而进行并行传输时,由于双方都是TTL电平,所以PC的并口可以与单片机或其他芯片直接相连;另外,串行传输速度慢,每次只能传送一位,而并行每次可以传送8位,速度上的差异显而易见。

而对于单片机,串口(UART)是最常用的端口,尤其对于存在两个或多个串口的单片机来说,充分利用串口进行通信是非常重要的。

输出输入接口的扩展

单片机串口实现"并行"通信,其原理就是将PC机传过来的并行数据转换成串行数据,送入单片机的串口再由其进行相应处理。实质上就是一个数据串-并、并-串转换的过程。

PC的并口为一个标准的25针插座,包含一个八位二进制数据端口(地址为378H),即第2脚到第9脚;一个输入控制端口(地址为379H),即第15脚、13脚、12脚、10脚、11脚,其另外低三位无定义;一个输出控制口(地址为37AH),即第1脚、14脚、16脚、17脚,其另外高四位无定义。由此可见后面两个端口都不是完全的8位。

输出接口电路扩展

这里使用常用的移位寄存器74LS164与单片机的RXD口构成输出接口电路。

双列直插式74LS164引脚定义如图1所示。

其中:QA~QH为并行输出的数据,送入PC机并口378H端口(接收数据的8个数据位);单片机串口输出的数据从AB输入;CLR信号用于清除输出数据(通常用在移位完成时);内部数据移位依靠时钟CLK信号上升沿(由单片机TX提供)控制。

输入接口电路扩展

使用常用的移位寄存器74LS165与单片机的RXD口构成输入接口电路。

双列直插式74LS165引脚定义如图2所示。

其中:A~H为并行输入的数据,接PC机并口378H端口(接收数据的8个数据位);单片机串口接收的数据(RXD端口)从QH输入;SH/LD信号用于重新装载数据(通常用在数据完全移出后);SER是用于填充数据移出后的空位的逻辑电平信号(逻辑"1"或"0");而数据是否移动由CLK INH和CLK联合控制;内部数据移位依靠时钟CLK信号(仍由单片机的TXD提供)上升沿控制。

其他软硬件准备工作

输入输出控制端口的连接。将单片机的P3.4、P3.5口分别与PC并口的第15脚、第16脚相连。这样在进行数据通信时,两者的握手信号传输就解决了:当并口的第16脚置高电平时,用来通知单片机接收PC机已准备就绪的数据,单片机收到以后就可以进行相应控制,接收数据;当单片机接收完数据时,会置P3.4为高电平并被379H的第15脚接收,于是PC机准备发送下一个数据……单片机向PC机发送数据时,情况与此类似,由P3.4发送信号给PC机,而由P3.5接收PC机发送过来的信号。

软件方面,由于是用串口进行"并行"通信,因此就不能将串口的工作方式设置为方式0(移位寄存器输入/输出方式)以外的其他方式。还要注意此时串口的波特率固定为单片机外接晶振频率的1/12。串行数据通过RXD输入/输出,TXD用于发送控制输入输出数据移位的时钟脉冲。收发的数据为8位,低位在前。

设计实例

由于这一并行通信实现方法非常简单,所以对于有一定单片机编程经验的开发人员来说,只要硬件电路确定下来,软件方面的问题就非常容易。图3为电路原理图。

需要说明的是:1、单片机与PC机并口要共地;2、由于并行通信存在应答信号(本图中由单片机的P3.4、P3.5实现此功能),所以不会出现RXD端口数据混乱的情况。

小结:

现在单片机的应用越来越广泛,单片机与PC之间的通信是一个非常重要的应用。如果单纯的从实现单片机与PC的并行通信的角度来说,该实现方法并不是最简单的。最简单的方法是将PC的并口对应引脚与单片机的P1口和P3口直接相连,然后软件上实现。本文的目的是充分利用单片机的串口资源与PC机进行通信。

扩展阅读:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着科技的不断发展,计算机与嵌入式系统之间的通信已成为现代电子技术的重要组成部分。PC机与单片机之间的通信关系是其中的重要一环。本文将详细探讨PC机与单片机之间的通信关系,包括串口通信、并口通信、USB通信等,并分析它们...

关键字: 计算机 嵌入式系统 PC机

USB是应用在PC机上的一种接口技术,真正的即插即用,英文全称是Universal Serial Bus,USB就是简写,中文叫通用串行总线。最早出现在1995年,伴随着奔腾机发展而来。

关键字: USB PC机 接口技术

随着电子信息技术的快速发展,串行通信在各种应用中得到了广泛的应用。其中,51单片机作为一种常见的嵌入式系统,具有低功耗、高性能、易于编程等特点,常用于各种自动化控制、数据采集等系统中。而PC机具有强大的数据处理能力和丰富...

关键字: 51单片机 PC机 串行通信

数字信号处理是将信号以数字方式表示并处理的理论和技术。数字信号处理与模拟信号处理是信号处理的子集。数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波。因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通...

关键字: DSP PC机 C语言

平时使用串口打印出现乱码的,绝大部分原因是串口波特率没对。那么,我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。什么是波特率、比特率?比特率(Bitrate)表示每秒钟传输的二进制位数,单位为比特每秒...

关键字: 串口通讯

摘要:给出了采用STC89C52单片机进行自适应控制来控制PWM波,进而控制电炉的加热,以实现温度控制的设计方法。这套温度测控系统弥补了传统PID控制结构在特定场合下性能下降的不足。与传统的系统相比,该电路结构简单,测温...

关键字: 温度控制 自适应 PID PC机

嵌入式开发中,UART串口是最常见的一种通信接口,你知道为啥串口这么常见吗?本文就带你深入了解串口最底层的本质内容。一、什么是串口通讯?串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行...

关键字: 单片机串口

嵌入式开发中,UART串口是最常见的一种通信接口,你知道为啥串口这么常见吗?本文就带你深入了解串口最底层的本质内容。一、什么是串口通讯?串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行...

关键字: 单片机串口

USR-N580是有人物联网新开发的一款工业级8串口服务器,8串口独立工作、互不影响;双网口设计,支持交换机功能,可级联,有效扩展串口数量;采用Arm Cortex-M7方案,数据传输速度快且稳定可靠;内部集成TCP/I...

关键字: 物联网 RS485 串口通讯 串口 串口服务器 交换机

点击上方嵌入式开发圈 记得关注我们哦! 【134.1   应用层的“半双工”和“全双工”。】        应用层的“半双工”。主机与从机在程序应用层采用“一问一答”的查询模式,主机是主动方,从机是被动方,主机问一句从机...

关键字: 应用层 串口通讯 双机
关闭
关闭