AT89C51数字频率计的设计与实现.doc

上传人:数据九部 文档编号:10300663 上传时间:2021-05-06 格式:DOC 页数:37 大小:1.47MB
返回 下载 相关 举报
AT89C51数字频率计的设计与实现.doc_第1页
第1页 / 共37页
AT89C51数字频率计的设计与实现.doc_第2页
第2页 / 共37页
AT89C51数字频率计的设计与实现.doc_第3页
第3页 / 共37页
AT89C51数字频率计的设计与实现.doc_第4页
第4页 / 共37页
AT89C51数字频率计的设计与实现.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《AT89C51数字频率计的设计与实现.doc》由会员分享,可在线阅读,更多相关《AT89C51数字频率计的设计与实现.doc(37页珍藏版)》请在三一文库上搜索。

1、目录摘 要1一、 引 言1二、 数字频率计设计的任务与要求1三、 测量方案的论证与分析21、 测量方法的分析21.1 直接测频法21.2 间接测量法(测周期法)21.3 直接与间接相结合的方法32、 硬件电路设计方案分析42.1 中小规模数字集成电路42.2 单片机AT89C514四、 基于单片机的数字频率计的硬件设计51、 系统硬件的构成51.1 AT89C51单片机及其引脚说明71.2 信号输入放大和整形电路91.3 时基信号产生电路101.4 复位电路111.5 按键电路111.6 显示电路12五、 数字频率计软件设计141、 主程序设计141.1 主程序流程图142、 子程序设计152

2、.1 按键中断子程序152.2 定时中断和计数中断子程序162.3 周期中断子程序162.4 超量程判断子程序172.5 除法子程序182.6 二进制转BCD子程序192.7 显示程子序20六、 系统调试201、 硬件调试202、 软件调试212.1 软件调试的步骤212.2 调试过程中遇到的问题及解决方法22结 束 语24谢 辞25参考文献26附录A 程序27附录B 硬件电路图36数字频率计的设计与实现摘 要测量是人类认识和改造世界的重要手段,在各个历史时期,测量水平的高低可以反映一个国家科学技术发展的状况。特别在当今信息时代,通信技术日新月异,对频率准确的测量已成为通讯的基本条件之一。在电

3、子领域中,频率是最基本的参数之一,在检测技术,常常将一些非电量或其供电参量转换成频率进行测量测量。另外,在现代信息传输和处理中,在电磁波频谱资源利用技术中,对频率源的稳定度和准确度提出了越来越高的要求,也大大促进了时间频率测量技术的发展本论文主要阐述了以AT89C51单片机为核心,利用它内部的定时计数器完成待测信号频率的测量。单片机AT89C51内部具有2个16位定时计数器,定时计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。其基本模块包括输入、切换逻辑、计数、单片机控制及显示模块,采用汇编语言。测量采用了直接与间接相结合的方法,它避免了直接测量法对低频精度的不足,同时消

4、除了间接测量方法对高频精度的不足,以达到设计要求。数字频率计的设计与实现一、 引 言在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本次设计的数字频率计以AT89C51为核心,在软件编程中采用的是汇编

5、语言,测量采用了直接与间接相结合的方法,它避免了直接测量法对低频精度的不足,同时消除了间接测量方法对高频精度的不足,以达到设计要求。二、 数字频率计设计的任务与要求单片机控制的数字频率计1.测频范围:10Hz10KHz。为保证测量精度分三个频段10Hz100Hz,100Hz1KHz,1KHz10KHz,有超量程指示。2.输入波形:函数信号发生器输出方波,幅度为5V,能产生所需频率的脉冲信号。3.测量误差:1。三、 测量方案的论证与分析1、 测量方法的分析测量方法通常有三种:直接测量法、间接测量法、直接与间接测量结合法。1.1 直接测频法这种方法的测量原理是:由于频率是单位时间内信号发生周期变化

6、的次数,使得我们可以在给定的单位时间1S内(称为闸门)对被测信号的脉冲数计数,得到的脉冲个数就是被测信号的频率。1S基准闸门信号被测信号实际检出信号1S经分析,本测量法在低频段的相对测量误差较大,即在低频段不能满足本设计的要求1.2 间接测量法(测周期法)虽然直接测频法可以测出单位时间内脉冲的个数即频率,但是对于较低频率的信号其检测误差会大大增大,例如1.8Hz的信号,在通过1秒的闸门时间内其0.8会被淹没,这是在设计中所不允许的。解决这种现象的办法就是改直接测频法为测周期法。其原理是用被测信号的周期作为闸门,在该闸门时间内允许已知标准的短周期间隔的较高频率的信号通过,通过数字电路或微型计算机

