单片机频率计程序设计.docx
《单片机频率计程序设计.docx》由会员分享,可在线阅读,更多相关《单片机频率计程序设计.docx(34页珍藏版)》请在冰豆网上搜索。
单片机频率计程序设计
沈阳工程学院
课程设计任务书
课程设计题目:
频率计程序设计
系别自动控制工程系班级测控本091
学生姓名喻志华学号2009308125
指导教师吕勇军职称教授
课程设计进行地点:
F422
任务下达时间:
11年12月31日
起止日期:
11年12月31日起——至12年1月13日止
教研室主任年月日批准
1.设计主要内容及要求;
编写频率计程序。
要求:
1)能够测量频率并显示。
2)能够进行闸门时间选择。
2.对设计论文撰写内容、格式、字数的要求;
(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。
(2).学生应撰写的内容为:
中文摘要和关键词、目录、正文、参考文献等。
课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
(4).课程设计论文装订顺序为:
封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
3.时间进度安排;
顺序
阶段日期
计划完成内容
备注
1
12月31日
教师讲解题目,学生查阅相关资料
2
1月4日
查阅相关资料、进行方案论证
3
1月5日
参数计算、确定闸门时间切换方法
4
1月6-8日
编写程序
5
1月9-11日
调试程序
6
1月12日
撰写论文
7
1月13日
论文答辩
沈阳工程学院
频率计程序设计课程设计成绩评定表
系(部):
自动控制工程系班级:
测控本091学生姓名:
喻志华
指导教师评审意见
评价
内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价
内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评阅教师签名:
年月日
课程设计总评成绩
分
中文摘要
频率测量仪器使用在生产和科研的各个部门,也是某些大型系统的重要组成部分。
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
其基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本次设计的数字频率计将采用定时、计数的方法测量频率,采用一个LCD显示器动态显示4位数。
测量范围从100Hz-2MHz的方波。
本频率计的基本设计原理是通过控制按钮来控制闸门时间,利用T1进行定时,所定时间即为闸门时间,在定时的同时利用T0进行计数,一旦时间到了,即开始对TH0和TL0中的数据进行数据转换,转换后的BCD码即可利用液晶显示器显示。
虽然实现频率测量有专用的频率测量仪器,但不易用于特殊场合。
而本设计介绍的用单片机实现的频率测量仪,利用分频和单片机的计数功能来实现等精度的测量.该频率测量仪器可独立使用;也可方便的嵌入电路系统中,并且将降低产品的成本,有利于新产品的设计与研制。
本次设计通过对一个基于单片机的功能实现频率计的设计学习,详细介绍了单片机应用中的数据转换显示、LCD显示原理和单片机的定时原理。
从而达到学习、了解单片机相关指令在各方面的应用的目的,将理论与实践成功的结合起来。
关键词单片机频率测量分频器硬件软件
1设计任务描述
1.1闸门时间的确定
当测量频率一定时,闸门时间选得越长,测量精度越高。
本次设计通过对按钮的控制来选择闸门时间,选择四个不同的闸门时间:
1ms、10ms、100ms、1s。
1.2信号的采集
本次实验通过交叉开关XBR1,选择P0.0作为信号输入端口。
1.3定时与计数
设置定时器T0作为外部计数器,T1作为定时器,通过控制闸门时间控制T1的定时,通过控制T1的启停来控制T0的计数,在T1开启的阶段由T0对信号进行计数。
在闸门时间范围内,查看计数器T0所计的数,并由此算出被测量信号的频率。
1.4数据处理
数据的处理对于c8051f020单片机的指令没有可以直接将计数/定时器中所存放的16位的数据转换为10进制的数据用来显示输出。
所以对于TH0里的数值通过*256进行转换,而对于TL0里的数值%100、%10来进行转换。
1.5液晶显示
将转换的数据放入地址中,然后通过查表的方式,利用液晶显示器将数据显示出来。
2设计思路
2.1程序流程图
2.2程序原理
2.2.1时钟初始化。
原理选择内部时钟2MHZ,设定为1ms的初值。
MOVXBR2,#40H
MOVXBR1,#02H;分配引脚,p0.0分配给t0
SETBEA;总使能中断
SETBTR0;T0开始计时
SETBTR1;T1开始计时
SETBET1;开启定时器1的中断
MOVCKCON,#08H;t0不分频,t1分频
MOVTMOD,#1DH;t0计数,t1定时
MOVTH1,#0FFH
MOVTL1,#59H
MOVTH0,#0
MOVTL0,#0统时间
2.2.2闸门时间控制模块。
原理:
闸门时间的选择是通过读取P5口的状态来控制的,然后通过基准的定时时间1ms时间,通过计算使其相应的在定时器中断中循环次数来控制闸门时间。
比如要设定1s的闸门时间,则应该在中断中循环1000次。
循环的次数是存储在R1,R0中,其中R0为内循环,R1为为循环。
MOVA,P5
JBACC.0,AAA
JBACC.1,BBB
JBACC.2,CCC
AJMPKKK
AAA:
MOV30H,#1;10ms的设置
AJMPDDD
BBB:
MOV30H,#2;100ms的设置
AJMPDDD
CCC:
MOV30H,#3;1s的设置
AJMPDDD
KKK:
MOV30H,#0;1ms的设置,这是默认的状态
DDD:
MOVDPTR,#0F00H
MOVR0,30H
MOVA,R0
MOVCA,@A+DPTR;查表操作
MOVR1,A
MOVA,30H
CJNEA,#03H,LOP1
MOVR2,#03H
AJMPLOP2
LOP1:
MOVR2,#00H
LOP2:
MOVA,R1
MOV33H,A
查表部分为:
ORG0F00H
TAB:
DB00H,0AH,64H,0C8H
下图为P5口的中的原理图,从图中可以看出P5口与按键K相对应的。
图1.P5口控制按钮图
2.2.3定时器计数器设置
TIMER:
CJNER1,#00,LOD1;判断R1,R2寄存器的状态来控制循环
CJNER2,#00,LOD2
CLRTR0;当达到设定时间的时间后关闭计时
CLRTR1
AJMPLOD
LOD1:
DJNZR1,LOD
AJMPLOD
LOD2:
MOVR1,33H
DJNZR2,LOD
LOD:
;定时器初始化,时间设定为1ms。
MOVTH1,#0FFH
MOVTL1,#59H
RETI
图2.频率计波形图
图3.T0/T1方式1的原理图
2.2.4数据转换模块
2.2.4.1数据转换模块一
初始化数据时间存储模块。
MOV20H,TH0;将十六进制数转换成十进制数,并将四位转换后的数值存放在22H~25H中最大为4095
MOV21H,TL0
MOV22H,#0
MOV23H,#0
MOV24H,#0
MOV25H,#0
2.2.4.2数据转换模块二
功能为判断高四位是否为0,为零则直接计算第八位,不为零则须把高四位给区出来。
;如果高四位大于零,则进行下面的运算
LCALLINIT
MOVA,20H
CJNEA,#00H,LOP;判断最高位是否为零,为零则只有三位数最大为255
AJMPNEXT
2.2.4.3数据转换模块三
高四位的转换
;高四位相当于20H*256
LOP:
MOVA,20H
MOVB,#2
MULAB
ADDA,23H;百位数加上高四位中的百位上的数
MOV23H,A
MOVA,20H
MOVB,#5
MULAB
ADDA,24H;十位上的数加上十位数
MOV24H,A
MOVA,20H
MOVB,#6
MULAB
ADDA,25H;个位上的数加上高八位上个位上的数
MOV25H,A
LCALLJINWEI;调用函数处理高八位
2.2.4.4数据转换模块四
低八位的数据转换子程序。
;定义一个函数入口这是计算低八位的十进制数
INIT:
MOVA,21H
LOPPP:
CLRCY
SUBBA,#64H
JCLODD
INC23H;百位自加一
AJMPLOPPP
LODD:
ADDA,#64H
LOP3:
CLRCY
SUBBA,#0AH
JCLOP4
INC24H;十位自加一
MOV21H,A
AJMPLOP3
LOP4:
ADDA,#0AH
MOV25H,A;个位给25H
RET
2.2.4.5数据转换模块五
把低八位和高四位结合部分,注意这个子函数只有在高四位有值时且高四位的值给取出来时才调用该模块。
JINWEI:
MOVA,25H;取出个位上的数
JW:
CLRCY;处理个位上的数
SUBBA,#0AH
JCYYY
INC24H
LJMPJW
YYY:
ADDA,#0AH
MOV25H,A;存取个位上的十进制数
MOVA,24H;取出十位上的数
JWW:
;处理十位上的数
CLRCY
SUBBA,#0AH
JCNET
INC23H;百位上加一
AJMPJWW
NET:
ADDA,#0AH
MOV24H,A;存取十位上的十进制数
MOVA,23H;取出百位上的数,进行转换
JW3:
CLRCY
SUBBA,#0AH
JCNEXT3
INC22H;把千位上的十进制数给存取了
AJMPJW3
NEXT3:
ADDA,#0AH
MOV23H,A;存取百位上的十进制数
RET
2.3.1实测结果与误差分析
量化误差为±1误差,被测信号与门控信号之间没有同步锁定的关系,门控信号何时到来是随机的。
在固定的闸门时间内可能多(或少)放过一个脉冲信号,在显示器的末位产生±1的附加误差。
2.4LCD显示
图4.液晶显示器原理电路图
2.4.1液晶显示初始化模块。
这个子函数在用液晶显示之前都调用一次。
PORTINIT:
ANLA,#0
MOVXBR0,A;交叉开关寄存器0
MOVP74OUT,#0F0H;端口4~7输出方式寄存器推挽和漏极开路的选择
RET
LCDINIT:
LCALLDELAY
MOVP7,#38H;功能设置;两行显示,5*7矩阵
MOVP6,#01H;写命令
MOVP6,#00H;结束写命令
LCALLDELAY
MOVP7,#0EH;开显示,开光标,字符不闪烁
MOVP6,#01H;写命令
MOVP6,#00H;结束写命令
LCALLDELAY
MOVP7,#06H;I/D=1,AC自动增一;S=0,整体显示不移动
MOVP6,#01H;写命令
MOVP6,#00H;结束写命令
LCALLDELAY
MOVP7,#01H;清除DDRAM,置AC=0
MOVP6,#01H;写命令
MOVP6,#00H;结束写命令
LCALLDELAY
RET
2.4.2液晶显示模块。
LCALLLCDINIT;调用显示的初始化子程序。
MOVDPTR,#1100H;
MOVR4,#0AH
LINE1:
ANLA,#0;第一行的显示的模块
MOVCA,@A+DPTR
INCDPTR
MOVP7,A;字符送数据口P7
MOVP6,#05H;写
MOVP6,#04H;结束写
LCALLDELAY
DJNZR4,LINE1
MOVP7,#0C0H
MOVP6,#01H
MOVP6,#00H
LCALLDELAY
MOVDPTR,#1000H
MOVR4,#04H
;显示数据模块
MOVR0,#22H
LINE2:
MOVA,@R0;第一行的显示的模块
MOVCA,@A+DPTR
INCR0
MOVP7,A
MOVP6,#05H;A10=1xuan选择数据寄存器a8=1,写状态
MOVP6,#04H;a8=0,结束写状态
LCALLDELAY
DJNZR4,LINE2
LCALLDELAY
;显示单位模块
MOVA,30H
CJNEA,#0,FFFF
MOVP7,#4BH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
AJMPEEEE
FFFF:
MOVA,30H
CJNEA,#1,GGGG
MOVP7,#4BH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#31H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#30H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#2DH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#31H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
LJMPEEEE
GGGG:
MOVA,30H
CJNEA,#2,EEEE
MOVP7,#4BH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#31H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#30H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#2DH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#32H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
EEEE:
MOVP7,#48H
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
MOVP7,#5AH
MOVP6,#05H
MOVP6,#04H
LCALLDELAY
LJMPover
3参数计算
3.1闸门时间的计算
设定闸门时间定时器的定时宽度分别为0.1ms\1ms\10ms\,当计数器计下脉冲数,通过数据转换可将频率输出。
根据所需要的时间来决定定时器的初始值。
由定时器选择的基为系统时钟的12分频,因此定时器每加一个字就是加1us。
对于1ms初值的计算为Ct=216-(fosc*t)/k=65536-(11.0592*106*1*10-3)=65536-11.0592=54477.将其转换为二进制数为11101,所以可以得到Cth=0D4h,Ctl=0CDh;对于10ms则采用两次定时,赋予初值Cth=28h,Ctl=00h;对于0.1ms则赋值Cth=0FBh,Ctl=0Ach。
3.2频率的计算
由于计数值n=闸门时间频率F0/被测信号频率FX,所以对于1ms的闸门时间,频率为nKHZ,对于10ms的闸门时间则为10nKHZ,对于0.1ms的闸门时间则为0.1nKHZ。
4工作过程分析
该次课程设计的大体思路是使用C8051F020单片机的实验开发板,使用T0/T1分别进行计数、定时,被测信号从P0.0口输入单片机时,选择闸门时间,开启T0.T1,T1开始定时,T0开始计数,当定时完毕时,T0计数完毕,把所计的数送给数据处理模块,把十六进制数转换为十进制数,然后把数据送给LCD显示单元显示,最后返回主程序,等待下一次信号的输入。
5小结
两周简短而忙碌的单片机设计结束了,在整个设计的中遇到诸多问题,但收获远远超过付出。
通过这次设计加强了我的思考、动手能力和解决问题的能力,同时也能更好的掌握单片机程序开发的整个过程,最重要的是学会了如何去与别人合作。
随着社会的发展,这方面的知识也在广泛的应用,所以这次设计同样为今后的工作奠定了一定的基础。
这次课程设计的课题是频率计程序设计,刚刚拿到题目时感到手足无措不知从哪里开始。
虽然老师上课有讲过相关内容,但这对课程设计远远不够,脑中比较茫然。
所以我去图书馆查询相关的资料,尽可能的了解有关于频率的测量方法以及单片机的硬件结构和所需要的软件模块的相关知识。
而编写程序的过程,也并非一帆风顺。
其中虽有曲折,但通过不断的摸索、尝试、求证,使得整体程序大致确定,然后将其结构化、模块化的分解,一步一步进行分析调试。
最终程序在反复的试验后得以实现,在老师的指导下不断改善方案最终完成任务。
在本次设计的过程中,学校给我们提供了一个硬件与软件结合设计的良好机会,不仅要求我们在掌握单片机的内部的电路功能的同时,还要求我们熟练的编写单片机的汇编语言程序并且实现一些课题性的硬软件设计。
这就要求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本中学到的知识和实际联系起来,这不论是对我们以后的就业还是学习,都会有很大的促进和帮助。
通过这次的课程设计,将会激励我在下一阶段的学习中更加努力。
同时,通过本次课程设计,巩固了我们学习过的专业知识,也使我们把理论与实践从真正意义上相结合了起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。
更重要的是树立了一种程序设计的思想,从中可以自我测验,认识到自己的不足之处,以便于在日后的学习中得以不断改进。
两周的课程设计过去了,我对单片机设计程序有了更深刻的认识,这两周虽然辛苦,但留给我更多的是收获和美好的回忆。
这个过程,不但加深了我对课上所学到的单片机理论知识的认识和理解,重新让自己认识到了这门学科的在应用方面的广阔前景,并且通过知识与应用于实践的结合更加丰富了自己的知识。
扩展了知识面,不但掌握了本专业的相关知识,而且对其他专业的知识也有所了解,而且较系统的掌握单片机应用系统的开发过程,因而自身的综合素质有了全面的提高。
6致谢
为期两周的单片机课程设计结束了,尽管辛苦忙碌,但重要的是巩固了已学的知识,与此同时也了解了许多课外的知识,更培养了自己的实践能力。
在这里首先要感谢的是我们的指导教师——吕老师,正是有吕老师在最初阶段对我们思路的指引,才使我满怀信心的投入到本次课程设计中。
在设计过程中吕老师指导了我很多关于编写程序的要领和容易出错的地方,正是因为有吕老师在编程阶段的细心讲解,在调试阶段的问题指正,才使得我最终顺利完成了本次课程设计。
其次要感谢的是班级的同学,在我遇到问题时,同学们总能耐心细致的给我讲解,为我解答,是问题得以顺利解决。
正因为有他们的帮助,我的频率计程序设计进展很快,为最终调试赢得了宝贵的时间。
最后要感谢图书馆在此期间提供的辅助资料,对设计的圆满完成给予了大力帮助。
在此对以上部门表示衷心的感谢。
7参考文献
[1]谢自美编著.电子线路设计•实验•测试.华中理工大学出版社,2002
[2]万光毅.Soc单片机实验、实践应用设计.北京:
北京航空航天大学出版社,2006
[3]何立民.单片机高级教程.北京:
北京航空航天大学出版社,2000
[4]张俊謨.Soc单片机原理应与用——基于C8051F系列.北京:
北京航空航天大学出版社,2007
[5]林占江.电子测量技术.北京:
电子工业出版社,2007
[6]李光飞,楼苗然主编.51系列单片机.北京:
北京航空航天大学出版社,2003
附录:
源程序代码
$INCLUDE(C8051F020.INC)
ORG0000H
LJMPMAIN
ORG001BH
LJMPTIMER
ORG3000H
MAIN:
MOVWDTCN,#0DEH
MOVWDTCN,#0ADH
MOV30H,#00
over:
MOVXBR2,#40H
MOVXBR1,#02H;分配引脚,p0.0分配给t0
SETBEA;总使能
SETBTR0
SETBTR1
SETBET1
MOVCKCON,#08H;t0不分频,t1分频
MOVTMOD,#1DH;t0计数,t1定时
MOVTH1,#0FFH
MOVTL1,#59H
MOVTH0,#0
MOVTL0,#0
MOVA,P5
JBACC.0,AAA
JBACC.1,BBB
JBACC.2,CCC
AJMPKKK
AAA:
MOV30H,#1
AJMPDDD
BBB:
MOV30H,#2
AJMPDDD
CCC:
MOV30H,#3
AJMPDDD
KKK:
MOV30H,#0
DDD:
MOVDPTR,#0F00H
MOVR0,30H
MOVA,R0
MO