基于C8051F350的称重系统软件设计_第1页
基于C8051F350的称重系统软件设计_第2页
基于C8051F350的称重系统软件设计_第3页
基于C8051F350的称重系统软件设计_第4页
基于C8051F350的称重系统软件设计_第5页
已阅读5页,还剩75页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要 随着对称重仪表的准度、精度、速度的要求越来越高,快速发展的单片机 被运用到其中并逐步形成了一套集称重、处理、显示、和监控的电子称重系统。 本文介绍了电子称重系统的工作原理、硬件电路设计,重点介绍了软件设计。 本系统在设计中紧密结合市场需求,参考了国内著名的称重仪器生产商的产品, 并且在功能设计上进行了一些新的改进。本系统采用目前使用最广泛、技术较 为成熟的 soc 单片机 c8051f350 作为控制核心,实现了自动采样、处理、显 示功能,并能通过异步串行口与上位机通信。其中测量功能由以 mavin 足立 na2 型传感器为核心的传感器电路、以 opa27 为核心的放大电路和单片机内部

2、的 24 位 a/d 转换实现;显示电路采用 lcd 显示。整个系统具有精确、快捷、方 便、实用的显著特点 关键词:关键词: 称重系统;c8051f350;传感器;a/d 转换;lcd abstract with the more and more higher request of the accuracy, precision and speed of weighing instrument, the singlechip with rapidly development is applied and a suit of electronic weighing system includi

3、ng weighing, processing, displaying and monitoring has been formed gradually. this text introduces the work principle, the hardware electronic circuit design, especially the software design of the electronic weighing system. during the process of design, the demand of market was especially noticed,

4、many products of domestic famous weighing instrument producer were consulted and some new improvements were made on the function design. the system uses soc scm c8051f350 which is most extensively applied currently and relatively mature on techinique as the core of control, realizing the function of

5、 sampling, processing and displaying automatically, and can communicate with epigyny computer through the asynchronous serial port. thereinto the measure is completed by sensor circuit based on mavin na2 sensor, amplification circuit based on opa227 and a/d converter in c8051f350, the lcd is applied

6、 in displaying circuit, which makes the whole system has the marked characteristics of precise, fast, convenience and applied. keyword: weighing system; c8051f350;sensor;a/d conversion;lcd 目 录 摘 要.i abstract .ii 第一章 绪 论.1 1.1 课题来源.1 1.2 课题研究的目的和意义.1 1.3 国内外现状.2 1.4 论文的主要内容.2 第二章 设计要求.3 2.1 总体要求.3 2.

7、2 性能指标.3 2.3 本章小结.3 第三章 硬件设计.4 3.1 仪器功能简介.4 3.2 硬件设计.4 3.2.1 系统原理框图.4 3.2.2 电路分析.4 3.3 本章小结.10 第四章 系统软件设计.12 4.1 主程序的设计.12 4.2 子程序的设计.13 4.2.1 时钟初始化子程序.13 4.2.2 i/o 端口初始化子程序.18 4.2.3 a/d 转换初始化子程序.22 4.2.4 a/d 转换子程序.29 4.2.5 显示子程序.33 4.2.6 异步串行口初始化子程序.40 4.2.7 按键子程序.44 4.3 本章小结.45 第五章 软件仿真.46 5.1 仿真软

8、件的介绍.46 5.2 仿真画面的介绍.46 5.3 本章小结.50 结 论.51 参考文献.52 致 谢.54 附 录.55 第一章 绪 论 1.1 课题来源 随着科学技术和经济的发展,出售商品品种的增加,称量物品的设备也需 要更新换代,人们对称重装置的要求也越来越高。传统的机械式称重装置正在 被电子称重装置所代替,从而进入到传感器、电子学和微处理机领域,使得称 重装置变成为电子仪器。它的特点是:精确、智能、简明、可靠,克服了传统 的杆秤、盘秤不精确、速度慢、不能计价、易作弊等缺点,在商业领域应用越 来越多。 称重技术的突破是微处理机的应用。称重技术的这种发展是由于不仅要求 获得静态称重数据

9、,而且进一步要求称重工作的自动化,实现快速称量,以及 测量各种动态参数,提高测量精度和各种数据的及时处理。这些精度、速度、 性能和功能方面的要求是传统的机械测量系统无法满足的。也就是说,这种技 术发展中的突破是必然的结果。 通常称量物体采用的是直读法,该测量方法应用到称重装置上为:通过测 量弹性元件的变形来测定被测物体的重量,结构简单,操作方便,但精度较低。 因此我们对弹性元件变形量进行信号放大处理,通过微处理机对其进行量度分 割,从而提高其精度。 随着电子元器件集成化的迅速发展,微处理机、单片机的发展和计算机软 件的开发使得不仅实验室的传统称量装置已被电子称重装置所取代,而且这种 趋势已经扩