7、的运算,通过闸门的已知信号频率的个数越多,其被测频率就越低。被测闸门信号高频基准信号实际检出已知信号未知测周期法时序图经误差分析,可得结论:用该测量法测量时,被测信号的频率越高,测量误差越大。1.3 直接与间接相结合的方法该方法的出发点是避开1量化误差的影响较大的频段,寻找有利因素而产生的。对信号不采用直接测频法,而是改为测周期,并通过切换求得频率。该方法可以满足测量误差的要求。由此可见,为了获得较高的测量精度,在高频段,宜采用直接测频法;在低频段,宜采用测周期法。把测量工作分为两种方法:(1)当待测信号的频率100 Hz时,定时计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸

8、门宽度1 s时,即可满足频率测量结果为4位有效数字;(2)当待测信号的频率100 Hz时,定时计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。2、 硬件电路设计方案分析2.1 中小规模数字集成电路系统测频部分采用中小规模数字集成电路,用机械式功能转换开关换档,完成测频率、测周期及测脉宽等功能。该方案的特点是中小规模集成电路应用技术成熟,能可靠的完成频率计的基本功能,但由于系统功能要求较高,所以电路过于复杂,而且多量程换档开关使用不便。原理框图如2.1所示。2.1原理框图2.2 单片机AT89C51系统采用51系列单片机AT89C51作为控制核心,实现整个

9、电路的测试信号控制、数据运算处理、键盘扫描和控制数码管的显示输出完成各种时序逻辑控制、计数功能。系统组成框图如图2.2所示,所有信号包括基准频率信号、被测信号AT89C51单片机的控制下进行计数或定时,单片机将每次测试结果经运算处理后,以十进制的形式送到4位数码管显示电路显示。按键接口电路,因为按键数量较少,所以采用独立式按键结构,实现测频、测周功能。图2.2 原理框图 显然,单片机AT89C51的电路简洁、新颖,数字集成电路从系统要实现的指标上看,要实现频率的测量范围10Hz10KHz,实现比较困难,还要进行周期换算频率,因此采用单片机AT89C51系统。四、 基于单片机的数字频率计的硬件设

10、计1、 系统硬件的构成本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有以下几个模块:放大整形模块、时钟脉冲产生模块、按键模块、单片机系统、LED显示模块。各模块关系图如图2所示:显示电路(静态串行显示方式)按键电路(中断扫描方式)时钟电路复位电路总电路图1.1 AT89C51单片机及其引脚说明89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器, 一个5中断源两个优先级的中断结构,一个双工的串行口, 片上震荡器和时钟

11、电路。引脚说明:VCC:电源电压GND:地P0口:P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。当对0端口写入1时,可以作为高阻抗输入端使用。当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。在这种模式下,P0口具有内部上拉电阻。在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。程序校验时需要外接上拉电阻。P1口:P1口是一带有内部上拉电阻的8位双向I/O口。P1口的输出缓冲能接受或输出4个TTL逻辑门电路。当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。当作为输入端使用时

12、,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。P2口:P2是一带有内部上拉电阻的8位双向的I/O端口。P2口的输出缓冲能驱动4个TTL逻辑门电路。当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX DPTR)时,P2口送出高8位地址数据。在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。当利用8位地址线访问外部数据存储器时(例MOVX R1),P2口输出特殊功能寄存器的内容。当EPROM编

13、程或校验时,P2口同时接收高8位地址和一些控制信号。P3口:P3是一带有内部上拉电阻的8位双向的I/O端口。P3口的输出缓冲能驱动4个TTL逻辑门电路。当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。P3口同时具有AT89C51的多种特殊功能,具体如下表1所示:端口引脚第二功能P3.0RXD (串行输入口)P3.1TXD(串行输出口)P3.2 (外部中断0)P3.3(外部中断1)P3.4T0(定时器0)P3.5T1(定时器1)P3.6(外部数据存储器写选通)P3.7(外部数据存储器都选通)表

14、1 P3口的第二功能RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。ALE/:当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。当在Flash编程时还可以作为编程脉冲输出()。一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。:程序存储允许时外部程序存储器的读选通信号。当AT89C52执行外部程序存储器的指令时,每个机器周期两次有效,除了当访问外部数据存储器时,将跳过两个信号。/VPP:外部访问允许。为了使单片机能够有效的传送外部数据存储器从0000H到FF

