Linux PC和51系列单片机串行通信的设计

[09-12 18:18:30]   来源:http://www.88dzw.com  单片机学习   阅读:8340

文章摘要:初始化函数如下:初始化以后就开始发送和接收数据,先将一个字符串发送给单片机,单片机接收到数据后,将数据返回给上位机。但需要注意的是,由于上位机速度比单片机快得多,一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而丢失数据,发送过后,还需等待一段时间,使单片机将数据完全发送到上位机后,再进行读取。 2.2直接读写串口硬件端口的方法在使用这个方法的时候,必须对串口通信的硬件原理有一些了解。PC机的串口是由通用异步收发器8250UART(或16550)为核心构成的,寄存器基地址分别是0x3f8(COM1)和0x2f8(COM2),还有其他的一些用于控制的寄存器。有很多寄存器是与Modem相

Linux PC和51系列单片机串行通信的设计,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

  初始化函数如下:

  

  

  初始化以后就开始发送和接收数据,先将一个字符串发送给单片机,单片机接收到数据后,将数据返回给上位机。但需要注意的是,由于上位机速度比单片机快得多,一次不能发送过多的数据,否则极有可能使发送缓冲区溢出而丢失数据,发送过后,还需等待一段时间,使单片机将数据完全发送到上位机后,再进行读取。

  

    2.2 直接读写串口硬件端口的方法

  在使用这个方法的时候,必须对串口通信的硬件原理有一些了解。PC机的串口是由通用异步收发器8250UART(或16550)为核心构成的,寄存器基地址分别是0x3f8(COM1)和0x2f8(COM2),还有其他的一些用于控制的寄存器。有很多寄存器是与Modem相关的,而在使用三线制进行通信时用不到,只用关心与通信相关的寄存器,比起使用为通用功能编写的串口设备驱动程序来,直接读写相关寄存器效率更高。

  

  初始化后,就可以进行数据的收发了,接受数据之前必须保证接收数据就绪,这可以通过0x2fd的D0来判断,发送数据之前必须保证发送寄存器为空,这可以通过0x2fd的D5来判断,代码如下:

  

  3 结语

  实验表明,此系统采用的2种方法都完全实现了LinuxPC机与单片机之间点对点的通信,方法简单可靠,基本上在需要用到PC机与单片机串行通信的场合均可采用此种方法。随着近年来Linux在国内应用范围的日益壮大,在工业控制、数据采集等领域也必将越来越多的采用Linux,本文可以算作是一个有益的尝试。当然在实际应用中还需要考虑一些问题,比如进行出错处理的问题,可以在一个要发送的字符串后再发送一个校验和,当收到返回的校验和与发送的校验和不一致时再进行重发,再比如所采用的RS232C传输距离很短,并且抗干扰能力很差,这时需要将总线转换成差分传输的RS485/RS422。另外,稍加改进,就可实现PC机与多片51单片机的串行通信,这时由于共用一条总线,必须给每个单片机分配一个地址,然后由PC机对总线进行仲裁,只有获得总线使用权的单片机才能与上位机进行通信,这里不再赘述。

  总之,本文只是为Linux PC和单片机串行通信提供了一个典型的范例,要应用到实际的项目中去,还需要根据实际的情况具体考虑,灵活应用,最终才能形成一个可靠的基于Linux平台的系统。


上一页  [1] [2] 


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行