PC机与单片机的通讯

发布者:幸福之星最新更新时间:2013-03-21 来源: dzsc关键字:PC机  单片机  波特率 手机看文章 扫描二维码
随时随地手机看文章
    大多数的电脑设备都具有RS-232C接口,尽管它的性能指标并非很好。在广泛的市场支持下依然常胜不衰。

  就使用而言,RS-232也确实有其优势:仅需3根线便可在两个数字设备之间全双工的传送数据。不过,RS-232C的控制要比使用并行通讯的打印机接口更难于控制。RS-232C使用了远较并行口更多的寄存器。这些寄存器用来实现串行数据的传送及RS-232C设备之间的握手与流量控制。本文将分别描述PC机及单片机MCS-51的串行通讯的原理及具体的软件设计。

  RS-232C介绍与PC硬件
  使用查询方法的串行通讯程序设计
  使用中断的串行通讯程序设计
  MCS-51串行通讯

  关于RS485

  (1)RS-232C介绍与PC硬件:

  RS-232C使用-3到-25V表示数字“1”,使用3V到25V表示数字“0”,RS-232C在空闲时处于逻辑“1”状态,在开始传送时,首先产生一起始位,起始位为一个宽度的逻辑“0”,紧随其后为所要传送的数据,所要传送的数据有最低位开始依此送出,并以一个结束位标志该字节传送结束,结束位为一个宽度的逻辑“1”状态。
  
  PC机一般使用8250或16550作为串行通讯的控制器,使用9针或25针的接插件将串行口的信号送出。

        该插座的信号定义如下:
        DB-25DB-9信号名称方向含 义
        23TXD输出数据发送端
        32RXD输入数据接收端
        47RTS输出请求发送(计算机要求发送数据)
        58CTS输入清除发送(MODEM准备接收数据)
        66DSR输入数据设备准备就绪
        75SG-信号地
        81DCD输入数据载波检测
        204DTR输出数据终端准备就绪(计算机)
        229RI输入响铃指示
 
  以上信号在通讯过程之中可能会被全部或部分使用,最简单的通讯仅需TXD及RXD及SG即可完成,其他的握手信号可以做适当处理或直接悬空,至于是否可以悬空这视乎你的通讯软件。比如说,如果使用DOS所提供的BIOS通讯驱动程序,那么,这些握手信号则需要做如下处理,因为BIOS的通讯驱动使用了这些信号。如果使用自己编写的串行驱动程序则可以完全不使用这些握手信号(详见下面有关章节)。

  PC机一般使用8250或16550的作为串行通讯控制器,8250及16550的管脚排列如下:

  8250(16550)的寄存器如下表所示:
      基地址读/写寄存器缩写注 释
      0Write-发送保持寄存器(DLAB=0)
      0Read-接收数据寄存器(DLAB=0)
      0Read/Write-波特率低八位(DLAB=1)
      1Read/WriteIER中断允许寄存器
      1Read/Write-波特率高八位(DLAB=1)
      2ReadIIR中断标识寄存器
      2WriteFCRFIFO控制寄存器
      3Read/WriteLCR线路控制寄存器
      4Read/WriteMCRMODEM控制寄存器
      5ReadLSR线路状态寄存器
      6ReadMSRMODEM状态寄存器
      7Read/Write-Scratch Register

      PC机支持1-4个串行口,即COM1-COM4,其基地址在BIOS数据区0000:0400-0000:0406中描述,对应地址分别为3F8/2F8/3E8/2E8,COM1及COM3使用PC机中断4,COM2及COM4使用中断3。[page]
  
  在上表中,8250共有12个寄存器,使用了8个地址,其中部分寄存器共用一个地址,由DLAB=0/1来区分,在DLAB=1用于设定通讯所需的波特率。常用的波特率参数见下表:
 
      速率(BPS)波特率高八位波特率低八位
  5009h00h
  30001h80h
  60000hC0h
  240000h30h
  480000h18h
  960000h0Ch
  1920000h06h
  3840000h03h
  5760000h02h
  11520000h01h

  以下几个表格为8250的寄存器的功能描述:
  中断允许寄存器(IER):
  位注 释
  7未使用
  6未使用
  5进入低功耗模式(16750)
  4进入睡眠模式(16750)
  3允许MODEM状态中断
  2允许接收线路状态中断
  1允许发送保持器空中断
  0允许接收数据就绪中断

  Bit0置1将允许接收到数据时产生中断,Bit1置1时允许发送保持寄存器空时产生中断,Bit2置1将在LSR变化时产生中断,相应的Bit3置位将在MSR变化时产生中断。
  中断识别寄存器(IIR):
  位注 释
  Bit6:7=00无FIFO
  Bit6:7=01允许FIFO,但不可用
  Bit6:7=11允许FIFO
  Bit5允许64字节FIFO(16750)
  Bit4未使用
  Bit316550超时中断
  Bit2:1=00MODEM状态中断(CTS/RI/DTR/DCD)
  Bit2:1=01发送保持寄存器空中断
  Bit2:1=10接收数据就绪中断
  Bit2:1=11接收线路状态中断
  Bit0=0有中断产生
  Bit0=1无中断产生

  IIR为只读寄存器,Bit6:7用来指示FIFO的状态,均为0时则无FIFO,此时为8250或16450芯片,为01时有FIFO但不可以使用,为11时FIFO有效并可以正常工作。Bit3用来指示超时中断(16550/16750)。
  
  Bit0用来指示是否有中断发生,Bit1:2标识具体的中断类型,这些中断具有不同的优先级别,其中LSR中断级别最高,其次是数据就绪中断,然后是发送寄存器空中断,而MSR中断级别最低。
  FIFO控制寄存器(FCR):
  位注 释
  Bit7:6=001Byte产生中断
  Bit7:6=014Byte产生中断
  Bit7:6=108Byte产生中断
  Bit7:6=1114Byte产生中断
  Bit5允许64字节FIFO
  Bit4未使用
  Bit3DMA模式选择
  Bit2清除发送FIFO
  Bit1清除接收FIFO
  Bit0允许FIFO

  FCR可写但不可以读,该寄存器用来控制16550或16750的FIFO寄存器。Bit0置1将允许发送/接收的FIFO工作,Bit1和Bit2置1分别用来清除接收及发送FIFO。清除接收及发送FIFO并不影响移位寄存器。Bit1:2可自行复位,因此无需使用软件对其清零。Bit6:7用来设定产生中断的级别,发送/接收中断将在发送/接收到对应字节数时产生。
  线路控制寄存器(LCR):
  位注 释
  Bit7=1允许访问波特率因子寄存器
  Bit7=0允许访问接收/发送及中断允许寄存器
  Bit6设置间断,0-禁止,1-设置
  Bit5:3=XX0无校验
  Bit5:3=001奇校验
  Bit5:3=011偶校验
  Bit5:3=101奇偶保持为1
  Bit5:3=111奇偶保持为0
  Bit2=01位停止位
  Bit2=12位停止位(数据位6-8位),1.5位停止位(5位数据位)
  Bit1:0=005位数据位
  Bit1:0=016位数据位
  Bit1:0=107位数据位
  Bit1:0=118位数据位[page]

  LCR用来设定通讯所需的一些基本参数。Bit7为1指定波特率因子寄存器有效,为0则指定发送/接收及IER有效。Bit6置1会将发送端置为0,这将会使接收端产生一个“间断”。Bit3-5用来设定是否使用奇偶校验以及奇偶校验的类型,Bit3=1时使用校验,Bit4为0则为奇校验,1为偶校验,而Bit5则强制校验为1或0,并由Bit4决定具体为0或1。Bit2用来设定停止位的长度,0表示1位停止位,为1则根据数据长度的不同使用1.5-2位停止位。Bit0:1用来设定数据长度。
  MODEM控制寄存器(MCR):
  位注 释
  Bit7未使用
  Bit6未使用
  Bit5自动流量控制(仅16750)
  Bit4环路测试
  Bit3辅助输出2
  Bit2辅助输出1
  Bit1设置RTS
  Bit0设置DSR

  MCR寄存器可读可写,Bit4=1进入环路测试模式。Bit3-0用来控制对应的管脚。
  线路状态寄存器(LSR):
  位注 释
  Bit7FIFO中接收数据错误
  Bit6发送移位寄存器空
  Bit5发送保持寄存器空
  Bit4间断
  Bit3帧格式错
  Bit2奇偶错
  Bit1超越错
  Bit0接收数据就绪

  LSR为只读寄存器,当发生错误时Bit7为1,Bit6为1时标示发送保持及发送移位寄存器均空,Bit5为1时标示仅发送保持寄存器空,此时,可以由软件发送下一数据。当线路状态为0时Bit4置位为1,帧格式错时Bit3置位为1,奇偶错和超越错分别将Bit2及Bit1置位为1。Bit0置位为1表示接收数据就绪。

  MODEM状态寄存器(MSR):