15、FH单元的指令,必须同GND相连接。需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。当执行内部编程指令时,应该接到VCC端。XTAL1:振荡器反相放大器以及内部时钟电路的输入端。XTAL2:振荡器反相放大器的输出端。1.2 信号输入放大和整形电路放大整形系统包括衰减器、放大器、施密特触发器。它将正弦输入信号Vx整形成同频率方波Vo,幅值过大的被测信号经过分压器分压送入后级放大器,以避免波形失真。由运算放大器构成的射级跟随器起阻抗变换作用,使输入阻抗提高。同相输入的运算放大器的放大倍数为(R1+R2)/R1,改变R1的大小可以改变放大倍数。系统的整形电路由施密特触发器组成,整形后的

16、方波送到闸门以便计数。由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中采用了这个信号调理电路对输入的波形进行阻抗变换、放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图4所示: 图41.3 时基信号产生电路时钟是一切微处理器、微控制器内部电路工作的基础。单片机内部有一个自激振荡电路,它是定时控制部件中的一部分,可以通过内部自激振荡或外部提供振荡源这两种方式,驱动内部时钟电路产生系统时钟信号。内部方式 :在XTAL1、XTAL2跨接定时元件和两个电容就构成了自激振荡器。C1、C2取5-30PF

17、,起微调和稳定作用。晶振频率:f=1.212MHZ,常用频率为6、12、11.0592 MHz。外部方式:外部振荡脉冲信号直接由XTAL2端输入,此时,XTAL1应接地,而片内振荡电路不起作用,。常用于单片机同时工作,以便同步,要求信号低于12MHz。时钟周期:振荡器输出的时钟脉冲频率的倒数。为单片机中最小、最基本的时间单位。状态周期:振荡信号经2分频后获得的信号周期,称S,显然,S为时钟周期的2倍。机器周期:12个时周钟期为一个机器周期,对应计算机执行一个基本操作所需的时间。指令周期:执行一条指令所需的时间,至少包含一个机器周期。指令字节:指令占用存储空间的字节数,有单字节、双字节、三字节三

18、类。当时钟频率为12MHz和6MHz时,时钟周期分别为1/12s和1/6s ,机器周期分别为1s和2s。这里使用12MHz晶振和两个电容就构成的自激振荡器。1.4 复位电路复位方式有上电自动复位、按键手动复位两种。如图所示。在按键手动电平复位电路中,具有上电和按键双重功能1.5 按键电路键盘电路使用中断扫描方式,使用中断方式可大大提高单片机效率。1.6 显示电路在单片机应用系统中通常使用由八个LED器件组成的七段LED显示器,其中七个LED构成七笔字形,另一个LED构成小数点(故有时称为八段显示器)。如图所示,其接法共有两种:共阴极与共阳极,前者是输入高电平有效(LED发光),后者是输入低电平

19、有效。其工作原理是:控制其中各段LED的亮与暗即可显示出相应的数字、字母或符号。七段LED显示器进行显示的信息称为七段代码,不同接法的七段代码显然是不相同的,共阴极和共阳极的七段代码的相同字符相加为FFH。两种代码分别如图所示:字符字 形 码字符字 形 码字符字 形 码共阴共阳共阴共阳共阴共阳03FHC0H87FH80Hu3EHC1H106HF9H96FH90Hy6EH91H25BHA4HA77H88H灭00HFFH34FHB0HB7CH83H466H99HC39HC6H 56DH92HD5EHA1H 67DH82HE79H86H707HF8HF71H8EH这里使用静态显示中的串行显示,节省单

20、片机资源,稳定。图如下所示:五、 数字频率计软件设计1、 主程序设计程序要求:要能实现量程切换,超量程指示,准确定时。1.1 主程序流程图2、 子程序设计子程序主要包括:按键中断子程序、定时中断子程序、计数中断子程序、周期中断子程序、超量程判断子程序、除法子程序、二进制转BCD子程序、显示程子序。2.1 按键中断子程序按键中断子程序流程图2.2 定时中断和计数中断子程序定时中断和计数子程序流程图2.3 周期中断子程序周期中断子程序流程图HAOPAN:MOV A,32H CLR C CJNE A,38H,D1 AJMP N1 N1:MOV A,31H CJNE A,37H,D1 AJMP N2

