STC单片机开发助手设计.docx
《STC单片机开发助手设计.docx》由会员分享,可在线阅读,更多相关《STC单片机开发助手设计.docx(53页珍藏版)》请在冰豆网上搜索。
STC单片机开发助手设计
普
通
本
科
毕
业
设
计
题目:
STC单片机开发助手设计
学院软件与通信工程学院
学生姓名童慧玲学号*******
专业电子信息工程届别2015届
指导教师张勇职称副教授
二O一五年五月
一、普通本科生毕业论文(设计)诚信承诺书
毕业论文(设计)题目
STC单片机开发助手设计
学生姓名
童慧玲
专 业
电子信息工程
学号
0113262
指导老师
张勇
职称
副教授
所在学院
软件与通信工程学院
诚信承诺
本人慎重承诺和声明:
我承诺在毕业论文(设计)活动中遵守学校有关规定,恪守学术规范,在本人的毕业论文中未剽窃、抄袭他人的学术观点、思想和成果,未篡改研究数据,如有违规行为发生,我愿承担一切责任,接受学校的处理。
学生(签名):
2015年05月15日
摘要
本设计选用VisualStudio2012应用程序开发平台,采用C#编程语言,基于STC系列单片机基本功能,开发了一款能够实现STC单片机基本功能控制程序代码快速生成的软件,辅助快速开发单片机项目。
STC单片机开发小助手,能够根据用户对单片机相关参数的配置,实现快速生成延时程序、单片机定时/计数程序以及单片机串口通信波特率初始化控制程序,并能以汇编、C语言两种编程语言输出带参数或者有堆栈保护的延时程序、包含定时器中断处理或者延时函数的定时/计数程序和包含串口中断处理或者延时函数的串口初始化程序,可适用于以STC单片机为核心的智能控制类项目中。
【关键词】STC单片机;单片机小助手;串口通信;软件设计
Abstract
ThisdesignselectedVisualStudio2012,anapplicationdevelopmentplatform,anditusedC#programminglanguagetodevelopeasoftwarecalledSTCSCM(SingleChipMicrocomputer)developmenthelper.ThissoftwareisbasedonthebasicfunctionsoftheseriesofSTCmicrocontroller,couldquicklygenerateSTCmicrocontrollercontrolprogramcodeforitsgeneralfunctionbyusingthissoftware,auxiliarilycontributingtherapiddevelopmentofsinglemicrocomputerproject.Anditcangeneratetheprogramcode,accordingtotheusers’settingsfortheirownneeds,thatcanbeusedfordelayingaprocedureforaspecialtime,timing,counting,andintializingthebaudrateoftheserialcommunicationoftheSCM.Besides,itcangeneratethecontrollingcodeintwoprogramminglanguagessuchasCprogramminglanguageandassemblylanguage,includingatime_delayfunctionwithparametersorstackprotection,atimerfunctionwithinterrupthandling,acountingfunctionwithinterrupthandling,aninterrupt_handlingfunctionforserialportaswellasasegmentprogramfortheserialinitializationifnecessary.ThegreatestmeritofthissoftwareisthatitcanbeappliedtotheintelligentcontrolprojectscenteringonSTCmicrocontroller.
【Keywords】STCmicrocontroller;MCUhelper;serialcommunications;softwaredesign
STC单片机开发助手设计
1引言
本章主要介绍了STC单片机开发助手软件设计与实现的研究背景与研究意义,此类开发工具在STC单片机中的应用现状,以及毕业设计思路和主要任务。
1.1选题背景
随着微电子技术和计算机网络技术的蓬勃发展,单片机已逐渐被应用于生活的各个领域[1],不论是在国内还是在海外,无论是在全球连锁的大型企业,还是小到个体商户,甚至是行走在路上,都可以看到它的身影。
单片机以自身前所未有的优点:
体积小、性能好、性价比高、灵活性强、可靠性高,得到了十分广泛的应用,譬如:
仪器仪表、医用设备、航空航天、专用设备的智能管理及过程控制等领域,几乎无孔不入,成了智能化工具的代表。
单片机的出现,不仅在于它带来的可观的经济效益,更重要的是,从根本上改变了控制系统传统的设计思想和设计方法,通过软件控制的方法,节省了相应的硬件资源,且更利于智能化处理。
那么,如何更好更快地开发单片机,这便成立众人瞩目的焦点。
目前已有的单片机开发工具已有不少,如主要的KeiluVision、Proteus、VSPD、串口调试工具、ASM汇编器等等,这些均可辅助开发单片机,但是针对实现基本功能代码编写过程——延时计算程序、计时器/计数器初值的设定程序、串口通讯波特率初值计算、波特率误差的计算等,帮助快速编辑的工具并不多,目前只有些较简单的单片机工具箱等,但是功能并不全,待完善的地方还很多。
此类软件常常不受工程师重视,但是使用频繁,实用性非常好,市场前景不错,应用领域也将会相当广泛,有涉及单片机的地方将都会有它的身影,和keilC51软件一样。
1.2研究目的
根据市场实际情况及单片机广泛应用现状,开发STC单片机开发小助手此款软件的需求可分为两个方面,一方面用于教学,另一方面给可以用于实际的单片机工程项目开发。
随着微电子、IC集成电路行业的迅速发展,单片机行业已经引起各行业的关注。
在单片机开发过程中,不可避免要重复编写一些常用代码,如延时、定时、波特率设置等程序,并且在不同应用场景中设置的参数也各不相同,需要不断重复地计算、初始化、编程,这种繁琐的过程给单片机爱好者带来了不少困扰,有时也会因为长时间未接触而遗忘具体设置方法,需要再次查阅相关资料,开发一款能快速生成开发单片机常用代码的软件已成为一种需要。
此项研究的目的就是为了开发一款实用性较强、基本功能较全且性能好的STC单片机辅助开发工具,提供常用51系列单片机的参数计算和资料查询功能,并能快速生成实现基本功能的C语言代码和汇编代码,在此基础上再扩展一些其他的功能,使其专业化和智能化。
此款软件对于初学者、单片机开发商、电信工程师等单片机爱好者,无疑是一个很好的开发助手工具;事实上,STC单片机开发小助手可以用于任何涉及到单片机的领域,如教学、基于单片机智能家具的开发等等。
1.3实现办法
本设计分为硬件设计和软件设计两大模块。
硬件设计一方面实现单片机常用的基本功能,并扩展一部分功能,另一方面用于验证软件STC单片机开发小助手的使用效果;软件设计是为了辅助开发STC单片机,加速其开发过程。
本设计硬件模块与软件模块是相互辅助的,硬件模块通过软件模块查询相应的芯片资料,对软件设置相应的参数,软件模块输出硬件需要的控制代码,其相互关系如下图1-1所示。
图1-1软件模块与硬件模块关系图
STC单片机开发小助手软件是基于VisualStudio2012开发平台,使用MicrosoftVisualC#程序语言编写的。
此软件主要分为六个模块:
软件界面框架和总体布局、软件延时模块、定时/计数器计算模块、串口初始化配置模块、串口通信助手模块、辅助资料查询模块,我主要负责软件延时模块、定时/计数器计算模块、串口初始化配置模块这三个模块。
●软件延时模块主要是生成一定延时时间的延时代码,可选择用汇编或者C语言来编写,延时时间由用户自己输入。
●定时/计数器计算模块主要是用来生成一段较完整的定时或计数程序,定时/计数初值、程序编辑语言及其工作方式均由用户自行设定。
●串口初始化配置模块主要是为了串口通信前,初始化定时器,并生成一段较完整的代码,程序编辑语言由用户自己选择。
2STC单片机开发小助手开发平台及界面
2.1STC单片机开发小助手硬件开发平台
STC单片机开发小助手的设计用到了硬件平台,此平台主要用来测试软件的质量及其实用性。
硬件平台分为温度传感器模块、LED液晶显示模块、IC卡模块、串口通信模块等[2]~[4](如图2-1所示),温度传感器模块主要用来检测环境温度,当温度超过正常值后便立即通过蜂鸣器报警;LED液晶显示模块主要用来显示信息,如温度、日历等需要显示的信息;IC卡模块可组合其它电路,进一步完善做成智能卡,也可以简单地用来感应,做成车钥匙、智能开关等等;串口通信模块主要用于外设与单片机之间的数据传输。
该模块通过使用STC单片机开发小助手快速查询相关芯片资料,设置需要的参数,驱动软件生成相应的代码(C语言/汇编)[5]~[12],再将生成的代码用其它单片机开发工具写入硬件平台,检测是否实现预计效果。
图2-1硬件平台主要模块示意图
2.2STC单片机开发小助手软件开发平台
软件开发平台[14]~[24]选用的是Microsoft公司推出的Windows平台应用程序开发环境VisualStudio系列中最卓越的版本VisualStudio2012。
该版本工作流程更精简,整体布局更合理,并可快速访问工具,附有更实用的模板、设计及测试调试工具、及BlendforVisualStudio提供的一系列可视化工具集。
WPF(WindowsPresentationFoundation),新一代用户界面框架,主要包括引擎和编程框架,用来提供统一的编程模式、语言及框架。
WPF可将界面设计与开发分离,并可以实现多媒体交互用户图形界面。
此外,Microsoft还引入了XAML(ExtensibleApplicationMarkupLanguage可扩展应用标记语言),使构建和重用UI(userinterface用户界面)界面的工具更全面,并提供了UI说明模式。
XAML还可使UI界面设计从基础代码中脱离出来,加强了开发人员与设计人员间的合作交流。
软件设计使用的编程语言是Microsoft公司发布的一种面向对象的、运行于Microsoft.NETFramework之上的高级程序设计语言——C#。
C#继承C和C++的基本功能,包括继承、接口,语法与Java极其相似,并可先编译成中间代码后运行。
C#综合了VisualStudio可视化操作与C++语言的高效性,支持面向组建编程,是.NET开发首选语言。
2.3STC单片机开发小助手界面布局
STC单片机开发小助手软件界面设计本着简单易懂、便于用户操作的原则,合理布局界面,注重颜色搭配,使其看之和谐,用之便捷,给人以整洁美观、清新舒爽之美感。
软件界面大致分为五个部分:
“标题+菜单”、“功能模块区”、“主要参数配置区”、“主要信息输出区”、“信息提示区”,如图2-2所示。
图2-2STC单片机开发小助手软件设计界面示意图
图2-2中各个区域具体规划如下表2.1所示。
表2.1STC单片机开发小助手软件界面解释分析表
名称
解释
标题+菜单
显示软件名称和实现简单软件设置
主要参数配置区
配置单片机相关参数,如其型号和时钟频率
功能模块
用来设置单片机基本功能模块,如延时、定时/计数器、串口波特率以及其他功能模块
主要信息显示区
主要用来显示生成的代码及与之相关的配置选项
信息提示区
用来显示时间、当前状态等相关信息
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.1C语言延时程序框架表
一重循环
二重循环
voidDelayTimeDataUS()//误差0us
{
unsignedchara;
for(a=**;a>0;a--);
}
voidDelayTimeDataUS()//误差0us
{
unsignedchara,b;
for(b=**;b>0;b--)
for(a=**;a>0;a--);
}
三重循环
四重循环
voidDelayTimeDataUS()//误差0us
{
unsignedchara,b,c;
for(c=**;c>0;c--)
for(b=**;b>0;b--)
for(a=**;a>0;a--);
//根据需要,可以再添加循环
for(a=**;a>0;a--);
……
}
voidDelayTimeDataUS()//误差0us
{
unsignedchara,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
MOVR5,#**H
DJNZR5,$
RET
DELAYTimeDataUS:
;误差**us
MOVR6,#**H
DL0:
MOVR5,#**H
DJNZR5,$
DJNZR6,DL0
//根据需要,可以再添加循环
MOVR5,#**
DJNZR5,$
……
RET
三重循环
四重循环
DELAYTimeDataMS:
;误差**us
MOVR7,#**H
DL0:
MOVR6,#**H
DL1:
MOVR5,#**H
DJNZR5,$
DJNZR6,DL1
DJNZR7,DL0
//根据需要,可以再添加循环
MOVR5,#**
DJNZR5,$
……
RET
DELAYTimeDataS:
;误差**us
MOVR7,#**H
DL0:
MOVR6,#**H
DL1:
MOVR5,#**H
DL2:
MOVR4,#**H
DJNZR4,$
DJNZR5,DL2
DJNZR6,DL1
DJNZR7,DL0
//根据需要,可以再添加循环
MOVR5,#**
DJNZR5,$
……
RET
注:
TimeData为延时时间,单位为微秒,“**”处为变量,一般设置为十六进制,可修改。
3.2延时计算模块界面设计
STC单片机开发小助手软件延时计算模块主要分为时钟频率选择、芯片类型选择、延时时间范围显示、延时时间设置、输出语言选项(C语言/汇编)、“包含调用时间”选项、“可传递延时函数”选项、“压站保护”选项以及代码输出这几个分区,其界面设计示意图如图3-5所示。
STC单片机常见延时可分为3种:
软件延时、硬件延时和可编程定时器延时。
软件延时和可编程定时器延时实现通常会采用汇编或者C语言编程,有时也会采用混合语言编程;不同编程语言产生的延时误差及程序代码长度也不同,视具体延时时间和编程语言而定。
基于此,我们在设计STC单片机开发小助手延时计算功能模块界面时,设计了两种延时程序代码编辑语言——汇编和C语言,以便于用户选择;此外,在延时时间较小的情况下,比如I2C接口时序只需5μs的延时,1μs的延时误差会对控制过程产生很大影响,此时就需考虑函数调用时间、中断现场保护及恢复时间,用户可根据所需延时时间,选择或者不勾选“包含调用时间”选项;通常情况,对于延时时间较短,要求延时误差较小的情况下,一般采用汇编语言来编辑。
图3-5延时计算模块界面设计示意图
图3-5中,“可传递延时函数”选项用来生成不同延时时间条件下含参延时传递函数,便于被其它函数灵活调用;“压栈保护”选项是针对生成汇编代码而言的,用来处理中断情况下对断点处现场的保护与恢复。
用户在已选择“汇编”编辑语言、“压栈保护”的前提下,仍可以勾选“包含调用时间”选项,但事实上,压栈出栈过程已经将调用时间考虑进来,可不用再选择此项,可根据实际需要勾选“可传递延时函数”。
图3-5中,时钟频率选择和芯片选择两个部分是用于用户在使用该软件时,选择STC单片机芯片的型号及单片机晶振频率,并与其它模块共享。
此软件中STC单片机芯片型号主要分为常用的五种:
89C51、89C52、90C51、90C52、15F2K60S,单片机晶振设有6MHz、11.0952MHz、12MHz、24MHz这四种时钟频率,当选定STC单片机型号和时钟频率时,可延迟时间范围便随之确定,显示在“延时时间范围显示区”框,用户可以在允许的延时时间范围内输入需要的延时时间。
STC单片机不同型号芯片不同时钟频率具体延时范围如表3.3所示。
表3.3STC单片机不同芯片不同时钟频率下可延时时间范围情况表
STC单片机
类型
时钟频率(晶振频率)
6MHz
11.0592MHz
12MHz
24MHz
STC89C51
4~4294967295μs
2.17014~2330168887.889μs
2~2147483647μs
1~1073741823μs
STC89C52
4~4294967295μs
2.17014~2330168887.889μs
2~2147483647μs
1~1073741823μs
STC90C51
4~4294967295μs
2.17014~2330168887.889μs
2~2147483647μs
1~1073741823μs
STC90C52
4~4294967295μs
2.17014~2330168887.889μs
2~2147483647μs
1~1073741823μs
STC15F2K60S
0.33333~357913940.333μs
0.18084~194180739.741μs
0.16667~178956969.667μs
0.08333~89478484.333μs
3.3延时计算模块VisualStudio2012中编程实现过程
延时算法在VisualStudio2012中编程实现过程实际上是围绕公式(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—