




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
普通本科毕业设计题目:STC单片机开发助手设计学院 软件与通信工程学院 学生姓名 童慧玲 学 号 0113262 专 业 电子信息工程 届 别 2015 届 指导教师 张 勇 职 称 副教授 二O 一五 年 五 月1、 普通本科生毕业论文(设计)诚信承诺书毕业论文(设计)题目STC单片机开发助手设计学生姓名童慧玲专业电子信息工程学 号0113262指导老师张 勇职 称副教授所在学院软件与通信工程学院诚信承诺本人慎重承诺和声明:我承诺在毕业论文(设计)活动中遵守学校有关规定,恪守学术规范,在本人的毕业论文中未剽窃、抄袭他人的学术观点、思想和成果,未篡改研究数据,如有违规行为发生,我愿承担一切责任,接受学校的处理。 学生(签名): 2015年 05月 15 日江西财经大学本科毕业设计摘 要本设计选用Visual Studio 2012应用程序开发平台,采用C#编程语言,基于STC系列单片机基本功能,开发了一款能够实现STC单片机基本功能控制程序代码快速生成的软件,辅助快速开发单片机项目。STC单片机开发小助手,能够根据用户对单片机相关参数的配置,实现快速生成延时程序、单片机定时/计数程序以及单片机串口通信波特率初始化控制程序,并能以汇编、C语言两种编程语言输出带参数或者有堆栈保护的延时程序、包含定时器中断处理或者延时函数的定时/计数程序和包含串口中断处理或者延时函数的串口初始化程序,可适用于以STC单片机为核心的智能控制类项目中。【关键词】STC单片机;单片机小助手;串口通信;软件设计1AbstractThis design selected Visual Studio 2012, an application development platform, and it used C# programming language to develope a software called STC SCM (Single Chip Microcomputer) development helper. This software is based on the basic functions of the series of STC microcontroller, could quickly generate STC microcontroller control program code for its general function by using this software, auxiliarily contributing the rapid development of single microcomputer project. And it can generate the program code, according to the users settings for their own needs, that can be used for delaying a procedure for a special time, timing, counting, and intializing the baud rate of the serial communication of the SCM. Besides, it can generate the controlling code in two programming languages such as C programming language and assembly language, including a time_delay function with parameters or stack protection, a timer function with interrupt handling, a counting function with interrupt handling, an interrupt_handling function for serial port as well as a segment program for the serial initialization if necessary. The greatest merit of this software is that it can be applied to the intelligent control projects centering on STC microcontroller.【Key words】STC microcontroller; MCU helper; serial communications; software design1目 录1 引言1.1 选题背景11.2 研究目的11.3 实现办法22 STC单片机开发小助手开发平台及界面2.1 STC单片机开发小助手硬件开发平台42.2 STC单片机开发小助手软件开发平台42.3 STC单片机开发小助手界面布局53 延时计算模块3.1 延时算法原理63.2 延时计算模块界面设计113.3 延时计算模块Visual Studio2012中编程实现过程124 定时/计数器模块4.1 定时/计数器264.2 定时/计数模块界面设计274.3 定时/计数模块在Visual Studio2012中设计思路284.4 定时/计数模块编程实现过程295 串口初始化配置模块5.1 串行口数据通信及串口波特率模块界面设计395.2 串口波特率模块在Visual Studio2012中实现思路395.3 串口波特率模块在Visual Studio2012中实现过程406 结束语47参考文献48致 谢501STC单片机开发助手设计1 引言本章主要介绍了STC单片机开发助手软件设计与实现的研究背景与研究意义,此类开发工具在STC单片机中的应用现状,以及毕业设计思路和主要任务。1.1 选题背景随着微电子技术和计算机网络技术的蓬勃发展,单片机已逐渐被应用于生活的各个领域1,不论是在国内还是在海外,无论是在全球连锁的大型企业,还是小到个体商户,甚至是行走在路上,都可以看到它的身影。单片机以自身前所未有的优点:体积小、性能好、性价比高、灵活性强、可靠性高,得到了十分广泛的应用,譬如:仪器仪表、医用设备、航空航天、专用设备的智能管理及过程控制等领域,几乎无孔不入,成了智能化工具的代表。单片机的出现,不仅在于它带来的可观的经济效益,更重要的是,从根本上改变了控制系统传统的设计思想和设计方法,通过软件控制的方法,节省了相应的硬件资源,且更利于智能化处理。那么,如何更好更快地开发单片机,这便成立众人瞩目的焦点。目前已有的单片机开发工具已有不少,如主要的Keil uVision、Proteus、VSPD、串口调试工具、ASM汇编器等等,这些均可辅助开发单片机,但是针对实现基本功能代码编写过程延时计算程序、计时器/计数器初值的设定程序、串口通讯波特率初值计算、波特率误差的计算等,帮助快速编辑的工具并不多,目前只有些较简单的单片机工具箱等,但是功能并不全,待完善的地方还很多。此类软件常常不受工程师重视,但是使用频繁,实用性非常好,市场前景不错,应用领域也将会相当广泛,有涉及单片机的地方将都会有它的身影,和keilC51软件一样。1.2 研究目的根据市场实际情况及单片机广泛应用现状,开发STC单片机开发小助手此款软件的需求可分为两个方面,一方面用于教学,另一方面给可以用于实际的单片机工程项目开发。随着微电子、IC集成电路行业的迅速发展,单片机行业已经引起各行业的关注。在单片机开发过程中,不可避免要重复编写一些常用代码,如延时、定时、波特率设置等程序,并且在不同应用场景中设置的参数也各不相同,需要不断重复地计算、初始化、编程,这种繁琐的过程给单片机爱好者带来了不少困扰,有时也会因为长时间未接触而遗忘具体设置方法,需要再次查阅相关资料,开发一款能快速生成开发单片机常用代码的软件已成为一种需要。此项研究的目的就是为了开发一款实用性较强、基本功能较全且性能好的STC单片机辅助开发工具,提供常用51系列单片机的参数计算和资料查询功能,并能快速生成实现基本功能的C语言代码和汇编代码,在此基础上再扩展一些其他的功能,使其专业化和智能化。此款软件对于初学者、单片机开发商、电信工程师等单片机爱好者,无疑是一个很好的开发助手工具;事实上,STC单片机开发小助手可以用于任何涉及到单片机的领域,如教学、基于单片机智能家具的开发等等。1.3 实现办法本设计分为硬件设计和软件设计两大模块。硬件设计一方面实现单片机常用的基本功能,并扩展一部分功能,另一方面用于验证软件STC单片机开发小助手的使用效果;软件设计是为了辅助开发STC单片机,加速其开发过程。本设计硬件模块与软件模块是相互辅助的,硬件模块通过软件模块查询相应的芯片资料,对软件设置相应的参数,软件模块输出硬件需要的控制代码,其相互关系如下图1-1所示。图1-1 软件模块与硬件模块关系图STC单片机开发小助手软件是基于Visual Studio 2012开发平台,使用Microsoft Visual C#程序语言编写的。此软件主要分为六个模块:软件界面框架和总体布局、软件延时模块、定时/计数器计算模块、串口初始化配置模块、串口通信助手模块、辅助资料查询模块,我主要负责软件延时模块、定时/计数器计算模块、串口初始化配置模块这三个模块。l 软件延时模块主要是生成一定延时时间的延时代码,可选择用汇编或者C语言来编写,延时时间由用户自己输入。l 定时/计数器计算模块主要是用来生成一段较完整的定时或计数程序,定时/计数初值、程序编辑语言及其工作方式均由用户自行设定。l 串口初始化配置模块主要是为了串口通信前,初始化定时器,并生成一段较完整的代码,程序编辑语言由用户自己选择。492 STC单片机开发小助手开发平台及界面2.1 STC单片机开发小助手硬件开发平台STC单片机开发小助手的设计用到了硬件平台,此平台主要用来测试软件的质量及其实用性。硬件平台分为温度传感器模块、LED液晶显示模块、IC卡模块、串口通信模块等234(如图2-1所示),温度传感器模块主要用来检测环境温度,当温度超过正常值后便立即通过蜂鸣器报警;LED液晶显示模块主要用来显示信息,如温度、日历等需要显示的信息;IC卡模块可组合其它电路,进一步完善做成智能卡,也可以简单地用来感应,做成车钥匙、智能开关等等;串口通信模块主要用于外设与单片机之间的数据传输。该模块通过使用STC单片机开发小助手快速查询相关芯片资料,设置需要的参数,驱动软件生成相应的代码(C语言/汇编)512,再将生成的代码用其它单片机开发工具写入硬件平台,检测是否实现预计效果。图2-1 硬件平台主要模块示意图2.2 STC单片机开发小助手软件开发平台软件开发平台1424选用的是Microsoft公司推出的Windows平台应用程序开发环境Visual Studio系列中最卓越的版本Visual Studio 2012。该版本工作流程更精简,整体布局更合理,并可快速访问工具,附有更实用的模板、设计及测试调试工具、及Blend for Visual Studio提供的一系列可视化工具集。WPF(Windows Presentation Foundation),新一代用户界面框架,主要包括引擎和编程框架,用来提供统一的编程模式、语言及框架。WPF可将界面设计与开发分离,并可以实现多媒体交互用户图形界面。此外,Microsoft还引入了XAML(Extensible Application Markup Language 可扩展应用标记语言),使构建和重用UI(user interface 用户界面)界面的工具更全面,并提供了UI说明模式。XAML还可使UI界面设计从基础代码中脱离出来,加强了开发人员与设计人员间的合作交流。软件设计使用的编程语言是Microsoft公司发布的一种面向对象的、运行于Microsoft .NET Framework之上的高级程序设计语言C#。C#继承C和C+的基本功能,包括继承、接口,语法与Java极其相似,并可先编译成中间代码后运行。C#综合了Visual Studio可视化操作与C+语言的高效性,支持面向组建编程,是.NET开发首选语言。2.3 STC单片机开发小助手界面布局STC单片机开发小助手软件界面设计本着简单易懂、便于用户操作的原则,合理布局界面,注重颜色搭配,使其看之和谐,用之便捷,给人以整洁美观、清新舒爽之美感。软件界面大致分为五个部分:“标题+菜单”、“功能模块区”、“主要参数配置区”、“主要信息输出区”、“信息提示区”,如图2-2所示。图2-2 STC单片机开发小助手软件设计界面示意图图2-2中各个区域具体规划如下表2.1所示。表2.1 STC单片机开发小助手软件界面解释分析表名称解释标题+菜单显示软件名称和实现简单软件设置主要参数配置区配置单片机相关参数,如其型号和时钟频率功能模块用来设置单片机基本功能模块,如延时、定时/计数器、串口波特率以及其他功能模块主要信息显示区主要用来显示生成的代码及与之相关的配置选项信息提示区用来显示时间、当前状态等相关信息3 延时计算模块3.1 延时算法原理单片机软件延时跟单片机的机器周期有关。单片机执行不同指令所需的机器周期不同,利用单片机重复执行指定指令进而实现软件延时,延时时间的长短跟执行的指令数目相关;这样,延时时间就可以转化为执行指令的机器周期数,等于延时时间除以机器周期。单片机的机器周期是时钟频率的倒数的十二倍,那么,机器周期数就等于单片机时钟频率与延时时间之积除以十二;并且,时钟频率不同的单片机对于同一延时时间所需的机器周期数也是不同的。在STC单片机中,转移类的指令一般为两个机器周期,空操作指令(汇编中为NOP)需要一个机器周期,根据单片机执行每条指令执行所需的机器周期数,可以确定指令需要执行的次数;如此,单片机延时就可以通过执行一定数量指令实现了。一般而言,这种计算延时方法主要是针对汇编语言设计的,延时误差几乎是零,可精确到微秒级别。在实际应用中,一段STC单片机延时程序往往需要程序员多次修改才能完成,并且每次编程的思路通常是大同小异;如果把这种编程框架设计成模板,那么每次编写延时程序时,只要稍微修改一下参数,或者再添一些用户自己的代码即可,如此便省去好多工作。基于这个思路,我们可将常用的延时程序写成模板,需要改动的参数设置为变量,对输入延时时间进行计算处理,然后根据处理情况,结合处理结果,按照模板输出,便可得到需要的程序代码。本设计对延时时间进行计算处理时,考虑了STC单片机延时程序常见的三种情况短暂延时、中等延时和长延时;并且它们是不同形式,不同算法;这里将三种情况下不同算法融合在一起,并结合了迭代法与穷举法思想,其处理过程如图3-1所示。图中,对于每一次输入的延时值TData来说,首先判断TData是否为有效值,然后才进入下一步:设置中间变量Temp,并初始化为零,再与TData数值比较;如果Temp与TData的值相同或者相差小于某个特定值时,则操作结束,否则将Temp代入特定的式子进行计算处理,直到满足判断条件,循环结束。最后,将需要的值返回,按照固定模板输出程序。图3-1虚线框内,仅设置了一个一层循环,一个变量Temp,倘若TData数值很大,需要经过多次循环,通常耗时较久,效率不高,且循环处理后的图3-1 延时时间处理过程的大致流程图Temp值也会相对较大;在实际应用中,单片机字长通常为8位,且通用寄存器一般都是8位寄存器,如果Temp数值过大,不便于存储与操作。可见,上述方法并不是最好的。为了改进这个不足之处,可以采用多存循环,先进行内层循环查找,然后再进行外层循环,由内到外,可以极大降低搜索时间,提高查询效率,同时,也可以减少误差。图3-1虚线框改进后处理过程如图3-2所示。图3-2 延时时间处理过程改进后的部分流程图对延时时间处理完成后,根据图3-2中A、B、C、D相应的值选择相应的程序框架,具体选择情况如图3-3所示。图3-3 延时时间处理完成后程序框架选择示意图程序框架分为两类C语言和汇编延时程序框架,具体情况如表3.1和表3.2所示。选择了程序框架后,只需将图3-2中得到的数据,经过简单换算后,代入表中“*”处便可得到所需延时程序代码。本软件在设计延时算法时,为了解决延时误差问题,提高延时精度,采用了一种“拼凑”的思想,其示意图如图3-4所示。图3-4 “拼凑”法示意图对于一段延时时间,如果主延时程序经过计算修改后,还是没有达到预定延时时间,并且与总延时时间相差较小的情况下,可以再添加一段短延时程序,以求延时误差降到最小或者为零。一般会采用汇编程序空操作“NOP指令”或者C51中“_nop_();”函数来拼凑剩下的延时时间,这种方法既简单又精准。表3.1 C语言延时程序框架表一重循环二重循环void DelayTimeDataUS() /误差0us unsigned char a; for(a = *; a 0; a-);void DelayTimeDataUS() /误差0us unsigned char a,b; for(b = *; b 0; b-) for(a = *; a 0; a-);三重循环四重循环void DelayTimeDataUS() /误差0us unsigned char a,b,c; for(c = *; c 0; c-) for(b = *; b 0; b-) for(a = *; a 0; a-);/根据需要,可以再添加循环 for(a = *;a 0; a-);void DelayTimeDataUS() /误差0us unsigned char a,b,c,d; for(d = *; d 0; d-) for(c = *; c 0; c-) for(b =*; b 0; b-) for(a = *; a 0; a-);/根据需要,可以再添加循环 for(a = *;a 0; a-);注:TimeData为延时时间,单位为微秒,“*”处为变量,一般设置为十进制,可修改。表3.2 汇编语言延时程序框架表一重循环二重循环DELAYTimeDataUS: ;误差*us MOV R5,#*H DJNZ R5,$ RETDELAYTimeDataUS: ;误差*us MOV R6,#*HDL0: MOV R5,#*H DJNZ R5,$DJNZ R6,DL0/根据需要,可以再添加循环 MOV R5,#*DJNZ R5,$ RET三重循环四重循环DELAYTimeDataMS: ;误差*us MOV R7,#*HDL0: MOV R6,#*HDL1: MOV R5,#*H DJNZ R5,$ DJNZ R6,DL1DJNZ R7,DL0/根据需要,可以再添加循环 MOV R5,#*DJNZ R5,$ RETDELAYTimeDataS: ;误差*us MOV R7,#*HDL0: MOV R6,#*HDL1: MOV R5,#*HDL2: MOV R4,#*H DJNZ R4,$ DJNZ R5,DL2 DJNZ R6,DL1DJNZ R7,DL0/根据需要,可以再添加循环 MOV R5,#*DJNZ R5,$ RET注:TimeData为延时时间,单位为微秒,“*”处为变量,一般设置为十六进制,可修改。3.2 延时计算模块界面设计STC单片机开发小助手软件延时计算模块主要分为时钟频率选择、芯片类型选择、延时时间范围显示、延时时间设置、输出语言选项(C语言/汇编)、“包含调用时间”选项、“可传递延时函数”选项、“压站保护”选项以及代码输出这几个分区,其界面设计示意图如图3-5所示。STC单片机常见延时可分为3种:软件延时、硬件延时和可编程定时器延时。软件延时和可编程定时器延时实现通常会采用汇编或者C语言编程,有时也会采用混合语言编程;不同编程语言产生的延时误差及程序代码长度也不同,视具体延时时间和编程语言而定。基于此,我们在设计STC单片机开发小助手延时计算功能模块界面时,设计了两种延时程序代码编辑语言汇编和C语言,以便于用户选择;此外,在延时时间较小的情况下,比如I2C接口时序只需5s的延时,1s的延时误差会对控制过程产生很大影响,此时就需考虑函数调用时间、中断现场保护及恢复时间,用户可根据所需延时时间,选择或者不勾选“包含调用时间”选项;通常情况,对于延时时间较短,要求延时误差较小的情况下,一般采用汇编语言来编辑。图3-5 延时计算模块界面设计示意图图3-5中,“可传递延时函数”选项用来生成不同延时时间条件下含参延时传递函数,便于被其它函数灵活调用;“压栈保护”选项是针对生成汇编代码而言的,用来处理中断情况下对断点处现场的保护与恢复。用户在已选择“汇编”编辑语言、“压栈保护”的前提下,仍可以勾选“包含调用时间”选项,但事实上,压栈出栈过程已经将调用时间考虑进来,可不用再选择此项,可根据实际需要勾选“可传递延时函数”。图3-5中,时钟频率选择和芯片选择两个部分是用于用户在使用该软件时,选择STC单片机芯片的型号及单片机晶振频率,并与其它模块共享。此软件中STC单片机芯片型号主要分为常用的五种:89C51、89C52、90C51、90C52、15F2K60S,单片机晶振设有6MHz、11.0952MHz、12MHz、24MHz这四种时钟频率,当选定STC单片机型号和时钟频率时,可延迟时间范围便随之确定,显示在“延时时间范围显示区”框,用户可以在允许的延时时间范围内输入需要的延时时间。STC单片机不同型号芯片不同时钟频率具体延时范围如表3.3所示。表3.3 STC单片机不同芯片不同时钟频率下可延时时间范围情况表STC单片机类型时钟频率(晶振频率)6MHz11.0592MHz12MHz24MHzSTC89C5144294967295s2.170142330168887.889s22147483647s11073741823sSTC89C5244294967295s2.170142330168887.889s22147483647s11073741823sSTC90C5144294967295s2.170142330168887.889s22147483647s11073741823sSTC90C5244294967295s2.170142330168887.889s22147483647s11073741823sSTC15F2K60S0.33333357913940.333s0.18084194180739.741s0.16667178956969.667s0.0833389478484.333s3.3 延时计算模块Visual Studio2012中编程实现过程延时算法在Visual Studio 2012中编程实现过程实际上是围绕公式(3.1)(3.4)展开的。(3.1)(3.2)(3.3)(3.4)式3.1中InDelayTime输入的延时时间DelayTime应实现的延时机器周期数式3.2中actualvalue实际延时周期数1和2执行某条指令所需的机器周期a、b、c、d变量,代表不同指令执行次数,取值范围为0256式3.3中Error_time实际延时误差式3.4中Error_value机器周期数误差上式变量a、b、c、d是通过程序来获得的,也是延时算法实现的核心部分;软件编程实现的关键是找到a、b、c、d最优组合值,使Error_time降到最小,亮点在于对Error_value差值的补缺。编程实现延时算法主要分为两步,前期计算获得a、b、c、d最优值,后期将获得的最优组合情况以程序形式输出,采用将不同情况下的处理结果存储于字符串中,最后整体输出的方法。(1) 前期延时计算算法实现,见下()()。(i) 获得STC单片机型号和时钟频率,显示可延时时间,并对“包含函数调用时间”、“压栈保护”选项配置情况进行判断,并用设置临时变量Temp进行处理,具体流程如图3-6所示。图3-6 延时模块可延时时间范围显示流程图在图3-6中,Min=机器周期*(2+temp)/四舍五入取小数点后五位Max=机器周期*(231)-1)/四舍五入取小数点后三位(ii) 获得延时时间InDelayTime,并判断数据是否合法。如果合法则转换为机器周期数,并设置标志符Flag,用来记录变量a、b、c、d最优组合方案是否找到。具体实现如下图3-7图3-10所示。图3-7 延时模块a、b、c、d最优组合方案搜索流程图1图3-7中, (3.5)(3.6)(3.7)式3.5中Data1延时程序最外层循环一次所需的机器周期数式3.6中Data2次外层循环一次所需的机器周期数式3.7中Data3从外到内第3层循环一次所需的机器周期数图3-8 延时模块a、b、c、d最优组合方案搜索流程图2图3-8中,对a、b、c、d的值进行四层循环判断,符合条件,则跳出此循环进入“下一步”,如图3-9所示;正常情况下,图中箭头方向是不会发生的。图3-8中虚线框内a、b、c、d具体判断条件如图3-10所示。图3-9 延时模块用C#语言编程实现过程流程图图3-10 图3-8中虚线框内判断条件具体实现过程图3-10所示,对a、b、c、d进行判断的主要依据Error_value值是否为零;此外,还对在长延时情况下的程序进行了优化。当DelayTime大于100000,且Error_value小于20时,便可以认为找到所需的a、b、c、d,这时,可以忽略Error_value给实际延时带来的误差。(iii) 对Error_value延时误差(机器周期数)值进行填补,如图3-11所示。图3-11 对Error_value延时误差值Error_value进行填补流程图图3-11中序号处代码情况分为汇编和C语言两种情况,其具体分别如表3.4和表3.5所示。表3.4 图3-11中序号代码(汇编)序号程序代码NOPNOPMOV R5,#(Error_value-2)/2DJNZ R5,$NOPNOPMOV R5,#Error_value/2DJNZ R5,$表3.5 图3-11中序号代码(C语言)序号程序代码_NOP()_;_NOP()_;for(a =(Error_value/2);a0;a-);_NOP()_;_NOP()_;for(a=(Error_value-1)/2;a0;a-)(2) 后期延时程序输出过程,见下()()。(i) 如图3-12所示,是延时程序中延时时间显示部分代码的程序处理过程。延时时间InDelayTime单位为毫秒,利用临时变量Temp进行处理,最后以“SMSUS”的形式存储于字符串String1中,便于后期延时程序整体输出。图3-12 延时模块延时程序中延时时间处理流程图(ii) 最优组合值a、b、c、d程序输出的过程,即延时程序中循环部分生成代码过程,将需要输出的代码存储于字符串String2中,分为汇编和C语言两种编辑情况,具体实现如图3-13图3-14所示。图3-13中,采用汇编编辑语言输出程序时,对a、b、c、d的值进行了转换处理,均以十六进制输出;当其值大于160,转换成十六进制时,首位为字母,需要在前面加“0”,而图3-14采用C语言输出时,则不需要。图中,根据a、b、c、d的值选择循环输出,将各种情况下需要输出的代码均存储在字符串String2中,便于后期整体输出。图3-13 延时模块延时程序中循环部分代码生成过程图(汇编)图3-14,当选择C语言输出程序时,其中对String2的处理与图3-13类似,这里相对简单些,无需对a、b、c、d的值进行处理,直接以十进制输出即可,采用了for循环来实现。图3-14 延时模块延时程序中循环部分代码生成过程图(C语言)(iii) 选择汇编编辑语言输出,具体过程如图3-15图3-17所示。图中,A表示包含调用时间,B表示可传递延时函数,C表示压栈保护;InDelayTime为延时时间,DelayTime为延时所需的机器周期数,其值等于InDelayTime除以机器周期,String1为图3-12中存储的延时时间代码,String2代表图3-13图3-14存储的延时循环代码。在图3-15中,定义了一个字符串String,并初始化为“Null”,用来存储延时程序全部代码;两个中间变量Temp1、Temp2,表示ABC不同选择组合下延时程序需要考虑的额外时间(用机器周期表示);一个变量Error_T,用来表示实际延时误差,其计算方式如式3.8所示:(3.8)其中,temp为Temp1或者Temp2,Error_value为以机器周期方式表示的延时误差,其计算方式如下式3.9和式3.10所示:(3.9)(3.10)其中,a、b、c、d为图3.3.2中a、b、c、d的值。图3-15 汇编语言输出时软件编程实现过程流图1图3-15中左边表示考虑含调用时间和压栈保护时,字符串String的存储情况,右边表示仅考虑调用时间时,String的存储情况。图3-16 汇编语言输出时软件编程实现过程流图2图3-16表示不考虑调用时间、不生成可传递延时函数及不进行压栈保护时,String的存储情况。图3-17 汇编语言输出时软件编程实现过程流图3图3-17中,左边表示进行压站保护,并生成可传递延时函数时,String的存储情况;右边选择包含“可传递函数”时,String的存储情况。(iv) 图3-18图3-19主要是针对选择C语言输出时,程序设计实现过程。图中定义的变量与步骤()中选择汇编处理时相同,处理过程也与之相似。图3-18 C语言输出时软件编程实现过程流图1图3-18为考虑A和ABC三种情况均不考虑时,字符串String的存储情况。两种选择下,String存储的内容形式相同,不同在于存储循环代码的String2内容不同。图3-19 C语言输出时软件编程实现过程流图2图3-19左边表示选择生成延时函数的条件下,考虑程序调用时间时,String字符串的存储情况,右边表示不考虑程序调用时间时,String的存储情况。(v) 当延时时间较小时,可以直接按照图3-20图3-22输出。图3-20,虚线框内Temp代表Temp1或者Temp2,对含调用时间、生成延时函数以及堆栈保护这三种情况下程序运行需要的额外时间进行计算处理,如果产生了额外时间需要从延时时间里扣除,以提高延时误差。图3-20和图3-22中,Value为定义的一个临时变量,以机器周期数表示需要延时时间;如果其值小于5,则选择图中方式直接输出程序,代码存储于字符串String中,分为汇编和C语言两种情况。这里需要说明的一点是字符串String存储内容里画横线处需要重复的n次,n的值为Value值除以2再减1。图3-20 延时程序代码输出软件实现流程图1(汇编)图3-21 延时程序代码输出软件实现流程图2(汇编)图3-22 延时程序代码输出软件实现流程图(C语言)4 定时/计数器模块4.1 定时/计数器实时系统一般都要具备定时和计数的功能。在工业检测、控制及智能仪器等应用场合,经常需要系统完成定时控制、定时扫描、定时输出、延时和对外部事件计数等功能,有时也利用其定时功能产生精确的定时时间,作串行口的波特率发生器。实现单片机定时的方法有多种,如软件定时、硬件定时、可编程定时器等定时;但是,软件定时和硬件定时都有各自的缺点。软件定时虽然不需要增加任何硬件,仅仅通过高级语言编程便可以实现,但是会长期占用CPU;硬件定时需要系统额外增加电路,使用起来不灵活。STC-51系列单片机内部一般都集成了定时电路,即可编程定时/计数器,通常为16位加1计数器T0、T1,并可通过定时控制寄存器TCON和工作方式控制寄存器TMOD来控制其工作于定时模式或者计数模式,也可设定其工作方式。其内部结构逻辑图如图4-1所示。图4-1 定时/计数器内部结构逻辑图STC-51单片机定时/计数器具有四种工作方式,如表4.1所示。表4.1 STC单片机定时/计数器工作方式表工作方式T0T1寄存器位数解释说明工作方式013位:计数器模式:计数值(1213):N=8192-XTH8位和TL低5位定时器模式:Td=(8192-X)Tcy工作方式116位计数器模式:计数值(1216):N=65536-X定时器模式:Td=(65536-X)Tcy工作方式28位自动重装初值的8位定时计数器;可用作串行口波特率发生器工作方式38位T0可作两个独立的8位定时/计数器,其工作方式同工作方式0、工作方式1注:N为计数值,X为定时/计数器T0/T1设定的初值;Td为定时时间;Tcy为机器周期;事实上,STC-51单片机定时/计数器两种工作模式的本质都是相同的,定时模式是对内部时钟信号计数,计数模式是对外部事件(单片机引脚采集到的脉冲)计数,都是通过加法计数器对脉冲进行计数。因此,我们在使用单片机定时功能和计数功能时,对其操作控制的程序代码都是相似的,这就便于将实现其控制程序进行模式化,用软件来编辑输出。4.2 定时/计数模块界面设计STC单片机开发小助手软件定时/计数器模块主要分为定时器选择、门控位及工作模式选择、工作方式选择、定时时间设置、误差时间显示、定时/计数器初值显示、TMOD控制方式显示、输出语言选项(汇编/C语言)、包含生成延时函数选项、包含生成定时器中断选项及代码输出等功能,其界面设计示意图如图4-2所示,各部分具体作功能用解释如表4.2所示。图4-2 定时/计数器模块界面设计示意图表4.2 图4-2中各个部分作用说明情况表名称解释说明时钟频率选择和芯片选择作用同3.2小节定时器选择选择T0或者T1,利用TMOD中C/T位来控制;C/T=0,定时;C/T=0,计数门控位选择门控位是TMOD最高位GATE位,用来控制定时器启动方式,可对其进行设置,为“0”或者“1”;当设为“0”时,定时仅由TCON中TR0/TR1启动定时,当设为“1”时,由外部中断引脚INT0和TR0或INT1和TR1工作模式选择设定定时/计数器工作于工作方式0、工作方式1、工作方式2或者工作方式3定时时间设置输入定时时间误差时间显示输出预定延时时间与实际延时时间的差值定时/计数器初值显示显示具体延时时间应给定时/计数器所赋初值TMOD控制方式显示针对以上选择,显示TMOD应该初始化值输出语言选项(汇编/C语言)选择用汇编或者选择C语言编写所需定时程序代码延时函数选项选择此项,生成的程序中会有一段带参数的延时函数,延时时间等于实参乘以输入的定时时间定时器中断选项选择此项,生成带有中断响应的定时程序生成按钮生成一段较完整的程序,用户可以在其中添加自己的代码。如果延时函数选项和定时器中断选项均未选中的话,只生成一段仅仅延时一段时间的程序4.3 定时/计数模块在Visual Studio2012中设计思路STC单片机开发小助手定时/计数功能模块设计思路流程图如图4.3所示。首先要获得所用单片机芯片类型及时钟频率,其次确定定时器类别(T0/T1),然后判断其工作模式、GATE位、工作方式、程序代码编写语言,以及是否包含延时函数或者定时中断函数,两者可分别选择。定时器T0和T1工作在工作方式0、工作方式1和工作方式2时,大致都是相同的,需要说明的是,定时器选择在工作方式3工作时,只能选择定时器T0,也就是说,在图4-3中,当定时器选择T0时,可以选择四种工作方式;当定时器选择T1时,只能选择工作方式0、工作方式1或者工作方式2。图4-3 软件定时/计数模块操作流程图图4-3流程图中最下方框图中的序号,分别代表GATE位(置“0”或“1”)、工作方式(方式0、1、2、3)以及程序输出语言不同组合时的情况。T0不同组合后共有十六种,T1组合后共有十二种,合二十八种组合。每种组合均包含两大类:定时方式和计数方式;而这每类中又细分为四小类:仅包含延时函数、仅包含定时中断、既包含延时函数又包含定时中断和既不包含延时函数又不包含定时中断。我根据STC单片机定时/计数器具体功能使用情况分类,逐层判断,综合编程,实现软件针对STC单片机的定时/计数功能的控制程序代码的快速生成功能。4.4 定时/计数模块编程实现过程软件定时/计数模块用C# 编程实现过程可大致分(1)(3),每步具体情况如下。(1) 获得用户的选择,如单片机型号及时钟频率、定时器、GATE门控位、定时器工作模式及工作方式、程序编辑语言的选择、是否包含延时中断等,并利用其控件的相关属性或者另设置变量记录下来。(2) 用字符串记录用户输入的具体定时/计数数值,并根据步骤一记录的用户选择的工作方式来判断获得的数值是否合法;若合法,则计算定时器应初始化的初值,并依据用户的选择对TMOD进行赋值,设置TMOD各控制位;否则,提示“不支持,请重新输入”。(3) 根据用户选择的程序编辑语言、是否选择“延时函数”及是否选择“定时中断”,驱动“生成”按钮生成用户所需要的程序代码。图4-4图4-5为软件定时/计数模块用C#语言编程实现过程流程图,图中相关变量及参数说明如表4.3所示。图4-4 定时/计数模块用C#语言编程实现过程流程图1表4.3 定时/计数模块编程具体实现流程图中相关参数设置情况变量名称解 释MinMax可定时/计数值范围,Min为最小值0,Max为最大值方式0:Max=8192;方式1:Max=65536; 方式2和3:Max=256TimerTime用户输入的定时/计数值time_temp中间变量,用来存储定时/计数周期数time_temp=(int)(TimerTime/机器周期)TH定时器高8位;TH=time_temp/256TL定时器低8位;TL=time_temp%256StrTHTH值以文本格式存储StrTLTL值以文本格式存储Error_time实际定时误差Error_time=time_temp*机器周期-TimerTime续表4.3 定时/计数模块编程具体实现流程图中相关参数设置情况变量名称解 释Way工作方式标志符;可为0、1、2、3,代表工作方式0、1、2、3CTTMOD中C/T位控制标志;0为定时器模式;1为计数器模式TimeCode_Text字符串,用来存储将要输出的程序代码StrTMOD字符串,用以文本格式来存储TMOD存储的数值StrTimerIndex字符串,用以文本格式来存储定时器的种类,为“0”、“1”或“2”,分别对应定时器T0、T1或T2如图4-4所示,软件运行时,首先查询用户选择方式,然后对用户输入的数据TimerTime进行合法性验证,不管是定时模式还是计数模式,其可定时/计数范围都是相同的;检验合法,则给T0/T1的TH和TL初始化赋值,会在软件中显示出来,并用Way记录此时定时器工作方式;否则,提示“不支持,请重新输入”。事实上,用户在设置相关参数时,软件会自动存储用户选择的芯片类型、时钟频率、定时器工作模式、工作方式等相关参数设置情况。上述完成以后,软件将运行到下一步,即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台数据清洗算法在智能仓储物流管理中的应用探索报告
- 水利水电工程电气施工方案示例
- 企业名称ESG报告2024上半年综合报告康复治疗器械
- 小学语文笑话故事教学方案
- 公交车调度系统智能化改造方案
- 企业安全生产资质审核报告范文
- 儿童改革开放小报制作模板
- 基于DSP图像处理的鸡蛋新鲜度实时无损检测技术探索与实践
- 小学六年级数学下册综合试卷汇编
- 财务会计基础知识点总结及典型练习题
- 汽车行业中的环境保护与可持续发展
- 打起手鼓唱起歌混声合唱简谱
- 空调安装免责协议
- QGW 201175-2019-金风陆上风力发电机组 塔架通用防腐技术规范
- 老友记第一季字幕
- 输电线路风偏计算基本方法
- 骨科概论课件
- 第5章光电成像系统
- GB/T 9117-2010带颈承插焊钢制管法兰
- GB/T 5455-2014纺织品燃烧性能垂直方向损毁长度、阴燃和续燃时间的测定
- GB/T 30475.2-2013压缩空气过滤器试验方法第2部分:油蒸气
评论
0/150
提交评论