21、N2:MOV A,30H CJNE A,36H,D1 AJMP OUT D1:JC MIN JNC CHAOL MIN:MOV A,32H CLR C CJNE A,35H,D2 AJMP MN1 MNI:MOV A,31H CJNE A,34H,D2 AJMP MN2 MN2:MOV A,30H CJNE A,33H,D2 AJMP XIAOL D2:JC XIAOL JNC OUT XIAOL:MOV A,#0BFH;0.编码 AJMP DISPCH ;显示输出CHAOL:MOV A,#86H;1.编码DISPCH:JB ALLOW,OUT;显示更新是否允许 MOV CHAO,#01H;超

22、量程状态存放CLR P2.0 ;清除显示SETB P2.0MOV SBUF,A;发送JNB TI,$CLR TIOUT:RET2.4 超量程判断子程序判断大小,小于量程输出“0.”,大于量程输出“1.”。2.5 除法子程序该子程序用于周期转换频率,因为周期为两到三字节,所以使用移位除法。移位除法模拟手算方法: 1)从被除数高位开始对齐除数,比较。 2)若前者大于或等于后者,商位为1,并把被除数减除数,形成部分余数。若前者小于后者,商位为0。 3)部分余数左移一位,商也左移一位。 4)整个余数若小于除数,则退出。 5)部分余数从高位开始与除数比较 。6)到第2)步。 若被除数大于或等于除数,则溢

23、出。2.6 二进制转BCD子程序二进制转BCD分为小数部分和整数部分。二进制转BCD子程序流程图2.7 显示程子序先进行查码,然后由串行口发送到移位寄存器中。程序:DISP:JB ALLOW,OUT;显示更新是否允许 MOV R2,#04H;位数 MOV R1,#40H;显示数据首地址 DL0:MOV A,R1 MOV DPTR,#TAB2 MOVC A,A+DPTR MOV SBUF,A;发送 JNB TI,$ CLR TI INC R1 DJNZ R2,DL0 RETTAB2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH六、 系统调试1、 硬件调试硬

24、件调试,由大到小,从整体到局部,进行调试。本设计电路简单,所以不一一调试,就最复杂的显示电路进行调试。先由仿真器连接显示电路,循环发送四位(1-9)显示编码,如果四位都不能显示,检查信号传输电路,时钟电路,电源。如果四位都能显示,但有的位显示不正确,检查LED与移位寄存器的连线顺序是否正确。如果还显示不正确,与正常的位调换LED数码管。调换后,正常的位显示不正常,则数码管坏了,换数码管。调换后,不正常的位显示不正常,则移位寄存器坏了,换移位寄存器。2、 软件调试2.1 软件调试的步骤(1) 源文件的建立:使用菜单 “File-New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新

25、的文本编辑窗口,在该窗口中输入汇编语言源程序(4.2小节所示)。保存该文件,加上扩展名(.asm或a51),这里将文件保存为examl.asm。(2)建立工程文件:点击“Project-New Project”菜单,出现以个对话框,要求给工程起一个名字,我们输入examl,不需要扩展名,点击保存按钮,出现第二个对话框。这个对话框要求选择目标CPU(即我们所使用的芯片型号80C51)点击ATMEL前面的“+”号,展开该层,点击其中的80C51,然后点击确定按钮。回到主界面,此时,在工程窗口的文件页中,出现了“Targ et1”,前面有 “+”号,点击“+”展开,可以看到下一层的“Source G

26、roup1”,这时的工程还是一个空工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Souce Group”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单。选中其中的“Add file to Group”Souce Group1”,对话框,要求寻找源文件,注意该对话框下面的“文件类型“默认为C Souce file (*.c),也就是以C为扩展名的文件,而我们的文件是以asm 为扩展名的,所以在列表框中找不到examl1.asm,要将文件类型该掉,点击对话框中”文件类型后的下拉列表,找到并选中“Asm Souce File(*.asm,*.a51)”,这样,在列表框中就可以

27、找到examl1.asm文文件了。双examl1.asm文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其他文件,但初学时常会认为操作没有成功而再次双击同一文件,这时会出现对话框,提示你所选的文件以在列表中,此时点击确定,返回前一对话框,然后,点击”Close”即可返回主界面,返回后,点击“Souce Goup 1”前的加号,会发现examl1.asm 文件以在其中。双击文件名,即打开源程序。(3)工程的详细设置:首先点击左边Project窗口的Target 1,然后使用菜单“Proget-Option for target target 1”即出现对工程设置的对话