10、展到工业和其他领域。 1.2 课题研究的目的和意义 目前,电子称重仪的应用范围越来越广泛,同时对电子称重仪的技术要求 也越来越高,电子称重仪由一个单一的称重装置逐渐发展成一个集称重、自动 控制和信息处理等为一体的综合性的称重系统。本课题研究的目的是设计一种 集称重、显示以及能够与上位机监控的电子称重系统,利用精确 a/d 型 soc 单 片机 c8051f350 为核心,配以数据采集、显示、按键、串口等外围电路,达到 测量精确快速、操作方便的目的,同时可以通过异步串口与上位机通讯,达到 监控和问题反馈的目的,真正使称重装置变为一个有机可靠的系统。本设计的 意义在于规范了计量市场,有效地提高了称

11、重的快速有效性,并将称重装置纳 入市场管理系统,有效地对计量过程实施监控,保证了交易的真实性和公平性。 1.3 国内外现状 50 年代中期电子技术的渗入推动了衡器制造业的发展。60 年代初期出现机 电结合式电子衡器以来,经过 40 多年的不断改进与完善,我国电子衡器从最初 的机电结合型发展到现在的全电子型和数字智能型。我国电子衡器的技术装备 和检测试验手段基本达到国际 90 年代中期的水平。电子称重技术从静态称重向 动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量 向多参数测量发展,特别是对快速称重和动态称重的研究与应用。但就总体而 言,我国电子衡器产品的数量和质量与工业发

12、达国家相比还有较大差距,其主 要差距是技术与工艺不够先进、工艺装备与测试仪表老化、开发能力不足、产 品的品种规格较少、功能不全、稳定性和可靠性较差等。 通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器 总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、 准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制 信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。 1.4 论文的主要内容 本课题研究的是电子称重系统,包括硬件部分和软件部分,本论文主要研 究的是软件部分。本课题使用精确 a/d 型 soc 单片机 c8051f350 进行数据的

13、采 集,处理,在硬件电路设计的基础上运用 c 语言进行编程。在论文的第一章介 绍了课题的来源及相关背景;第二章明确了本设计的设计要求;第三章简要叙 述硬件电路的设计及相关原理;第四章则是论文的重点,首先从整体构建程序 总体框架,再按局部子程序一一详细介绍,包括称重子程序,显示子程序,按 键子程序,串口通信子程序等;第五章阐述了软件仿真过程;结论部分对设计 进行了总结和展望;附录附带电路图和详细程序。 第二章 设计要求 2.1 总体要求 称重系统以 c8051f350 为核心,应变片传感器接收压力输入信号经放大、 滤波、a/d 转换、a/d 处理,最后由 lcd 输出显示。系统具备清零、去皮、防

14、止 死机、干扰、串口输出功能。要求做到精准、方便、稳定、智能、性价比高。 2.2 性能指标 去皮和清零功能 lcd 显示 测量范围:0-50kg 最小分度值:0.01kg 电源: 220v10% 2.3 本章小结 本章主要是明确了电子称重系统的各项功能,以及确定各项性能指标,为 硬件设计确立设计方案和标准,也为仿真效果提供了依据。 第三章 硬件设计 3.1 仪器功能简介 本称重系统操作方便,人机间互动主要依靠按键和 lcd 显示屏。操作过程 如下:上电后系统复位,放上托盘,也就是我们所说的“皮” ,按下去皮按键, 由于误差原因显示会接近 0,此时再按下清零键,显示为零,通过两次校准保 证了称重

15、的精确。然后放上所称重物(本设计要求重量范围在 0-50kg) ,此时 重量会显示在 lcd 屏上,如果有必要还可以外接 pc 机进行串口通信。称完后拿 下重物再按清零键即可进行下一次测量,如在称量过程中发生故障,我们还配 置了外部复位按键,以复位重新启动系统。 3.2 硬件设计 3.2.1 系统原理框图 硬件电路按照模块化设计方法设计,主要包括单片机电路、传感器电路、 a/d 放大电路、显示电路、电源稳压电路、串口通信电路等。系统原理框图如 图 3-1 所示。 传感器单片机 上位机 驱动a/d转换模拟放大 稳压电源 lcd 试样重物 按键 3.2.2 电路分析 一、单片机电路 本设计采用 s

16、oc 单片机 c8051f350,芯片的各主要引脚分配如下: 图 31 称重系统原理框图 引脚说明引脚说明 p0.0 上电指示灯 p1.0 显示驱动/wr p0.2 外部时钟输入 p1.1 显示驱动 data p0.3 外部时钟输出 p1.2 去皮按键 p0.4 串行通信 txd p1.3 清零按键 p0.5 串行通信 rxd ain0.0 模拟输入+ p0.6 显示驱动/cs ain0.1 模拟输入- p0.7 显示驱动/rd 二、传感器电路 传感器采用电阻应变片,利用电桥平衡原理进行压差的采样,因为电桥测 量不仅可以提高检测灵敏度,还能获得较为理想的温度补偿效果,减小和克服 非线性误差。

