DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 100|回复: 0
打印 上一主题 下一主题

基于μPD78045F单片机的软件UART

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 17:18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                    ? 引? 言

?????? 单片机在数据采集与控制、智能仪表中发挥重要的作用。单片机应用系统与后端上位机系统之间通讯进行数据交换,构成功能强大的测控系统是目前发展的趋势。

?????? NEC公司生产的μPD78045F是78K0系列8位单片机功能较强的044F子系列的最高型号。该芯片功能强、可靠性高、速度快、支持节电应用。美中不足的是,该芯片的2个串行I/O口虽然功能强,却只支持同步通讯,没有异步通讯功能。

?????? 本文给出在μPD78045F上采用软件模拟方式,使用2个I/O口线和一个8位定时器实现异步串行UART功能的方法。本方法占用资源少,设置和使用简单方便,帧格式可自由改变。

?????? 设计思路

????&nb

sp;? 每一个UART都应具备如下功能:

?????? 异步串行发送和接收的基本单位是帧,通常每帧包括以下部分:

?????? 本设计中,发送采用主动查询方式,可使用任一输出端口,本文中将P12.1设置为输出口,作为TxD;由于异步通讯中接收是被动的和随机的,因此只能采用中断方式,P0.1是外部中断INTP1的外部引脚,设计中使用它作为RxD,设置为下降沿触发方式,可及时检测到起始位的逻辑0电平,进入中断处理程序进行数据接收。

?????? 波特率发生器使用8位定时器TM1,产生指定波特率下的1个发送/接收位时序长度,即“位定时”。UART的并行数据到串行数据的转换、每帧数据格式的生成、发送和接收功能都由软件来控制完成。在指定波特率下,位定时为1,000,000ms / 波特率,硬件系统采用fx=4.9152 MHz的主晶振,软件设置定时器计数时钟为4分频,即:fx/4=1.2288 MHz? ,达到指定波特率位定时常数为:1228800 / 波特率 。
?
??????????????????????????????????????????????????????

[NextPage]?????? 软件流程?

?????? 发送

?????? 发送过程采用主动查询方式完成,为保证每个发送位的时长相同,整个过程关闭中断。首先,设定定时器定时一位时长,启动定时器,关闭中断,开始一帧的发送;然后,在发送一位时长的低电平(起始位)后,按最高位在先的顺序依次发送6个数据位,同时计算偶校验位,并在数据位后发送;最后,发送2位时长高电平作为停止位,结束一帧的发送。关闭定时器,开放中断,发送过程结束。
?????? 接收

?????? 接收过程是在中断处理程序中完成的。中断是由下降沿触发的,进入中断的时刻是处在接收起始位的时段。为了保证接收准确,在检测到起始位后,不能在每一位时长的开始而应在其中间进行采样。进入中断程序后,首先通过设定定时器,等待一位半时长,跳过整个起始位和半时长的首个数据位,然后开始按最高位在先的协议接收六个时长的数据位,每接收一位进行串并转换和校验位计算;随后接收校验位并与计算机结果比较,确定是否接收

正确。出于简化程序,校验位接收完毕后,没有读取停止位。最后关闭定时器,结束接收过程,中断返回。

?????? 在μPD78045F的中断系统中,高优先级中断的响应时间最长32个CPU时钟,这些时延应在程序中进行补偿,尤其在高速率通讯时位定时时长很短,补偿尤为重要。补偿的方法是从位定时中减去最长时延32个时钟。在9600波特率、定时器 4分频计数情况下,应减去 32/4=8个定时器计数。

?????? 结语

?????? 本文介绍的软件UART实现方法,已在项目中实际应用,达到功能要求,工作稳定可靠。从以上方案可以看出,本方法的最高波特率可达38400,每一帧的格式可灵活改变,其中数据位长度和发送顺序均没有限制,可根据需要发送数十位的数据位。

?????? 使用本方法应具备以下条件:

?????? 本方法占用外部连线少,稳定可靠,使用方便,简单有效,由于其帧格式的巨大灵活性,是在低成本、中速率、特殊数据传输场合下的一个较好选择。


?????? 软件流程?

?????? 发送

?????? 发送过程采用主动查询方式完成,为保证每个发送位的时长相同,整个过程关闭中断。首先,设定定时器定时一位时长,启动定时器,关闭中断,开始一帧的发送;然后,在发送一位时长的低电平(起始位)后,按最高位在先的顺序依次发送6个数据位,同时计算偶校验位,并在数据位后发送;最后,发送2位时长高电平作为停止位,结束一帧的发送。关闭定时器,开放中断,发送过程结束。?

?????? 接收

?????? 接收过程是在中断处理程序中完成的。中断是由下降沿触发的,进入中断的时刻是处在接收起始位的时段。为了保证接收准确,在检测到起始位后,不能在每一位时长的开始而应在其中间进行采样。进入中断程序后,首先通过设定定时器,等待一位半时长,跳过整个起始位和半时长的首个数据位,然后开始按最高位在先的协议接收六个时长的数据位,每接收一位进行串并转换和校验位计算;随后接收校验位并与计算机结果比较,确定是否接收

正确。出于简化程序,校验位接收完毕后,没有读取停止位。最后关闭定时器,结束接收过程,中断返回。

?????? 在μPD78045F的中断系统中,高优先级中断的响应时间最长32个CPU时钟,这些时延应在程序中进行补偿,尤其在高速率通讯时位定时时长很短,补偿尤为重要。补偿的方法是从位定时中减去最长时延32个时钟。在9600波特率、定时器 4分频计数情况下,应减去 32/4=8个定时器计数。?

?????? 结语

?????? 本文介绍的软件UART实现方法,已在项目中实际应用,达到功能要求,工作稳定可靠。从以上方案可以看出,本方法的最高波特率可达38400,每一帧的格式可灵活改变,其中数据位长度和发送顺序均没有限制,可根据需要发送数十位的数据位。

?????? 使用本方法应具备以下条件:

?????? 本方法占用外部连线少,稳定可靠,使用方便,简单有效,由于其帧格式的巨大灵活性,是在低成本、中速率、特殊数据传输场合下的一个较好选择。
?? 信息来源:www.dzzl.cn
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-23 07:33 , 耗时 0.109253 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表