28、框,对这个对话框可谓非常复杂,共有8个页面,要全部高清可不容易,好在绝大部分设置项取默认值就行了。设置完成以后安确认返回主界面,工程建立、设置完毕。(4)编译、连接:在设置好工程后,既可以进行编译、连接。选择菜单Project-Build target,对当前工程进行连接,如果当前文件已修改软件会先对该文件进行比阿尼,然后在连接以产生目标代码。编译过程中的信息将出现在输出窗口中的Build页中,如果源程序有语法错误,会有错误报告出现,双击该行,可以定到出错的位置,对源程序反复修改后,最终会得到如图5-1所示的结果,提示获得了名为examl.hex的文件,该文件即可被编程器读入并写到芯片中,同时

29、还产生了一些其他相关文件可被用于KEIL的仿真与调试。正确编译之后的结果2.2 调试过程中遇到的问题及解决方法在进入环境以后,遇到了很多问题,总结如下:(1)提示无asm文件编译时候提示:F:.XX.asmFile has been changed outside the editor, reload ?解决方法:重新生成项目,产生examl.asm即可。(2)在进入Keil的调试环境以后,发现程序有错解决方法:将光标定位于需要修改的程序上,用菜单,DebugInline Assambly即可出现对话框,Enter New 后面的编辑框内直接输入需要修改的程序语句,输入完之后键入回车将自动指向

30、下一条语句,可以继续修改,如果不在需要修改,可以点击右上角的关闭按钮关闭窗口。(3)程序调试时,一些程序必须满足一定的条件才能被执行到解决方法:这些条件往往是异步发生或难以预先设定的,这类问题使用的单步实行方法是很难调试的,这时就要使用发哦程序调试中的另一种非常重要是方法-断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单Debug/Insert/RemoveBreakPoint设置或移除断点(也可以用鼠标在该行双击实

31、现同样的功能);Debug/Enable/Disable BreakPoint是开启或暂停光标所在懂行的断点功能;Dubug/Disale All BreakPoint暂停所有断点;Debug/Kill All BreakPoint清除所有的断点设置。这些功能也可以用工具条上的快捷键进行设置。(4)输入程序时,有中文标点,用keil编译时出现错误解决方法:程序里有带中文标点,用英文重输入一遍(5)汇编出现数字、字母混淆解决方法:字母“O” 和 数字 “0”。主要错在这里。注意细节!参考文献1李全利,单片机原理及应用技术。北京:高等教育出版社,20042王曙霞,单片机实验与实训指导。西安:西安电

32、子科技大学出版社,20073及力,Protel 2004原理图与PCB设计教程。北京:电子工业出版社,20074何利民,单片机高级教程。北京:航空航天大学出版社,20005李朝青,单片机原理与接口技术。北京:航空航天大学出版社,19996张毅刚,MCS-51单片机应用设计。哈尔滨:哈尔滨工业大学出版社,19977李华,MCS-51系列单片机实用接口技术。北京:航空航天出版社,20008陈光东,单片微型计算机原理接口技术。武汉:华中理工大学出版社,19999王福瑞,单片机测控系统大全,北京:航空航天大学出版社,1998附录A 程序ORG 0000HAJMP MAIN ;主程序ORG 0003HL

33、JMP KAYBOARD;键盘中断入口ORG 000BHLJMP TIME ;定时中断入口ORG 0013HLJMP ZHOU ;周期测量入口ORG 002BHLJMP JSH ;计数中断入口LC EQU 50H;量程存放TO EQU 51H;定时溢出次数存放 NEW EQU 52H;量程切换状态存放CHAO EQU 53H;超量程状态存放ENTER BIT 00H;确定按键位ALLOW BIT 01H;显示更新允许位MAIN:MOV P1,#FFH;按键初始化 MOV IE,#83H;允许定时T0,按键INT0中断 SETB IT0 ;按键中断出发方式为下降沿触发 CLR P2.0 ;显示初

34、始化 SETB P2.0 MOV SCON,#00H;串口工作方式0 MOV 40H,#00H;显示缓存清零 MOV 41H,#00H MOV 42H,#00H MOV 43H,#00HHOME:MOV LC,#03H ;量程初始化 ACALL DISPLC;显示量程DOWN:JNB ENTER DOWN;确定量程? CLR ENTERCHOSE:CJNE LC,#01H,NEXT1 AJMP ZQ ;周期测量(量程1)NEXT1:CJNE LC,#02H,NEXT2 AJMP JS1;计数1(量程2)NEXT2:CJNE LC,#03H,HOME AJMP JS2;计数2(量程3)ZQ:CL

