![]() |
|
||||||||||||||
| | 网站首页 | 文章中心 | 下载中心 | ARM技术交流社区 | 供求信息 | 在线咨询 | 数据手册 | | ||
|
||
|
|||||
| 基于80C196KC微处理器的高速串行通讯 | |||||
作者:佚名 文章来源:不详 点击数: 更新时间:2006-11-3 ![]() |
|||||
摘 要: 讨论了基于80C196KC微处理器串行通讯口的硬件设计、波特率设置和软件开发的技术途径,并简要介绍了串行通讯在某型雷达仿真平台中的应用,其主要性能和可靠性达到了系统的设计要求。 关键词: 微处理器 串行通讯 波特率设置 Intel公司的MCS-96系列微处理器是目前性能最强、应用最广泛的16位微处理器。近年来,在国内各个领域中,特别是航天、航空等工业领域应用相当广泛。80C196KC是lntel公司九十年代初期推出的性能较强的第三代CMOS芯片,其数据/地址线均为16位,使用MCS-96家族共享的指令系统,除了8X96已包括的一些外设(如时钟发生器、1/O端口、A/D转换、PWM输出、串行口、定时/计数器、监视定时器WATCHDOG、高速输入/输出器等)外,还集成了先进的外设事务服务器(PTS)和事件处理器阵列(EPA)。80C196KC在串行口功能上除了支持异步串行口之外,还增加了同步串行口,可以支持多种标准同步串行传输协议。 1 80C196KC串行通信口工作原理 1.1 串行口的通信模式 80C196KC具有4种通信模式:三种异步模式,一种同步模式。 模式0:称为同步模式,常用于I/O扩展,实现并-串输入或者串-并输出,它不能直接同时发送或接收数据,需要外接双向缓冲器。 模式1:称为标准异步通信模式,是最常用的模式。在这种模式下,串行通信的每帧数据是由10位组成的,即1位起始位,8位数据位,1位停止位。该模式下TXD用来发送数据,RXD用来接收数据,可用中断和查询两种方式进行控制:当一个数据帧最后一个数据位发送完毕后,发送中断的标志TI置位;而一个数据帧的最后一个数据位被接收后,接收中断的标志RI置位。 模式2:称为异步第9位辩识通信模式。在这种模式下,每帧数据由11位构成:1位起始位,8位数据位,1位可编程数据位,1位停止位。 模式3:称为带校验位的通信模式。该模式的帧格式与模式2相同,只是在串行口控制寄存器(SP_CON)的PEN位被置位时,可编程数据位作为奇偶校验位。模式2和模式3通常互相配合,用于多机通信。 1.2 串行口控制 80C196KC串行口的控制由串行口控制/状态寄存器(SP-CON/SP-STAT)实现,其定义见图2。数据的发送或接收都通过访问串行口数据缓冲器SBUF,这里需要指出的是80C196KC发送寄存器SBUF(TR)和接收寄存器SBUF(PX)在物理上是分开的两个寄存器,因此串行口在异步模式下是全双工工作的。由图2 在所有异步模式下(模式1~3)下,向SBUF写入数据就会自动启动一次发送过程。在发送停止位之前,保持在SBUF中的新数据应保持不变。若接收允许位(REN)已经被置1,则RXD脚上出现的下降沿就会启动一次接收过程。 在80C196KC中,TXD和P2.0是共用一个引脚的,对I/O控制器1的位5置1才能选通TXD功能。RXD和P2.1也是共用引脚,但不受IOC影响,而是受SP_CON的REN位控制。 1.3 串行通信波特率的计算 在80C196KC中波特率寄存器的内容决定了串行口通信的波特率,向该寄存器写入数据时必须用连续写入两个字节的方式,低位字节在前。寄存器的最高位用于选择波特率发生器的输入频率源。当选用晶振XTAL1为时钟源时,80C196KC内部时钟信号是由振荡器二分频后得到的,因此可以用以下公式计算波特率寄存器(BAUD_REG)的写入值: 同步模式0:BAUD_REG=XTAL1/(BAUD_RATE*2)-1 或者T2CLK/BAUD_RATE 异步模式1、2和3:BAUD_REG=XTAL1/(BAUD_RATE*16)-1 或者T2CLK/(BAUD_RATE*8) 当采用12MHz频率时,异步模式的最大波特率为750kbps,同步模式为3Mbps。 2 串行通讯的软件设计 80C196KC串行通讯的软件设计可以采用查询和中断两种不同的方式。查询方式通过访问串行口控制/状态寄存器的标志位TI和RI,检查发送寄存器SBUF(TR)是否空或者接收寄存器SBUF(RX)已经接收了一帧数据。 下面的程序采用查询方式接收和发送N个字节数据,其中串行口设置为工作模式1,波特率57600,不设奇偶校验,12MHz晶振。 初始化程序: ldb sp .#offfoh ;设置堆栈指针 ldb r_buf, #0e000h ;设置接收数据区地址指针 ldb t _b u f #2300h ;设置发送数据区地址指针 orb ioc 1, #20h ;选通TXD引脚功能 ldb temp, #20h ;设置临时寄存器 ldb baud _rate , #och ;设置波特率57600 ldb baud _rate, #80h ldb sp_con,# 19h ;设置串行通讯方式1,不设奇偶校验 ldb count, # N ;设置通讯数据块大小 ……… 接收程序: read : ldb temp , sp _stat ;查询状态寄存器Ri标志 jbs temp , 6 , read ldb dl , sbuf ;接收并保存数据 stb dl,[ r _buf]+ ;将数据存入接收数据缓冲区 djnz count, read ;未接收完数据,继续跳转查询状态寄存器RI ……… 发送程序: send : ldb temp, sp _stat ;检查状态寄存器TI标志 jbc temp, 5, send ldb dl, [ t _buf]+ ;发送寄存器空,取数据 ldb sbuf , dl ;发送数据 djnz count, read ;未发完数据,继续跳转查询状态寄存器TI ……… 查询方式设计程序简单,但由于CPU不断查询标志位,不能做其它工作,因此,程序效率不高,不能用于对实时性要求高的场合,利用串行中断设计程序可以有效克服这些缺点。在96系列微处理器中,8098和8096只有一种中断方式,而80C196KB以后的产品又增设了发送中断和接收中断,分别设置了独立的中断向量。下面的程序采用中断方式接收和发送N个字节数据,其中串行口设置为工作模式1,波特率57600,不设奇偶校验,1MHz晶振。 初始化程序: 1db sp ,#lfffoh ;设置堆栈指针 ld bx, #2200h ;设置接收中断向量地址 l d ax, #2032h st bx, [ax] ld bx, #2250h ;设置发送中断向量地址 ld ax, #2030h st bx , [ax] orb ioc1, #20h ;选通TXD引脚功能 ldb temp, #20h ;设置临时寄存器 1db baud _rate, #0 ch ;设置串行通讯波特率56700 1db baud _rate, #80h 1db sp _con, #19h ;设置串行通讯方式1,不设奇偶校验 clrb int _mask ;清除中断屏蔽寄存器和中断悬挂寄存器 clrb int _pend clrb int _mask 1 clrb int _pend 1 orb int _mask 1,#03h ;置中断屏蔽寄存器1,容许发送和接收中断 1d count, #N ;设置通讯数据块大小 ei ;开中断 ……… 1db d1, [ t_buf] + 1db sbuf, dl ……… 接收中断子程序 :org 2200h pushf ;保护现场 1db d1, sbuf ;接收并保存数据 stb d1, [ r_buf]+ djnz count, exit 1 ;未接收完数据,退出等待下一次接收中断 ……… exit 1: popf ;出栈 ret 发送中断子程序:org 2250h pushf ;保护现场 orb int _mask1,#01h ;置中断屏蔽寄存器1,容许发送中断 1db d1, [ t _buf]+ ;发送数据 1db sbuf, d1 djnz count, exit2 ……… exit2: pop ;恢复现场出栈 ret 3 串行通讯应注意的几个问题 用户在串行通讯设计时应注意,串行口中断不要与接收中断、发送中断同时打开,只能开放二者中的一个,设计中通常采用接收中断和发送中断,实现全双工串行口的功能;由于访问状态寄存器SP_STAT后,其中内容即被清除,因此,必须用其它寄存器保存SP_STAT的内容;另外,当利用发送器的双缓冲器特点发送数据时,不应把串行口中断屏蔽掉,否则可能会漏记被发送的字节数;此外,当串行口两端采用不同的晶振频率或链路的一端是80C196KC串行口,另一端为其他系统时,应认真考虑两者的匹配问题,若发送端和接收端的波特率完全一致,则接收端对每一数据位的采样都发生在位周期的中点,能够可靠通讯;若发送端和接收端的波特率不一致,则在数据的连续传输过程中,接收端对数据位的采样点将愈来愈偏离位周期的中点,产生累积误差,最终导致通讯紊乱。所以,用户在串行口设计中,必须考虑波特率误差带来的影响。通讯方式,通讯数据量,握手方式等通讯协议的内容,必须通过实验测试加以验证。 4 80C196KC串行通讯的应用 某雷达仿真平台的控制电路中采用了80C196KC微处理器作为核心芯片,利用串行口完成目标坐标诸元数据和命令的交换。其中,80C196KC微处理器的串行口采用通讯模式1,波特率为57600,接收采用中断方式,发送采用查询方式。串行通讯内容分为数据和命令两类,各由HEAD和BODY两部分组成,80C196KC每次接收到串行口上的信息时,产生接收中断。在中断服务程序中,完成对接收到的信息的识别和处理,检查标志并提取其中的有效部分,若为指令,则执行;若为数据,则存入接收数据缓冲区。若从串口发送数据时,按照通信协议的格式,将发送数据送入发送缓冲区,以查询方式将数据写入SBUF,直至发完全部数据。 目前,该串行口运行良好,实现了计算机同微处理器之间的高速(57600和115200两种波特率)通讯,达到了系统的设计要求。 参考文献 1 涂时亮姚志石.单片微机MCS—96/98实用子程序.上海复旦大学出版社1991年9月 2 张幽彤陈宝江.MCS8098系统实用大全.北京:清华大学出版社1993年9月 3 朱晓强姚志石 .8096/8098单片机原理及应用.上海:复旦大学出版社 .1993年5月 4 孙涵芳 .lntel 16位单片机.北京:北京航空航天大学出版社1995年11月 5 鲍可进.一种实用的单片机系统的RS—232接口. 实验室研究与探索.1997;(5):75~78 (收稿日期:1999-06-21)
|
|||||
|
欢迎进入超前MCU技术论坛对
基于80C196KC微处理器的高速串行通讯进行讨论!
|
|||||
| 文章录入:armopen 责任编辑:armopen | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 版权申明 | 网站公告 | |||
|