当前位置:文档之家› 巧用单片机的奇偶校验位

巧用单片机的奇偶校验位

巧用8051单片机的奇偶校验位() 南京东南大学电子工程系 210096 孙洪军() 南京理工大学化工学院 210094孙秀云周学铁摘根连线即可达到 3要: 一种微机间的串行通信方法, 只需用 R XD、T XD 和GN D115200bp s 的传输速率。

中断关键词: 串行通信语言 8250 IN S C送出去。

IN S 8250接收由 R XD 来的数据后, 经过串?在工程设计中, 经常会遇到近距离的微机间数据交换问题, 通常的解决方法是利用微机的异步串行通并信适配器, 通过把2台微机的串行通信口相连来实现转换后, 放在中供读取。

RBR C PU 表1 IN S 8250中可访问的寄存器据交换。

在程序的设计上往往利用或数 B IO S DO S 的功 1 2 能调用来实现对适配器的初始化、状态检测、数COM COM 方向寄存器名称口地址口地址据的发 3828输出发送器保持寄存器() F H F H T HR 送和接收等。

这种方法实现的串行通信程序, 设计起来 3828输入接收器缓冲寄存器() F H F H RBR 相对简单, 但是在连线上要复杂一些, 除了通信线外, 3828输出除数寄存器( 低位) () F H F H D R 还需要握手信号线, 通信速率最高只可达到9600。

bp s3929输出除数寄存器( 高位) () F H F H D R 而在实践中, 人们往往更希望采用3线通信形式, 只采 3929输出中断允许寄存器( ) F H F H IER 用、、根线, 通信速率也希望能达到更 3R XDT XDGN D 32输入中断识别寄存器( ) FA H FA H IIR 高水平。

通过对微机的异步串行通信适配器的研究发32输出线路控制寄存器() 现, 完全可以避开对或的功能调用, 通过 FBH FBH L CR B IO S DO S 调制解调器控制寄存器直接访问其寄存器来实现对适配器的初始化、状态检 3FCH 2FCH 输出 ()M CR 测、数据的发送和接收等功能, 可以达到115200的 bp s 32输入线路状态寄存器()FD H FD H L SR 传输速率, 再通过对中断控制器8259的编程, 采用中 A 调制解调器状态寄存器 3F EH 2F EH 输入断方式接收数据, 可以可靠地实现高速3线串行通信。

()M SR1 异步串行通信适配器的工作原理微机上通常有2个异步串行通信适配器, 分别为D R 中存放的数据用来决定数据传输时的波特主适配器和辅适配器, 适配器和外部的通信连接通过率, 其计算公式如下: () = 基准时钟频率?( 163 波 D R 9芯特率) , 基准时钟频率为181432, 那么可以计算出M H z 或25芯的型插座, 即微机的 1 和 2 口。

D COM COM 当D R 中放入最小值1时, 最高波特率为115200bp s。

适配器的关键部件是通用异步收发器 () U A R T 主要用于指定通信时的数据格式, 的各 L CR L CR IN S 位定义如图1。

8250, 要设计高速3线串行通信程序, 就要对 IN S 8250 b 7 b 6 b 5 b4 b 3 b 2 b 1 b 0 的原理和结构有所了解。

10L CR DL A B SB SP E P S P EN STB W L S W L S 可接收来自的并行字符数据, 然后 8250IN S C PU 将其转换为连续的串行数据流发送出去, 也可以接收图1 线路控制寄存器L CR 串行数据流, 并将其转换为并行数据再提供给。

C PU 图1中、用于选择数据位数, 可选择5, 8位b1b 0 可工作在全双工的形式下, 即可同时发送和 8250IN S 数据位。

位数和的关系为: 数据位数= 5+ 。

b1 b0 b 1b0b2 接收数据而不会发生冲突。

的内部有10个寄 8250IN S 选择停止位个数: = 0, 1位停止位; = 1, 2位停止b 2 b2 存器, 分别用于通信参数的设置、对线及的 M OD EM 位。

选择有无奇偶校验: = 1, 有奇偶校验; = 0, b3 b 3 b 3 状态访问、数据的发送和接收及中断管理等功能。

其地无奇偶校验。

在 = 1时, 选择校验方式: = 1, 为b3 b4 b4 址和名称如表1。

偶校验;和共用1个地址, 但中数据只T H R RBR T H R = 0为奇校验; 选择是否在串行数据格式中的奇偶 b b 4 5 能写入, 中数据只能读出, 以此加以区分。

RBR C PU 校验位和停止位之间插入奇偶标志位: = 1, 附加1b 5 把要通过线发送出的数据放入中, T XD T H R IN S 位 8250自动读出中的数据, 进行并串转换, 然?T H R 后1位位发奇偶标志位; b5 = 0, 不附加。

b 6 = 1, 串行数据输出被强迫置0; 在正常的数据发送和接收时, 置0。

在寻址b 6 《微型机与应用》1997 年第 12 期除数寄存器前, 把置1, 否则置0。

b7— 45 — 1994-2013 China Academic Journal Electronic Publishing House. All rights reserved. ( ) ISR 时, 有2点需要设计串行通信的中断服务程序 L SR 提供线路的状态, 各位含义如图2。