位注 释
  Bit7载波检测
  Bit6响铃指示
  Bit5DSR准备就绪
  Bit4CTS有效
  Bit3DCD已改变
  Bit2RI已改变
  Bit1DSR已改变
  Bit0CTS已改变

  MSR寄存器的高4位分别对应MODEM的状态线,低4位表示MODEM的状态线是否发生了变化。

  以上我们详细介绍了PC机的串行通讯硬件环境,以下将分别给出使用查询及中断驱动的方法编写的串行口驱动程序。这些程序仅使用RXD/TXD,无需硬件握手信号。

关键字:PC机  单片机  波特率 引用地址:PC机与单片机的通讯

上一篇:怎样用单片机驱动LED数码管显示
下一篇:单片机初学者不好掌握的概念

推荐阅读最新更新时间:2024-03-16 13:20

注释非常详细的51单片机IIC源程序
自己写的IIC程序,因为初学,还是有借鉴的地方,但是所有程序均为手打,每一行都有详细的注释 单片机源程序如下: #include reg52.h #include iic.h sbit IIC_SDA=P2^6; //声明IIC总线的数据线接在单片机的P2.6端口。 sbit IIC_SCL=P2^7; //声明IIC总线的时钟线接在单片机的P2.5端口。 //void delay(unsigned int t) //{//延时函数 // while(t){t--;}; //延时循环计数 //} //-----------------------------------------
[单片机]
51单片机开发环境搭建方法
前言 上至航天,下至儿童玩具,凡事沾一点智能的东西,都离不开单片机的身影......,本文开始,我们学习单片机的相关知识,我们采用的是由普中科技开发的A7开发板,该开发板搭载了STC89C52或STC89C516两块芯片,这款单片机属于8051系列和STC8系列的单片机,51单片机作为入门级单片机不仅在教学实验中应用广泛,在实际项目中应用亦是十分广泛。 一、基础知识 1.什么是单片机? 单片机是一个单片微型计算机,由中央处理器CPU、数据存储器RAM、程序存储器ROM、输入/输出设备(键盘、显示屏等)等集成到一块芯片上组成。 2.单片机能做什么? 前言中开篇便比较好的阐释了单片机的功能,凡是沾点智能的影子的东西,都离不开单片机
[单片机]
51<font color='red'>单片机</font>开发环境搭建方法
MSP430单片机开发环境搭建攻略
许多初学MSP430单片机的童鞋,在购买开发板之后不知道如何建立工程,编写代码并调试单片机,下面,小编将图文介绍MSP430开发环境搭建。 一、安装IAR IDE 首先安装IAR for MSP430 编译器,可以到IAR官网下载;可以选择试用版本亦或是下载后破解软件; 二、建立工程 打开IAR for MSP430软件,点击Project/Create New Project...在弹出菜单中选择C/main点击确定后,便创建好工程,可在左边工程管理器看到,在main.c中便可以编写代码; 三、设置调试(Debug)参数 在建立工程并编写代码后,在调试之前需要设置基本信息,如下图所示,需要设置
[单片机]
MSP430<font color='red'>单片机</font>开发环境搭建攻略
51单片机和OLED仿真 芯片SSD1306
用的是7Pin的OLED,就那个宝买的那种。用的是不是中景园的程序我就不知道了。芯片应该是用SSD1306,但是用仿真里面的SSD1306总是不对。我随便试了试SSD1308到时对了! 单片机源程序如下 #include xianshispi.h #include oledfont.h void delay_ms(unsigned int ms) { unsigned int a; while(ms) { a=1800; while(a--); ms--; } return; } void OLED_WR_
[单片机]
51<font color='red'>单片机</font>和OLED仿真 芯片SSD1306
MCS-51单片机汇编语言:算数运算指令有哪些?
加法指令(Addtion) ADD A, Rn ; A←(A)+(Rn) ADD A, @Ri ;A←(A)+((Ri)) ADD A, direct ;A←(A)+(direct) ADD A, #data ;A←(A)+#data 带进位加法指令 ADDC A, Rn ; A←(A)+(Rn)+(Cy) ADDC A, @Ri ;A←(A)+((Ri )) +(Cy) ADDC A, direct ;A←(A)+(direct) +(Cy) ADDC A, #data ;A←(A)+#data +(Cy) 加1指令 INC A
[单片机]
单片机各种IO口的类型详细分析
集电极开路 输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路;左边的三极管为反相之用,使输入为 0 时,输出也为 0 。 对于图 1,当左端的输入为 0 时,前面的三极管截止,所以5v电源通过1k电阻加到右边的三极管上,右边的三极管导通;当左端的输入为 1 时,前面的三极管导通,而后面的三极管截止。 下载 (46.02 KB) 2011-4-8 10:59 我们将图1简化成图2的样子,很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载到地,那么输出端的电平就被这个负载拉到低电平了,
[单片机]
串口通信-数据发送到PC加1后接收到单片机在数码管上显示
本程序的完整原理图下载: http://www.51hei.com/f/ks51.pdf /** *功能:串口通信-数据发送到PC加一后接收到单片机在数码管上显示 *时间:2014年3月2日10:04:07 *作者:寒竹子 *备注:波特率:19200bps *总结:串口通信时需要发送和接收数据时可以用到串口中断,在中断中进行数据的发送和接收, * 数码管显示时必须要放在while (1)中,只有这样才可以正常显示数字! **/ #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; //数码管段选和位选声明 sbit WELA =
[单片机]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_led] LED配置和使用
LED 本文将介绍NRF51,如何点亮LED灯。 官方手册下载: https://infocenter.nordicsemi.com/pdf/nRF51802_PS_v1.2.pdf https://infocenter.nordicsemi.com/pdf/nRF51822_PS_v3.4.pdf https://infocenter.nordicsemi.com/pdf/nRF51422_PS_v3.3.pdf /******************************************************************************** * @file bsp_led.c * @a
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved