ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:245.83KB ,
资源ID:8154653      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8154653.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学士学位论文电子系统设计与调试课程设计基于51单片机的转速表系统设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

学士学位论文电子系统设计与调试课程设计基于51单片机的转速表系统设计.docx

1、学士学位论文电子系统设计与调试课程设计基于51单片机的转速表系统设计目录1.前言 12 智能转速表的系统设计 12.1 系统硬件设计 12.1.1方案选择 12.1.2仪器各部分组成 22.2 系统软件设计 33 设计原理 53.1转速计算及误差分析 53.2转速测量 63.2.1门控方式计数 63.2.2中断方式计数 73.3串行显示接口 74 软件程序的设计 84.1 1s定时 84.2 T1计数程序 84.3 频率数据采集 94.4 进制转换 104.5 数码显示 135 软件设计总体程序 156 总程序调试 217 心得体会 21 参考文献 221.前言单片微型计算机简称单片机,又称为

2、微控制器(MCU)是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。单片机在我国大规模的应用已有十余年历史,单片机技术的研究和推广正方兴未艾。MSC-51系列单片机是国内目前应用最广泛的一种8位单片机之一。经过20多年的推广与发展,51系列单片机形成了一个规模庞大、功能齐全、资源丰富的产品群。随着嵌入式系统、片上系统等概念的提出和普遍应用,MCS-51系列单片机的发展又进入了一个新的阶段。我们使用的89C51单片机

3、是目前各大高校及市场上应用最广泛的单片机型.其内部包含: 一个8位的CPU;4K的程序存储空间ROM;128字节的RAM数据存储器;两个16位的定时/计数器;可寻址64KB外部数据存储器和64KB外部程序存储器空间的控制电路;32条可编程的I/O线;具有两个优先级嵌套的中断结构的5个中断源。本次课程设计便是设计一个基于89C51单片机转速表系统。要求进行电路硬件设计和系统软件编程,硬件电路要求动手制作并能够完成系统硬件和软件调试。2 智能转速表的系统设计2.1 系统硬件设计2.1.1方案选择 由于单片机所具有的特性,它特别适用于各种智能仪器仪表,家电等领域中,可以减少硬件以减轻仪表的重量,便于

4、携带和使用,同时也可能低存本,提高性能价格之比。 该转速表选用MCS-51系列单片机的8031芯片,外部扩展4KB EPROM和8155作为显示器的接口。该系统的整体结构框图见下图2.1所示:图2.1智能转速表总结构流程图2.1.2仪器各部分组成(1)传感器 传感器为红外光电式传感器。其中一个发光二极管发出红外波长的光,可不受室内自然光的影响,此光照到旋转物体上反射回后,被光敏三极管接收。光敏三极管接受到此信号后,经放大,整形转换为矩形脉冲信号送入MCS-51单片机的外部中断输入端INTO和INT1上。(2)键盘键盘由功能键,数字键,存入键,取出键,单双键路选择键,启动停止键等组成。为了减少键

5、的数目,以减少故障率,采用了一键多用的复用键方案,但软件相对复杂一些。键盘于8031的P1口直接相连,以加快对键盘的扫描速度。也可以用8155等芯片作为键盘的输入接口,但扫描速度比前者慢一些。(3)显示器 8个LED数码管作显示器,它通过可编程并行I/O接口芯片8155与8031相连。8155的A口通过反相驱动(75452或7406)作为显示器位选口;B口通过同相驱动器(7407)作显示器段选口。在进行不同测量时,除在LED显示器上以英文字母提示外,在运行过程中还以不同的发光二极管指示测量的内容。发光二极管由8155的C口驱动。(4)程序存储器系统的监控程序和运算处理程序存放在外接4K字节的E

6、PROM2732中。(5)数据存储器 数据存储器由8031片内的低128字节和8155内部256字节的RAM组成.8031的内部RAM主要用于堆栈,工作寄存器,显示缓冲器,各测量参数的计算缓冲器和标致位等。而8155内部的RAM除上部4个单元外,全部用于存放转速和线速度值,其存储空间划分如图2-2所示,共分为三组,每组84个单元,可存入42个16位二进制数据,即42个4位16进制数据。如下图2.1为外部RAM存储器空间划分图。图2.1 外部RAM存储器空间划分2.2 系统软件设计系统监控程序的主程序流程框图见图2.2系统软件采用模块式结构,由主程序及多个功能模块子程序组成,可使程序清楚,易编易

7、读,便于调试和修改。图2.2监控主程序流程图主程序的任务是对8031单片机初始化,如设置堆栈,预置各定时器的控制字,初始化显示缓冲区,8155的初始化,设置标致位,清内存等;然后显示开机初始化状态,扫描键盘,根据按下键的功能各自的功能操作。3 设计原理3.1转速计算及误差分析根据转速,周期,频率之间的关系可知: (3-1) (3-2) (3-3)式中, n被测转速,r/min; T转速信号周期,s; f转速信号频率,Hz; 计算计数脉冲的周期,又称时基,.将式(3-3)代入式(6-1),可得: (3-4)用十六进制数表示,为: 式中N已存入75H,74H,73H单元。利用除法子程序,即可求出转

8、速。下面计算系统得相对误差。分别对式(3-1)和(3-3)求微分 (3-5) (3-6)将式(3-6代入(3-5),可得: (3-7)式中,为量化误差,个计数脉冲,又已知时基,故 (3-8)由式(3-8)可知,相对误差与频率成正比,即相对误差随转速得升高而升高。因此,为了提高测量精度,高转速时需要连续测量数个周期。本系统中为4个周期,即测得的N为4个周期内的总和,所以 (3-9) (3-10)用十六进制数表示,为,对式(3-9)进行微分得:.因此,可求出高速测量时的相对误差为。同样,代入,个计数脉冲,则: (3-11)将式(3-11)与式(3-8)比较可知,采用多周期测量相对精度大大提高。若设

9、置系统的临界转速为3662r/min,其对应的每周期计数脉冲个数为。开机时,首先按低转速测量,然后判断转速n是高于还是低于3662r/min。若低与此临界值,则仍然低转速测量,若高于它,便主动转入高转速测量,即连续测量4个周期.这样,就可以实现量程自动切换。3.2转速测量由式(3-4)和(3-10)可知,只要能够求出脉冲个数N,即可求出转速。为了得到计数脉冲,可以采用门控方式的硬件计数方法,也可以采用中断方式的软件计数方法。3.2.1门控方式计数由8031定时器/计数器T0工作原理可知,当其工作在计数方式,只要T0引脚上有负跳变,计数器就加1。CPU在每个机器周期的状态时,采样T0,所以需要2

10、个机器周期才能识别一个T0的负跳变,即T0的周期至少应该等于2倍机器周期。若晶振频率为6MHz,6分频后得到ALE信号,故ALE信号周期为,机器周期为。由此可知,最低计数脉冲周期为,可由ALE信号经74LS74中的两个D触发器4分频后取得。为了保证精度,要求8031内部计数器0与的上跳沿同步,此时开始计数,在的下跳沿停止计数。图3.1 门控脉冲与计数脉冲为了实现此功能,可以利用51单片机特有的定时器门控工作方式,通过指令MOV THOD,#1DH来设置定时器/计数器的工作方式。这里使定时器/计数器0工作于16位技术方式,并由门脉冲进行控制。只有当为高电平时,且运行控制位时,计数器0才开始工作。

11、一旦转为低电平,计数器0即刻停止计数。3.2.2中断方式计数高转速时,为了连续测量4个输入脉冲周期,可以采用中断方式计数。在初始化或前一次测量结果时,单片机禁止”外部中断0”和”定时器0”溢出中断。设置”外部中断0”为负跳沿触发方式,设定”计数器0”为非门控计数方式,然后等待中断。外部中断负脉冲一到,立刻启动”计数器0”对T0的计数脉冲进行计数。计到4个测量周期时,停止”计数器0” 工作,禁止外”中断”,恢复测量周期常数3,并将计得的脉冲数存入相应的单元。门控方式和中断方式计数,有效的解决了精度测量输入脉冲周期和高低量程自动切换问题,测得计数脉冲个数后,即可转入计算转速n子程序,计算结果得BC

12、D吗存入相应的4个存储单元,以备显示。3.3串行显示接口 51单片机的I/O口串行口为全双工接口,串行工作在方式0时,外接移位寄存器,可将串口转换成8位并口。其显示的速率为,即,可以满足显示器稳定显示。串行数据的接受/发送均通过RXD,而由TXD输出移位脉冲。在串口上外接4片移位寄存器74LS64作为8位显示器的静态显示口。变串行输入为并行输出,经缓冲器接至数码管。4 软件程序的设计4.1 1s定时本次设计选用定时器T0完成定时功能,选用方式1时最多也只能定时,显然不能满足定时1的要求,可以用下面这种方法解决:采用T0定时10,连续循环定时100次即可完成1定时,用一个计数单元20H存放循环的

13、次数,每一次循环20H单元自减1,当20H单元为零时则1定时到时。定时器T0初始化程序如下:MOV IE,#8AH ;开放T0、T1中断MOV TMOD,#51H ;T0定时,T1计数,都工作于方式一MOV 20H,#100 ;100*10ms=1sSETB TR01s定时程序如下:T0INT:DJNZ 20H,NEXTNEXT:MOV TH0,#0DCH ;1s还未到则置初值继续定时MOV TL0,#00HEXIT:RETI4.2 T1计数程序设计中T1采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单

14、元进行扩展,扩展的思路是除了计数器T1的TH1和TL1用于计数外,再选用一个计数单元23H,每当计数器T1溢出回零时产生中断,中断程序执行23H单元自增1,这样,当一秒到时时采集的计数数据,23H单元存放的是数据的最高位,TH1存放的是数据的次高位,TL1存放的是数据的最低位。当然,这里所说的“最高位”“次高位”以及“最低位”都是针对十六进制而言的。计数器T1初始化程序如下: MOV IE,#8AH ;开放T0、T1中断MOV TMOD,#51H ;T0定时,T1计数,都工作于方式一MOV TH1,#00HMOV TL1,#00H ;计数初值为零 SETB TR1根据流程图设计的计数程序如下:

15、 MOV 21H,#0MOV 22H,#0MOV 23H,#0 ;此三个单元存放采集到的频率T1INT:INC 23H ;计数器溢出则23H单元自增1RETI4.3 频率数据采集到1定时时,存储计数器T1以及扩充计数单元23H记录的数据即为输入时钟信号的频率,为了保证记录的频率精确度,到1定时后应立即停止T1的计数,因为指令的执行也需要时间,并且待测的时钟信号频率越高,指令执行所需要的时间就越不能忽略,这里采用的指令为CLR TR1。数据采集程序如下: CLR TR0MOV 22H,TH1 ;1s定时到则采集数据MOV 21H,TL1AJMP EXIT4.4 进制转换从计数器采集到的频率数据是

16、十六进制的,如果直接把这些数据送给数码管显示显然很不直观,因此需要把这些数据向十进制转换。转换的算法有两种,第一种算法的思想是对该十六进制数除以100,商为百位,余数再除以10,再得到的商为十位,余数为个位。这种算法虽然程序的编写非常简单,但是它的局限性也非常明显,即它只能对不大于两位的十六进制数进行转换,对于大于两位的十进制数则无能为力。这次设计的频率计频率范围远不止两位十六进制数就能记得下,所以这里采用第二种方法。第二种方法算法的编程实现非常复杂,但是可以对任意长度的十六进制数向十进制转换。这种算法的基本思路是:第一步将最高位的高半字节提出来,除以10,把商存储起来,余数与最高位的低半字节

17、组合成一个字节,再除以10,再存储商,余数以此类推,直到最后一次计算得到的余数即为十进制数的个位;第二步把第一步存储的商组合成一个字节,依次除以10,仍然把每次得到的商存储起来,以此类推最后一次得到的余数即为十进制数的十位;以后也是以此类推得到十进制数的百位、千位以上算法必须要注意的一个为题是,每次得到的余数与低位的半字节组合成一个字节时,余数必须放在该字节的高半字节,否则计算错误。该本次频率计系待测的时钟信号的最高频率为460800Hz,对应的十六进制数为70800H,这里就以70800H转换为十进制数为例来说明这种算法。第一步:用7H除以10,商0H余7H,把商0存储在24H单元,余数7H

18、与下一个字节08H的高半字节0H组合成一个字节70H。70H除以10,商BH余2H,把商BH存储在25H单元,余数2H与8H组合成一个字节28H。28H除以10,商4H余0H,把商4H存储在26H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在27H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在28H单元,余数0即为所需十进制数的个位。第二步:把存储在24H与25H单元的商组合成一个字节0BH。0BH除以10,同第一步,存储商,余数与下一个商组合成一个字节,再除以10,一次类推得到十进制数的十位0。第三步:方法同第二

19、步,得到十进制数的百位8。第四步:方法同第三步,得到十进制数的千位0。第五步:方法同第四步,得到十进制数的万位6和十万位4。最后得到了十进制数460800。图4.3详细的展示了这种进制转换算法的过程。这种算法的编程实现如下,转换后的十进制数由低到高依次存放再50H60H单元中。ZHUANHUAN:;向十进制转换 MOV A,23HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;-MOV A,BMOV 30H,22HANL 30H,#0F0HADD A,30HSWAP AMOV B,#0AHDIV ABMOV 25H,A ;存储第二位商;-MOV A,BSWAP AANL 2

20、2H,#0FHADD A,22HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商;-MOV A,BMOV 30H,21HANL 30H,#0F0HADD A,30HSWAP AMOV B,#0AHDIV ABMOV 27H,A ;存储第四位商;-MOV A,BSWAP AANL 21H,#0FHADD A,21HMOV B,#0AHDIV ABMOV 28H,A ;存储第五位商MOV 50H,B ;存储十进制数个位;MOV A,24HSWAP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;-MOV A,BSWAP AADD A,26H

21、MOV B,#0AHDIV ABMOV 25H,A ;存储第二位商;-MOV A,BSWAP AADD A,27HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商;-MOV A,BSWAP AADD A,28HMOV B,#0AHDIV ABMOV 27H,A ;存储第四位商MOV 51H,B ;存储十进制数十位;MOV A,24HSWAP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;-MOV A,BSWAP AADD A,26HMOV B,#0AHDIV ABMOV 25H,A ;存储第二位商;-MOV A,BSWAP AADD

22、A,27HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商MOV 52H,B ;存储十进制数百位;MOV A,24HSWAP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;-MOV A,BSWAP AADD A,26HMOV B,#0AHDIV ABMOV 25H,A ;存储第二位商MOV 53H,B ;存储十进制数千位;MOV A,24HSWAP AADD A,25HMOV B,#0AHDIV ABMOV 54H,B ;存储十进制数万位MOV 55H,A ;存储十进制数十万位4.5 数码显示将采集到的频率转换为十进制数后,还不能直接

23、将这些数送给数码显示,因为七段LED数码管内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。本次设计所给数码管十进制数显示代码如下所示。表4.1 LED十进制字形显示代码表0 - FC 1 - 602 - DA 3 - F24 - 66 5 - B66 - BE 7 - E08 - FE 9 - E6将十进制数转换为相应的LED显示的代码,最容易实现的编程方法就是查表,因数码管最多只需要显示六位,只需要查六次表就可以了。 编写的程序如下:MOV R0,#50HMOV R1,#5FHMOV DPTR,#TABNEXT3:MOV A,R0MOVC A,A+DPTRINC

24、 R0INC R1MOV R1,A ;把即将数码管显示的数据送入以60H为首的单元DJNZ R2,NEXT3TAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H得到十进制数的LED显示代码以后,就可以把这些代码送入数码管显示了,方法是50单片机先通过通信的方式把显示代码发送给数码管管理芯片ZLG7290相应的显示区域,就可以通过数码管显示频率了。51单片机通过通信传送数据的过程如图5.5所示。具体程序实现如下: NUMBYT EQU 5DHSLA EQU 5EHMTD EQU 5FHSCL EQU P1.0SDA EQU P1.1 MOV

25、 MTD,#10H ;字节数据发送MOV NUMBYT,#09HMOV SLA,#70HLCALL WRNBYTWRNBYT:PUSH PSWWRNBYT1:MOV PSW,#18hCALL STAMOV A,SLACALL WRBCALL CACKJB F0,WRNBYTMOV R0,#MTDMOV R5,NUMBYTWRDA:MOV A,R0LCALL WRBLCALL CACKJB F0,WRNBYT1INC R0DJNZ R5,WRDALCALL STOPPOP PSWRETWRB:MOV R7,#8WLP:RLC AJC WR1CLR SDASETB SCLNOPNOPNOPNOPC

26、LR SCLDJNZ R7,WLPRETWR1:SETB SDASETB SCLNOPNOPNOPNOPCLR SCLCLR SDADJNZ R7,WLPRETCACK: ;应答位检查SETB SDASETB SCLNOPNOPMOV C,SDAMOV F0,CCLR SCLNOPNOPRETSTA:SETB SDA;发送起始位SETB SCLNOPNOPNOPNOPCLR SDANOPNOPNOPNOPCLR SCLRETSTOP:CLR SDA ;发送停止位SETB SCLNOPNOPNOPNOPSETB SDANOPNOPNOPNOPCLR SCLRETI5 软件设计总体程序各单元子程序

27、已经设计完毕,将各子程序通过适当的指令链接起来,总程序的第一部分为T0、T1初始化,第二部分为1定时,第三部分为计数,第四部分为采集频率,第五福分为进制转化,第六部分为数码显示,这几部分构成了转速表软件系统的总体程序,如下所示:NUMBYT EQU 5DHSLA EQU 5EHMTD EQU 5FHSCL EQU P1.0SDA EQU P1.1ORG 0000HAJMP STARTORG 000BH ;T0中断入口AJMP T0INTORG 001BH ;T1中断入口AJMP T1INTORG 0030HSTART:MOV SP,#70HMOV IE,#8AH ;开放T0、T1中断MOV T

28、MOD,#51H ;T0定时,T1计数MOV TH0,#0DCHMOV TL0,#00H ;定时10msMOV 20H,#100 ;100*10ms=1sMOV TH1,#00HMOV TL1,#00HMOV 21H,#0MOV 22H,#0MOV 23H,#0;存放采集到的频率SETB TR1SETB TR0WAIT:AJMP WAIT ;等待中断T1INT:INC 23H;计数器溢出则23H单元自增1RETI T0INT: ;定时10ms产生中断DJNZ 20H,NEXT1CLR TR1CLR TR0MOV 22H,TH1 ;1s时间到则采集数据MOV 21H,TL1ACALL DISPLAYAJMP EXITNEXT1:MOV TH0,#0DCH ;继续定时MOV TL0,#00HEXIT:RETIDISPLAY:MOV R0,#60HMOV R1,#08H ;对60H-67H单元清零NEXT2:MOV R0,#0INC R0DJNZ R1,NEXT2 ZHU

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1