注 b b b b b b b b 7654 3210 意: 一是在中不要使用的功能调用, 以避免 ISR DO S IIR 0 TSRE THRE B I FE PE OE DR 由于重入造成系统的崩溃; 二是尽可能由较DO S ISR 少指令组成, 执行时间尽可能短, 对数据的进一步处理可放在主程序中进行, 以免由于中断嵌套而发生错误。

发送移 THR 终止识接收格接收奇接收重 RBR 位器空空别指示式错偶错叠错满根据上述原则设计出的通信 ISR , 在传输速率达到图2 线路状态寄存器L SR 115200时, 仍能准确无误地接收数据, 不发生漏收 bp s 具有很强的中断能力, 共有4级中断, IN S 8250数据的现象。

按 3 程序设计优先级由高到低排列依次是: 接收出错中断、满 RBR 微机上常用的编译器为 10, 它提供 2C TU RBO C 中断、空中断、状态改变中断。

如果 T H R M OD EM 丰富的库函数, 支持对 ?口的访问及对中断服务程 IO 处于中断工作方式, 则指出有无待处理的8250IN SIIR 序的设计。

利用以上知识, 可以很方便地用语言设C 中断及其类型, 并屏蔽较低优先权的中断。

中各位 IIR 计出通信程序。

通信程序包括3部分, 初始化子程序、意义如图3。

b b b b b b b b 7 6 5 4 3210数据发送子程序和中断数据接收子程序。

在初始化子程 IIR 0 0 0 0 0 ID 2 ID 1 IP 序中应做到以下几点:把中断数据接收子程序的入口地址装入中断向当前中断未决中优先级断指示量中。

图3 中断识别寄存器IIR 对 8250初始化, 设置波特率、数据位、奇偶IN S IER 控制4个中断的允许或屏蔽。

如不用中断, 校验、停止位、中断方式。

则初始化8259的中断屏蔽寄存器, 开放串行通 A 把这个寄存器各位均置0; 如果允许接收缓冲器满中信中断。

断, 置1; 允许发送器保持寄存器空中断, 置1; 允b0 b 1 接收出错中断, b 2 置1; 允许M OD , 状态改变中断数据发送子程序采用直接向中写入数据的 T H R 许EM 方法, 要注意的是在写入数据前要先读判断 , L SR 置1。

b 3 由于在短距离内通信, 无需 M OD EM 对M SR、是否已空, 在已空的情况下才可送数据, 否T H R T H R 2个寄存器的各位意义就不再介绍。

M CR 则将出错。

在中断数据接收子程序中, 首先从中直接读 RBR 2 中断机制的引发取数据至内存中所设的环形队列中, 再向8259发出 A 由于采用高至115200bp s 的速率进行通信, 又没中断结束命令。

主程序中欲处理接收来的数据, 只需访有硬件握手信号, 接收方如何保证对数据的正确接收问环形队列中的数据即可。

例如: 利用 1口来中断 COM 就成了一个重要的问题。

采用查询方式来接收数据肯接收串行数据, 通信速率为115200, 无奇偶校验, 1 bp s位停止位, 8位数据位。

各个子程序分别如下: 定是行不通的, 一方面, 由于不停地对线路状态进行检测, 大大降低了的工作效率; 另一方面, 由于没有 C PU ( )vo id in it ia te COM 1 vo id ?3 初始化子程序 3 ? { 握手信号, 发送方只是“盲发”, 采用查询方式难免不漏 ? 关中断 3 ( ) ;d isab le ?3 收数据。

唯一可靠的方法是采用中断方式接收数据。

除重设中断向量 3 ? ( ) se tvec t 0x0c, rece ive COM 1; ?3 了对8250设置成合适的中断工作方式, 对微机的 ?3 IN S ( 03, 080) ; 寻址除数寄存器3 ? o u tpo r tb x fb x ?3 ( 038, 001) ; o u tpo r tb x fx 低位置13 ? 可编程中断控制器8259也要进行正确的设置。

A ( 039, 000) ; ?3 o u tpo r tb x fx 高位置0 115200bp s 3 ? 8259可以管理来自外设的8个各自独立的中A 3 数据格式为无奇偶校验, 1位停 ?( 03, 003) ;o u tpo r tb x fb x 止位, 8位数据位3 ?断申请信号, 分别为 , 其中、07, 4IRQ IRQ IRQ IRQ ( ) ?3 只允许 RBR 满中断 3 ? o u tpo r tb 0x 3f9, 0x 01; 3 分 ( o u tpo r tb 0x 21, ( ) ) inpo r tb 0x21&0xef ; ?3 8259A 允许别保留给 COM 1 和 COM 2 中断类型号分别为0CH、 COM 1口中断3 3 开中断3 ( ) ??enab le ; ?0。

8259有1 个中断屏蔽寄存器 ( ) , 地址BHA IM R } 为 () vo id send COM 1 un signed ch a r da ta; ?3 数据发送子程 21, 它的位0, 位7对应 0, 7, 可以通过设H IRQ IRQ 序3 ? { 置这个寄存器的任一位为0或为1来控制任1中断( ! ( 03) 020) ;w h ile inpo r tb xfd&x 源的中 ?3 访问L SR , 判断 T H R 是否为空3 ? 断允许或禁止。

相关主题