35、R TR0 ;定时停止 MOV TL0,#00H MOV TH0,#00HCLR ET1 ;不允许T1中断SETB IT1 ;INT1下降沿触发MOV TO,#00H ;定时溢出次数清零 MOV R6,#00H ;计时中断 数清零 MOV 30H,#00H ;计时存储清零MOV 31H,#00HMOV 32H,#00HSETB EX1 ;允许INT1中断A1:CJNE R6,#08H,A1 ;等待计时完成 CLR EX1 ;停止INT1中断ACALL PINGJUNDJNZ NEW,CHOSE;有量程切换返回MOV 33H,#10H ;0.01S0.1S计时最大最小值MOV 34H,#27HM

36、OV 35H,#00HMOV 36H,#0A0HMOV 37H,#86HMOV 38H,#01HACALL CHAOPANDJNZ CHAO,ZQACALL DAOSHU;1/T倒数DJNZ NEW,CHOSE;有量程切换返回ACALL BCD1 ;二进制转BCD码DJNZ NEW,CHOSE;有量程切换返回ACALL DISPAJMP ZQ;=PINGJUN:MOV R6,#01H;除以4 LOOP: MOV A.32H RRC AMOV 32H,AMOV A,31HRRC AMOV 31H,AMOV A,30HRRC AMOV 30H,ADJNZ R6,LOOPRET;=divdll da

37、ta 39h ;定义被除数单元divdlh data 3Ahdivdhl data 3Bhdiv0 data 30h ;定义除数单元divl data 31h divh data 32htempl data 26h ;定义余数单元temph data 27hDAOSHU:mov divdll,#40h ;1s mov divdlh,#42h mov divdhl,#0fh divd: push a push b mov a,divh ;判除数是否为零 orl a,divl orl a,div0 jnz divd0 setb ov ;除数为零,置溢出标志 pop b pop a retdivd0

38、: mov templ,#00h ;除数不为零,进行运算 mov temph,#00h mov b,#24h ;置循环次数divd1:clr c ;进位位、余数单元和 mov a,divdll ;被除数单元全体逐个 rlc a ;向左循环移位 mov divdll,a mov a,divdlh rlc a mov divdlh,a mov a,divdhl rlc a mov divdhl,amov a,templrlc amov templ,axch a,temphrlc axch a,temphmov 04H,c ;保存进位位clr csubb a,divl ;用余数减去除数mov r7,

39、amov a,temphsubb a,divhanl c,/04H ;判断是否够减jc divd2 ;不够减,移下一位mov templ,r7 ;够减,刷新余数单元mov temph,ainc divdll ;商上1divd2: djnz b,divd1 clr ov pop b pop a ret;=BCD1:MOV A,3AH ;频率在10.0099.99Hz MOV B,#0AH DIV AB ;整数 MOV 43H,A MOV 42H,B;= MOV R6,#00H ;小数LP2: MOV R0,#39H CLR C RLC A MOV 03H,C;为0时该所有数不相加 MOV A,R

40、6 MOV B,#02H DIV AB MOV R1,A;小数的位数 MOV DPTR,#TAB1 MOV R5,#00H;列表相对位置LP1: MOV A,R5 MOVC A,A+DPTR JNB 03H,NOADDAD: ADDC A,R0 DA A MOV R0,ANOADD:INC R0 INC R5 DJNZ R1,LP1 CLR A JC AD INC R6 CJNE R6,#08H,LP2 MOV R0,#39H ;拆开保存到显示缓存 XCHD A,R0 MOV 40H,A MOV A,39H SWAP A MOV 41H,A RETTAB1:DB 50H,25H,50H,12H

41、,25H,06H DB 50H,12H,03H,25H,56H,01H DB 50H,12H,78H,00H,25H,06H,39H,00H;=JS1: SETB ET1 ;允许T1中断 CLR EX1 ;不允许INT1中断 MOV TCON,#05H ;停止TR1计数 ,TR0定时 MOV TL0,#0COH;定时初值,1000000=65535*15+16960 MOV TH0,#0BDH; 65535-16960=48576=BDC0HMOV TL1,#00H ;计数期清零 MOV TH1,#00H MOV 30H,#00H ;计数存储区清零 MOV 31H,#00HMOV 32H,#00HMOV TO,#0FH ;定时溢出次数存MOV TCON,#55H ;启动TR1计数 ,TR0定时 A2:CJNE TO,#00H,A2 DJNZ NEW,CHOSE;是否有量程切换 MOV 33H,#63H;量程2 MOV 34H,#00HMO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1