17、直流电桥电路如下图所示: ua a b r4 r2r1 r3 +- c d 四个电阻两两串联,接点a和b接直流电源e。根据串联电路电阻分压关系, 得c、d两点的电压分别为: =,= c v 1 13 r e rr d v 2 42 r e rr 电桥的输出电压为: 1423 2413 outcd u r rr r uvv rrrr 电桥的平衡条件是:。当电桥平衡时,输出电压为零。 4132 rrrr 根据本仪器的设计精度要求,我们选择台湾mavin足立na2称重传感器。 惠斯登电桥具有很多优点,如可以抑制温度变化的影响,可以抑制侧向力 干扰,可以比较方便的解决称重传感器的补偿问题等,所以惠斯登

18、电桥在称重 图 3-2 直流电桥电路 传感器中得到了广泛的应用。又因为全桥式等臂电桥的灵敏度最高,各臂参数 一致,各种干扰的影响容易相互抵消,所以称重传感器均采用全桥式等臂电桥。 1 2 3 4 +5v r 3 r 4 r 5 r 6 - sig +si g uoy 6655 66445533 () oy rrrr ue rrrrrrrr 若,则: 6543 rrrr 6543 rrrr )( 3333 33 3333 33 rrrr rr rrrr rr euoy ) 22 ( 3 33 3 33 r rr r rr e 3 3 r r e 三、a/d 放大电路 传感器测量的电压信号经常含有

19、干扰信号,所以当差分电压输出时,在其 图 3-3 差动全桥电路 图 3-4 仪表放大电路 前面加一个 lc 滤波电路,抑制了电源对传感器的噪声干扰,得到比较稳定的差 分信号。再通过一个 2 通道模拟多路分配器接入运放的同相输入端放大。由于 系统连续工作电压信号会随着温度的变化而发生漂移,为了防止温漂导致的电 压失真,在差分信号的两端加接通道多路器 74hc4053,当电压随温度往上变化 时,74hc4053 就把其信号变反,这样电压信号就会成锯齿形稳定在真实电压值 附近,从而保证了信号的准确。如图 3-4 所示,r8、r9、r10 电阻使用了精度 高、温度系数稳定的精密电阻,从而减小因放大产生

20、的干扰。 电阻应变片式传感器输出电压为 mv 数量级,因此必须加放大电路。根据差 分电路的原理。 2 9 (1) 8 r uu outin r 传感器称重量程 100kg,灵敏 2mv/v,供桥电压为 5v,满量程输出就为 10mv。现称重物体为最重 50kg,则最多输出 5mv 电压。adc 的参考电压为 2.5v,为留有余量使 50kg 对应 2v,所以要使输出电压从 0-5mv 放大到 0-2v,放 大倍数为。 2 400 5 v mv 本系统的放大电路用了专用的仪表放大器,其优点是: 1、单片机内部的运放不是很稳定,容易造成偏差。 2、内部的运放最大增益为 128,而现在所要求的放大倍

21、数要达到 400,不 能满足放大的要求。故采用外部的运算放大器。 传感器满量程输出=传感器额定输出 激励电压 =2mv/v 5v=10mv=10000v。 微伏/分度=传感器满量程输出= 分度值 传感器总容量 1.0(/ )v d 10000 0. 01 100 查灵敏度表,对应于 5000 分度数,其灵敏度允许范围为 0.6-5.2,符合灵 敏度要求。 四、显示电路 本设计中我们采用 lcd 显示,显示的驱动芯片采用 ht1621b。 ht1621b是一种128点阵式存储器映射多功能lcd驱动电路,它适合点阵式 lcd显示,包括lcd模块和显示子系统,具有关闭电源功能。硬件接线中重点关 心以

22、下引脚: 名称 i/o 功能说明 /csi 片选信号输入端(带上拉电阻)。为逻辑高电平时,数 据和命令不能读出和写入,并且串行接口电路复位。为 逻辑低电平时,控制器与ht1621b间可以传数据和命令。 /rdi read时钟输入端(带上拉电阻)。ram中的数据在/rd信 号的下降沿被输出到data线上,主控制器可以在下一个 上升沿锁存这个数据。 wri write 时钟输入(带上拉电阻)。在/wr信号的上升沿, data线上的数据被锁存到ht1621b。 datai/o 串行数据输入/输出端(带上拉电阻)。 com0com3 o lcd com输出端。 seg0seg31 o lcd seg输

23、出端。 图 3-5 lcd 显示电路 五、电源电路设计 本设计采用的芯片需要的供电电压有2.5v,3.3v和5v三种,主要采用小功 率电源调整芯片mic5205产生2.5v和5v电压,3.3v低压降调节器lp2981产生3.3v 电压。 5v电压用mic5205芯片产生,输入电压有波动时,为了使电路能稳定工作, 在输入和输出部分分别接入电容c5、c8。c5为输入稳定电容,当稳压器输入阻 抗降低时,防止发生振荡。c8为输出稳压电容,对于降低输出纹波、输出噪音 及负载电流变化的影响有好的效果,c8的最大值为2.2f太大的值会增加调节 器的过度反应。c7作为滤波电容,c6的作用是减少相位失真,减小输

24、出噪声。 2.5v电压采用电阻分压的方式从mic5205的输出得到,其中r1、r2电阻用1ppm的 高精度电阻,这样能得到稳定的电压。3.3v电压用lp2981芯片产生,其工作原 理与mic5205相似。 图 3-6 电源电路 六、串口通信电路 该称重系统还可以与上位机通信,这样系统还可以扩展功能,由上位机直 接控制完成监控任务。与上位机的通信接口采用芯片max3221。max3221是3v至 5.5v单通道rs-232线驱动器/接收器。该器件可满足tia/eia-232-f要求并在一 个异步通信控制器和串行端口连接器之间提供接口电荷汞和四个小型外接电容 器可在单路3v至5.5v电源电压下工作

25、这些器件在数据信号率达到250 kbit/s且 最大的30-v/s驱动输出回转率时工作。 当串行端口失效时,可对电压管理进行灵活的控制选择。在forceon为低且 forceoff为高时自动掉电功能起作用。在这种工作方式中,若器件未感应到接 收器输入端上的一个有效的rs-232信号,则驱动器输出端被禁止。若forceoff 置为低且en为高,则驱动器和接收器均被切断,电源电流降至1a。断开串行 端口或关闭外围驱动器将会导致自动掉电。当forceon和forceoff为高时,自动 掉电被禁止当自动掉电被使能且在接收器输入端加一个有效信号时器件被激活。 无效invalid输出告知用户查看rs-23

26、2信号是否加在接收器输入端。如果接收器 输入端电压高于2.7v或低于2.7v或在+0.3v之间并持续少于30s,invalid为 高数据有效;如果接收器输入端电压在+0.3v之间并持续超过30s,则invalid 为低数据无效。 3.3 本章小结 本章首先介绍了本称重系统的实际使用方法,接着通过原理框图明确了设 计方案和工作原理。根据模块化的设计方法,重点对单片机电路、传感器电路、 图 3-7 串口通信电路 a/d 放大电路、显示电路、电源稳压电路、串口通信电路等进行了介绍,明确 了本系统硬件中使用的各种芯片,尤其是核心控制部件 c8051f350 的各端口的 分配,为软件设计做好了准备。 第

27、四章 系统软件设计 4.1 主程序的设计 本设计的主程序是由各个子程序模块构成的。系统上电后,首先对系统进 行初始化,由于 c8051f350 是 soc 单片机,它较 mcs51 系列单片机的一大特点 是将很多外设或功能部件都嵌入其中,如本设计用到的 24 位 adc、增强型 uart、时钟振荡器等,因而对这些外设、功能部件以及端口引脚的初始化比 mcs51 系列单片机更为复杂,也至关重要,在初始化中主要是对各部件进行模 式配置以及根据前述硬件设计对 i/o 端口进行分配。完成初始化后,放上托盘, 进行去皮以去掉托盘的重量,但由于去皮是粗略的减掉托盘重,由于零点漂移 此时显示并不为零,为了使

28、称重更精确还要进行清零。然后放上重物,系统开 始采集数据,采集完一定的数据值后取平均值,对数据进行处理即将 a/d 转换 得来的数字量转化为显示模量为显示作准备,接着调 lcd 显示子程序显示。如 果有必要进行串口通讯则进入串口通讯子程序,否则检测是否清零进入下一次 称重。 主程序流程图如下: 开始 初始化 去皮清零 数据处理 数据采集完? y n 显示 要串口通讯? 串口通讯 y 清零键按下? y 结束 n 图 41 主程序流程图 4.2 子程序的设计 系统控制程序设计是按照结构化的程序设计方法设计,将整个程序细分为: 时钟初始化子程序、i/o 端口初始化子程序、a/d 转换初始化子程序、a

29、/d 转 换子程序、显示子程序、异步串口初始化子程序、按键子程序等, 以方便调试 与检查。 4.2.1 时钟初始化子程序 时钟初始化子程序 sysclk_init 用于初始化系统时钟,用外部 24.5mhz 振 荡器作为时钟源,并使用时钟乘法器产生一个外部振荡器 x2 即 49mhz 的系统时 钟,并且使能时钟丢失检测器。 c8051f350有一个可编程内部振荡器、一个外部振荡器驱动电路和一个时钟 乘法器。可以通过对oscicn寄存器编程来使能/禁止内部振荡器。系统时钟 (sysclk)可以由内部振荡器、外部振荡器电路或时钟乘法器提供。时钟乘法 器有三种可能的输出:内部振荡器2、外部振荡器2或

30、内部振荡器4。 oscicn:内部振荡器控制寄存器 ioscenifrdy-ifcn1-0 ioscen:内部振荡器使能位(0:内部振荡器禁止。1:内部振荡器使能。) ifrdy:内部振荡器频率准备好标志(0:内部振荡器未运行在编程频率。1:内 部振荡器按编程频率运行。) ifcn1-0:内部振荡器频率控制位(00:sysclk为内部频振荡器8分频。 01:sysclk为内部振荡器4分频。 10:sysclk为内部振荡器2分频。 11:sysclk为内部振荡器输出) 外部振荡器电路可以驱动外部晶体、陶瓷谐振器、电容或 rc 网络。必须在 oscxcn 寄存器中选择外部振荡器类型,还必须正确选择

31、频率控制位 xfcn。当使 用外部振荡器电路时,必须对所用端口引脚进行配置。当外部振荡器电路被配 置为晶体方式时,端口引脚 p0.2 和 p0.3 分别被用作 xtal1 和 xtal2。端口 i/o 交叉开关应被配置为跳过被振荡器占用的引脚。当在晶体方式使用外部振荡器 电路时,应将所用的端口引脚配置为模拟输入。 应从oscxcn寄存器中的晶体列选择外部振荡器频率控制值,在晶体振荡器 被使能时,振荡器幅度检测电路需要一个建立时间来达到合适的偏置。在使能 晶体振荡器和检查xtlvld位之间引入1ms的延时可以防止提前将系统时钟切换到 外部振荡器。步骤如下: 开始 强制xtal1和 xtal2为低

32、 设置xtal1和 xtal2为模拟输入 使能外部振荡器 等待至少1ms 系统时钟切换到外 部振荡器 xtlvld=1? 结束 y n 图 42 晶体振荡器初始化流程图 oscxcn:外部振荡器控制寄存器 xtlvldxoscmd2-0-xfcn2-0 xtlvld:晶体振荡器有效标志(0:晶体振荡器未用或未稳定。 1:晶体振荡器 正在运行并且工作稳定。) xoscmd2-0:外部振荡器方式位(00 x:外部振荡器电路关闭。 010:外部cmos 时钟方式。 011:外部cmos时钟方式二分频。 100:rc振荡器方式。 101:电 容振荡器方式。 110:晶体振荡器方式。 111:晶体振荡器

33、方式二分频。) xfcn2-0:外部振荡器频率控制位 xfcn 晶体(xoscmd=11x) rc(xoscmd=10 x)c(xoscmd=10 x) 000f 32khzf 25khz k因子= 0.87 00132khz f 84khz25khz f 50khz k因子= 2.6 01084khz f 225khz50khz f 100khz k因子= 7.7 011225khz f 590khz100khz f 200khz k因子= 22 100590khz f 1.5mhz200khz f 400khz k因子= 65 1011.5mhz f 4mhz400khz f 800khz

34、 k因子= 180 1104mhz f 10mhz800khz f 1.6mhz k因子= 664 11110mhz f 30mhz1.6mhz f 3.2mhz k因子= 1590 时钟乘法器产生一个4倍于输入时钟频率的输出时钟。时钟乘法器的输入可 以从外部振荡器、内部振荡器/2或外部振荡器/2中选择。因此有三种可能的输 出,内部振荡器2、外部振荡器2或外部振荡器4。 时钟乘法器用clkmul寄存器配置。配置和使能时钟乘法器的过程如下: 复位时钟乘法器 开始 选择时钟乘法器输入 使能时钟乘法器 延时大于5s 初始化时钟乘法器 mulrdy=1? 结束 n y 图 43 时钟乘法器初始化流程图

35、 当使用外部振荡器作为时钟乘法器的输入时,外部源必须在时钟乘法器被 初始化之前被使能并稳定 clkmul:时钟乘法器控制寄存器 mulenmulinitmulrdy-mulsel 1-0 mulen:时钟乘法器使能位(0:时钟乘法器被禁止。1:时钟乘法器被使能。) mulinit:时钟乘法器初始化位(在时钟乘法器被使能时,该位应为0。时 钟乘法器被使能后,向该位写1对时钟乘法器初始化。当时钟乘法器稳定后, mulrdy的读出值为1。) mulrdy:时钟乘法器准备好标志(0:时钟乘法器未准备好。 1:时钟乘法器准 备好。) mulsel:系统时钟源选择位 mulsel 输入时钟时钟乘法器输出

36、00 内部振荡器/2内部振荡器2 01 外部振荡器外部振荡器4 10 外部振荡器/2外部振荡器2 11 保留保留 外部晶体谐振器通常需要较长的起动时间,应待其稳定后方可用作系统时 钟。当外部振荡器稳定后,晶体有效标志(寄存器oscxcn中的xtlvld)被硬件 置1 。在晶体方式,为了防止读到假xtlvld标志,软件在使能外部振荡器和 检查xtlvld之间至少应延时1ms。 寄存器clksel中的clksl1:0位选择用作系统时钟的振荡器。系统时钟可 以在内部振荡器、外部振荡器及时钟乘法器之间自由切换,只要所选择的时钟 源被使能并稳定运行。 clksel:时钟选择寄存器 -clksl 1-0

37、clksl1:0:系统时钟选择位。(00:内部振荡器。01:外部振荡器。10:时 钟乘法器。11:保留。) 时钟丢失检测器(mcd)是由系统时钟触发的单稳态电路。如果系统时钟 保持在高电平或低电平的时间大于 100 微秒,单稳态电路将超时并产生复位。 在发生时钟丢失检测器复位后,mcdrsf 标志(rstsrc.2)的读出值为1, 表示本次复位源为 mcd;否则该位读出值为0。向 mcdrsf 位写1将使能时 钟丢失检测器;写0将禁止时钟丢失检测器。/rst 引脚的状态不受该复位的影 响。 子程序如下:void sysclk_init (void) int multiplier_delay;

38、oscicn = 0 x00; /禁止内部振荡源 oscxcn = 0 x67; /选择外部晶体振荡器方式, 10mhzf30mhz for(multiplier_delay=0;multiplier_delay24400; multiplier_delay+) /延时最少1ms while (!(oscxcn /查询xtlvld等待晶体振荡器准备好 clkmul = 0 x00; /复位时钟乘法器 clkmul /mulsel = 10b,选择时钟乘法器输入为外部振荡器/2 clkmul |= 0 x80; /使能时钟乘法器 for(multiplier_delay=0; multiplie

39、r_delay ain- ,ain0.0 = ain+ adc0md = 0 x80; / 启动 adc0 4.2.4 a/d 转换子程序 该子程序用于完成采样、校准、转换的工作,为显示做好准备。 c8051f35包含一个扩展的中断系统,支持12个中断源,每个中断源有两个 优先级。每个中断源可以在一个sfr中有一个或多个中断标志。当一个外设或外 部源满足有效的中断条件时,相应的中断标志被置为逻辑1。 如果一个中断源被允许,则在中断标志被置位时将产生中断。一旦当前指 令执行完,cpu开始执行中断服务程序(isr)。如果中断未被允许,中断标志 将被硬件忽略,程序继续正常执行。中断标志置1与否不受中

40、断允许/禁止 状态的影响。 每个中断源都可以用一个 sfr(ie或eie1)中的相关中断允许位来允许或 禁止,但是必须首先将ea位(ie.7)置1,以保证每个单独的中断允许位有 效。不管每个中断允许位的设置如何,清0ea位将禁止所有中断。某些中断 标志在cpu进入isr时被自动清除,但大多数中断标志不是由硬件清除的,必须 在isr返回前用软件清除。 每个中断源都可以被独立地编程为两个优先级中的一个:低优先级或高优 先级。每个中断在 sfr(ip 或 eip1)中都有一个配置其优先级的中断优先级设 置位,缺省值为低优先级。 如果两个中断同时发生,具有高优先级的中断先得 到服务。如果这两个中断的优

41、先级相同, 则由固定的优先级顺序决定哪一个中 断先得到服务。 ie:中断允许寄存器 eaespi0et2es0et1ex1et0ex0 ea:允许所有中断。该位允许禁止所有中断。它超越所有的单个中断屏蔽设 置。(0:禁止所有中断源。1:开放中断。每个中断由它对应的中断屏蔽设置决 定。) espi0:串行外设接口(spi0)中断允许位。该位用于设置 spi0 的中断屏蔽。 (0:禁止 spi0 中断。1:允许 spi0 的中断请求。 ) et2:定时器 2 中断允许位。该位用于设置定时器 2 的中断屏蔽。 (0:禁止定 时器 2 中断。 1:允许 tf2l 或 tf2h 标志的中断请求。 ) e

42、s0:uart0 中断允许位。该位设置 uart0 的中断屏蔽。 (0:禁止 uart0 中断。 1:允许 uart0 中断。 ) et1:定时器 1 中断允许位。该位用于设置定时器 1 的中断屏蔽。 (0:禁止定时 器 1 中断。1:允许 tf1 标志位的中断请求。 ) ex1:外部中断 1 允许位。该位用于设置外部中断 1 的中断屏蔽。 (0:禁止外部 中断 1。1:允许/int1 引脚的中断请求。 ) et0:定时器 0 中断允许位。该位用于设置定时器 0 的中断屏蔽。 (0:禁止定时 器 0 中断。1:允许 tf0 标志位的中断请求。 ) ex0:外部中断 0 允许位。该位用于设置外部

43、中断 0 的中断屏蔽。 (0:禁止外部 中断 0。1:允许/int0 引脚的中断请求。 ) ip:中断优先级寄存器 -pspi0pt2ps0pt1px1pt0px0 pspi0:串行外设接口(spi0)中断优先级控制。该位设置 spi0 中断的优先级。 (0:spi0 为低优先级。1:spi0 为高优先级。 ) pt2:定时器 2 中断优先级控制。该位设置定时器 2 中断的优先级。 (0:定时器 2 为低优先级。1:定时器 2 为高优先级。 ) ps0:uart0 中断优先级控制。该位设置 uart0 中断的优先级。 (0:uart0 为低 优先级。1:uart1 为高优先级。 ) pt1:定

44、时器 1 中断优先级控制。该位设置定时器 1 中断的优先级。 (0:定时器 1 为低优先级。 1:定时器 1 为高优先级。 ) px1:外部中断 1 优先级控制。该位设置外部中断 1 的优先级。 (0:外部中断 1 为低优先级。1:外部中断 1 为高优先级。 ) pt0:定时器 0 中断优先级控制。该位设置定时器 0 中断的优先级。 (0:定时器 0 为低优先级。1:定时器 0 为高优先级。 ) px0:外部中断 0 优先级控制。该位设置外部中断 0 的优先级。 (0:外部中断 0 为低优先级。1:外部中断 0 为高优先级。 ) eie1:扩展中断允许1 et3 保留 ecp0epca0ead

45、c0c 保留 2-1 esmb0 et3:定时器 3 中断允许位.该位设置定时器 3 的中断屏蔽。(0:禁止定时 3 中 断。1:允许 tf3l 或 tf3h 标志的中断请求。) ecp0:比较器 0(cp0)中断允许位。该位设置 cp0 的中断屏蔽。 (0:禁止 cp0 中断。1:允许 cp0rif 或 cp0fif 标志的中断请求。 ) epca0:可编程计数器阵列(pca0)中断允许位。该位设置 pca0 的中断屏蔽。 (0:禁止所有 pca0 中断。1:允许 pca0 的中断请求。 ) eadc0c:adc0 转换结束中断允许位。该位设置 adc0 转换结束中断屏蔽。 (0: 禁止 a

46、dc0 转换结束中断。1:允许 ad0int 标志的中断请求。 ) esmb0:smbus 中断允许位。该位设置 smbus(smb0)的中断屏蔽。 (0:禁止 smb0 中断。1:允许 smb0 的中断请求。 ) eip1:扩展中断优先级1 pt3 保留 pcp0ppca0padc0 保留 2-1 psmb0 pt3:定时器3中断优先级控制。该位设置定时器3中断的优先级。(0:定时器3 中断为低优先级。1:定时器3中断为高优先级。) pcp0:比较器 0(cp0)中断优先级控制。该位设置 cp0 中断的优先级。 (0:cp0 中断为低优先级。1:cp0 中断为高优先级。 ) ppca0:可编

47、程计数器阵列(pca0)中断优先级控制。该位设置 pca0 中断的优 先级。 (0:pca0 中断为低优先级。1:pca0 中断为高优先级。 ) padc0:adc0 转换结束中断优先级控制。该位设置 adc0 转换结束中断的优先级。 (0:adc0 转换结束中断为低优先级。1:adc0 转换结束中断为高优先级。 ) psmb0:smbus(smb0)中断优先级控制。该位设置 smb0 中断的优先级。 (0:smb0 中断为低优先级。1:smb0 中断为高优先级。 ) 关中断,开校准 开始 校准完? 清中断标志,开始 采样 转换结果累加 到采样个数? 求平均值 结束待处理 y n n y 图

48、45 a/d 转换流程图 子程序如下: ea = 1; / 打开全局中断 eie1 / 关闭adc0中断 adc0md |= 0 x81; / 开始adc0全内部校准 while (!ad0calc); / 等待校正结束 adc0md / 将adc0置于空闲状态 ad0int = 0; / 清除adc0中断标志 g_icounts = 0; / 初始化当前零点 while(1) sum = 0; adc0md = 0 x83; / 开始连续转换 for(samplecount=0; samplecountnumsamples; samplecount+) while(ad0busy); / 等

49、待转换结束 ad0int = 0; / 清除中断标志 adc_outputval = adc0l + (long)adc0m 8) + (long)adc0h 16); sum += adc_outputval; / 读取24位ad转换结果并求和 /结束采样 sum = sum/numsamples; /求平均值 adc0md = 0 x80; / adc0为空闲模式 4.2.5 显示子程序 显示子程序用于完成a/d处理、lcd初始化、显示等操作。 显示子程序的流程图如下: a/d处理 开始 lcd初始化 结束 向lcd写数据 向lcd写地址 向lcd写命令 取缓冲区首址 字符输完? 地址+1

50、 n y 图 46 显示流程图 a/d处理的任务一是将a/d转换而来的数据转换为对应的重量值,二是将重 量值转变为可供显示的字符,以便查表输出显示。 硬件部分已经提到 50kg 重量经传感器输出并放大 400 倍后对应 a/d 输入 的 2v,而 24 位 a/d 的参考电压为 2.5v,由得 x=62.5kg,留有了 2.5 502 xv kgv 一定余量。由解得 y=0a7ch,即 0.01kg 对应的十六进制数为 24 62.50.01 2 kgkg y 0a7ch,同理可知 0.02kg 时对应数值为 14f8h,50kg 时数值为 cccccch。由此可 知从 0.01kg 到 0.

51、02kg 的数字量变化较大,这样不仅满足了转换精度的要求, 而且由于 ad 采样误差或外部干扰引起的数字量的变化不会影响到输出结果的稳 定,提高了显示的准确度。 由上述公式转换得到的重量值是带有2位整数和2位小数的,为便于将重量 值转变为可供显示的字符需将此值放大100倍,从最高位开始依次减去该位的十 进制模量(如1000、100、.),减一次检测是否为负,为负则停止即可通 过减的次数确定该位的字符,减几次该位就为字符几,依次类推确定下一位直 至最低位。 a/d处理子程序如下: code unsigned char fonttable10= lcd_0,lcd_1,lcd_2,lcd_3,lc

52、d_4,lcd_5,lcd_6,lcd_7,lcd_8,lcd_9/字符0- 9 code long tens= 1,10,100,1000,1000; unsigned char longtoascii(char *p_out,long source)/将重量值转变为可 显示的字符码 unsigned char j, numdig; long temp; source= source*6250/16777216;/将 a/d 转换值转变为重量值并放大 100 倍 numdig = 4;/显示位数为4位 while (numdig) temp = tens-numdig; /通过比较找到显示中

53、每位的数字09 for (j = 0; j 10; j+) source -= temp; if (source if (j=10) break; source += temp; *(p_out) = fonttablej; /字符送缓冲区 p_out+; /缓冲区地址加1 if (j=10) /超过9出错 return (1); else return (0); ht1621b是一种具有微控制器接口,由存储器映射的324点阵式lcd控制驱 动器。电路上电时清零复位,通过命令端进行工作状态设置,通过片选、读、 写端对ram数据进行读、写、修改操作,按照一一对应的原则,驱动lcd显示器。 该电路

54、可用于点阵式lcd显示驱动,各seg端是互相独立的,且容易对ram数据进 行修改,所以显示点阵内容灵活,可随用户任意定制。 静态显示存储器(ram)结构为324位,贮存所显示的数据。ram的内容直 接映射成lcd驱动器的内容。ram中的数据可被read、write和readmodify write命令存取。ram中的内容映射至lcd的过程如下图所示: ht1621b可以通过s/w来设置,设置ht1621b和传送lcd显示数据的指令共有两 种模式,分别为命令模式和数据模式。对ht1621b的设置称作命令模式,其id是 100,由系统设置命令、系统频率选择命令、lcd结构命令、蜂鸣频率选择命令 和

55、操作命令组成。数据模式包括read、write 和readmodifywrite 操作。 模式命令出现在数据和命令传送之前。如出现连续指令,命令模式id100可以被 忽略。当系统工作在不连续命令或不连续地址数据模式,cs管脚应设置为1,而 之前的工作模式将被复位。一旦cs管脚为0,将出现一个新的工作模式id。 常用的指令如下表: 名称 id 命令代码 d/c 功能上电预 置复位 read110a5a4a3a2a1a0d0d1d2d3d 读ram中数据 write101a5a4a3a2a1a0d0d1d2d3d 写数据到ram 中 read- modify- write 101a5a4a3a2a

56、1a0d0d1d2d3d 读写ram sys dis100000-0000-xc 同时关闭系统振 荡器和lcd 偏置 发生器 yes sys en100000-0001-xc 开启系统振荡器 lcd off1000000-0010-xc 关闭lcd偏置发生 器 yes lcd on1000000-0011-xc 开启lcd偏置发生 器 rc 256k1000001-10xx-xc 系统时钟为片内 rc振荡器 yes bias 1/31000010-abx1-xc lcd1/3偏置状态 ab=00:2com 端 ab=01:3com 端 ab=10:4com 端 tnormal1001110-0

57、011-xc 标准模式 yes 1.x:忽略。 2.a5a0:ram 地址。 3.d3d0:ram 数据 4.d/c:数据/命令模式。 5.110,101和100均是模式命令。如出现连续命令,命令模式id100可以被忽略 (除第一个命令id100)。 由于对lcd显示操作时要先写命令,再写地址,最后写数据,因而在显示程 序中需要经常用到三类子程序:写命令子程序、写地址子程序、写数据子程序。 它们的程序流程类似,只是传送的位数不同而已。流程图如下: 开始 data=1 比较命令、地址or 数据的最高位 最高位为1? data=0 写允许,延时 写禁止,延时 结束 y n 写完? 命令、地址or

58、数据左移一位 n y 图 47 lcd 送命令、地址或数据流程图 void send_command(unsigned char command)/用引脚模拟时序向lcd写入命令 unsigned char i; lcd_cs = 1; /关片选复位 delay(); lcd_cs = 0; /开片选准备写命令 delay(); for(i=0;i3;i+); /命令模式id为3位 if(command else lcd_data = 0; command=1;/命令字左移一位 delay(); lcd_wr = 0;/写允许 delay(); lcd_wr = 1;/写禁止 delay();

59、 void send_address (unsigned int inbyte)/用引脚模拟时序向lcd写入地址 unsigned char i; for(i=0;i6;i+) /地址为6位 if(inbyte else lcd_data = 0; inbyte=1;/地址字左移一位 delay(); lcd_wr = 0;/写允许 delay(); lcd_wr = 1;/写禁止 delay(); void send_bit_ (unsigned char bitnumber,unsigned int inbyte) /用引脚 模拟时序向lcd写入数据 unsigned char i; fo

60、r(i=0;ibitnumber;i+) /bitnumber为数据位数 if(inbyte else lcd_data = 0; inbyte=1;/数据字左移一位 delay_300ns(); lcd_wr = 0;/写允许 delay_50us(); /延时50us lcd_wr = 1;/写禁止 delay_50us(); lcd初始化子程序如下: void init_disp(void) send_command(0 x04);/写命令模式id100 send_bit_(9,0 x1c6);/设置成标准模式 send_bit_(9,0 x030);/系统时钟为片内rc振荡器 send

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论