找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4620|回复: 1
打印 上一主题 下一主题
收起左侧

应用8051IP核设计频率测量系统设计论文

[复制链接]
跳转到指定楼层
楼主
ID:199781 发表于 2017-5-11 23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

摘  要

等精度频率测量系统是在电子测量技术领域应用得较多的电子测量设备。对于一个用户界面和内部运算都较复杂的等精度频率测量系统,当前国内的一般的解决方案是单片机+FPGA方案,其中FPGA完成高速的脉冲计数功能,而单片机则进行脉冲计数后的有关计算和LCD、键盘等用户界面的控制。此方案中的FPGA内部资源往往利用不足,造成比较大的浪费。本设计应用SOPC和8051单片机IP技术,通过在FPGA中嵌入8051单片机IP来取代单片机+FPGA方案中的实际的单片机,这样既少用一个实际的单片机又充分利用FPGA内部资源,大大节省了硬件成本,是一个更好的方案。

               
目    录
引言 ................................................................ 1
1  设计内容  ...............................................1
1.1 设计要求 ........................................................1
1.1.1 知识要求  ......................................................1
1.1.2 能力要求  ......................................................1
1.1.3 素质要求 ......................................................1
1.2 研究等精度频率计的背景与意义 ....................................2
1.3 杭州康芯公司KX_7C5H开发板介绍  ..................................2
1.4 VHDL语言环境简  ..................................................3
1.5 8051单片机IP简介   ..............................................3
1.5.1 基本结构  ......................................................4
1.5.2 结构框图  ......................................................4
1.5.3 特点 .......................................................... 5
1.6 LCD1602液晶显示器电路的介绍    ...................................5
1.6.1在单片机系统中应用晶液显示器作为输出器件的优点   ...............5
1.6.2 液晶显示简介  ............................ ......................5
1.6.3 1602字符型LCD简介   ........................................... 7
1.7 试验、测试、试制加工所需主要仪器设备及条件  .......................7
2  设计系统方案 ................................................... 8
2.1 系统框架  .........................................................8
2.2 频率测量模块 .....................................................8
2.2.1 周期测量方法 ...................................................8
2.2.2 测频原理  .......................................................9
2.2.3 用VHDL描述硬件电路  ...........................................10
2.3 标准频率源晶振 ..................................................11
2.4 单片机控制模块 ..................................................11
2.5 LCD 显示模块 ....................................................14
2.6 键盘模块  ........................................................16
2.7 信号放大整形输入模块 ............................................16
3  外围电路设计 ...........................................16
4  系统测试  ...............................................17
4.1 单片机程序调试  ..................................................17
4.2信号放大整形调试 ................................................. 17
4.3 综合调试  ........................................................18
4.4调试中出现的问题  .................................................18
5  结论  ............................................................18
谢  辞  .............................................................19
参考文献  ..........................................................20
附录一:利用VHDL语言设计测频模块   ............................21
附录二:显示模块  .................................................22
附录三:VHDL语言设计代码  .......................................23
附录四:单片机汇编语言程序清单  .................................26


引言
随着微电子技术和计算机技术的迅速发展,以单片机作为核心的测量控制系统层出不穷。其中,数字频率计是为电子测试、资源勘探以及自动化控制等设备中不可缺少的重要模块。
对于以频率为参数的被测信号,通常多采用的是测频法或测周法。对于频率变化较小的被测信号, 采用测频或测周法的效果已经足够。但当被测信号频率变化范围较大,如100Hz~100kHz时,上述方法将很难满足在整个频率变化范围内所要求的测量精度。所以,如果要求有一种测量技术能对频率变化范围较大的信号的测量达到相当高的精度时, 就必须采用等精度频率测量技术。
1 设计内容
设计并通过测试基于8051单片机IP的频率测量系统。
1.应用8051单片机IP,用VHDL设计一等精度频率测量仪。
2.设计并制作测量仪的输入电路。
3.将设计下载到FPGA开发板,连接制作的输入电路,通过测量仪的测试和检验。
1.1 设计要求
1.1.1 知识要求
(1)使用Quartus II软件设计等精度频率测量模块。
(2)使用Quartus II软件设计应用8051单片机IP的系统顶层模块。
(3)使用Keil 51软件设计系统的汇编语言控制程序。
(4)使用Quartus II软件对以上系统设计进行仿真。
(5)设计、制作外围电路板。
(6)使用Quartus II软件把以上设计下载到实际FPGA开发板进行实际测试。
1.1.2.能力要求
(1)通过对等精度频率测量仪的设计与制作,培养学生勤于思考,勇于实践的良好作风。
(2)通过实训,培养学生科学、严谨的工作态度,使学生具有发现问题、解决问题的能力。
(3)通过实训,培养学生对电子系统的设计制作能力。
1.1.3. 素质要求
(1)结合教学内容,注重培养学生的设计意识、工艺分析意识、质量意识。
(2)使学生能锻炼自己快速收集、整理与分析信息资料的能力。
(3)培养学生敬业和创新的精神,进一步提高团队合作能力。

1.2 研究等精度频率计的背景与意义
随着微电子技术和计算机技术的迅速发展,以单片机作为核心的测量控制系统层出不穷。其中,数字频率计是为电子测试、资源勘探以及自动化控制等设备中不可缺少的重要模块。
对于以频率为参数的被测信号,通常多采用的是测频法或测周法。对于频率变化较小的被测信号, 采用测频或测周法的效果已经足够。但当被测信号频率变化范围较大,如100Hz~100kHz时,上述方法将很难满足在整个频率变化范围内所要求的测量精度。所以,如果要求有一种测量技术能对频率变化范围较大的信号的测量达到相当高的精度时, 就必须采用等精度频率测量技术。本设计利用VHDL语言和复杂系统可编程逻辑器件FPGA开发了一种等精度频率测量系统。该系统采用VHDL语言编写程序,选用EDA开发软件QuartusII作为开发平台,在FPGA中嵌入8051单片机IP来取代单片机,并具体给出了系统的软硬件设计流程,完成调试。
1.3 杭州康芯公司KX_7C5H开发板介绍
本次设计采用的是杭州康芯公司KX_7C5H开发板,配置工业级全兼容8051核,实现SOC系统设计,CPU主频高达250MHz,速度是普通51单片机的20倍,可完成部分DSP处理,还配DDS函数信号发生器IP核,并附有3032CPLD、EPCS Flash、4X4键盘、蜂鸣器、20MHz有源晶振荡、8键、8 LED、3数码管。JTAG、USB电源口/线、混合电压源、USB线,光盘资料等。含多种类型液晶驱动口,可直接插入并驱动多种类型字符型液晶、点阵型液晶、或/和数字彩色液晶显示屏。KX_7C系列板貌似一块普通的FPGA开发板,然而它配有符合工业标准的嵌入CPU-51单片机核,因此可以实现常规FPGA板无法企及的强大功能!
  

图1-1  杭州康芯公司KX_7C5H开发板file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
1.4 VHDL语言环境简介
VHDL主要用于描述设计复杂数字系统的结构、行为、功能和接口,在电子工程设计方面有很多优点。
1.与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。
2.VHDL技术完备,具有丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟;另外,它还支持同步电路、异步电路和其他电路的设计。
3.VHDL设计方法灵活,对设计的描述具有相对的独立性,设计者可以不懂硬件的结构,可不管最终设计实现的目标器件是,而进行独立的设计。
4.VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解设计功能和已有设计的再利用功能。符合市场要求的多人进行并行研发的大规模系统的迅速完成。
5.VHDL支持广泛,目前大多数DEA工具几乎都在不同程度上支持VHDL。

1.5 8051单片机IP简介
51 单片机最初是由Intel 公司开发设计的,但后来Intel 公司把51 核的设计方案卖给了几家大的电子设计生产商,譬如 SST、Philip、Atmel 等大公司。如是市面上出现了各式各样的但均以51 为内核的单片机,倒是Intel 公司自己的单片机却显得逊色了。这些各大电子生产商推出的单片机都兼容51 指令、并在51 的基础上扩展一些功能而内部结构是与51 一致的。

1.5.1基本结构
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpgfile:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
(a)                               (b)
图1-2    8051引脚图
1.5.2结构框架
PC 机的CPU 是基于冯诺伊曼的体系结构,然而MCU(单片机)、Dsp(数字信号处理器)都是基于哈佛结构的体系结构。哈佛结构与冯诺伊曼结构有很大的不同,在冯诺伊曼体系结构下只有一个地址空间,ROM 和RAM 可以随意安排在这一地址范围内的不同空间,即ROM 和RAM 地址统一分配。CPU 访问存储器时,一个地址对应唯一的存储单元,可能是ROM,也可能是RAM。而哈佛结构下ROM 和RAM 是分开编址,即程序和数据分开保存,访问时用不同的指令加以区分,并可同时访问,在这样的体系结构下有利于提高指令的执行速度。接下来我们将详细介绍单片机的存储器配置。
(1)一个8 位的微处理器(CPU)。
(2)片内数据存储器RAM(128B/256B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等,SST89 系列单片机最多提供1K 的RAM。
(3)片内程序存储器ROM/EPROM(4KB/8KB),用以存放程序、一些原始数据和表格。但也有一些单片机内部不带ROM/EPROM,如8031,8032,80C31 等。目前单片机的发展趋势是将RAM 和ROM 都集成在单片机里面,这样既方便了用户进行设计又提高了系统的抗干扰性。SST 公司推出的89 系列单片机分别集成了16K、32K、64K Flash 存储器,可供用户根据需要选用。
(4)四个8 位并行I/O 接口P0~P3,每个口既可以用作输入,也可以用作输出。
(5)两个定时器/计数器,每个定时器/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。为方便设计串行通信,目前的52 系列单片机都会提供3 个16 位定时器/计数器。
(6)五个中断源的中断控制系统。现在新推出的单片机都不只5 个中断源,例如SST89E58RD 就有9 个中断源。
(7)一个全双工UART(通用异步接收发送器)的串行I/O 口,用于实现单片机之间或单机与微机之间的串行通信。
(8)片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。SST89V58RD 最高允许振荡频率达40MHz,因而大大的提高了指令的执行速度。
1.5.3 特点
(1)指令系统与8051单片机完全兼容, 硬件部分也基本相同, 时钟频率可比传统的8051单片机要高。
(2)8051单片机I P core一般无内部ROM 和RAM,所有程序ROM和内部RAM都必须外接。用FPGA实现时, 可使用FPGA片内ROM、RAM资 源 实 现 。
(3)输出与输入(I /O)口是分开的。如果需要使用双向口功能, 必须外接一些电路才能实现。
(4)单片机程序可使用普通8051单片机程序编译器生成单片机HEX程序代码, 再在FPGA的EDA开发平台下下载到充当程序ROM的FPGA片内ROM以供使用。
1.6 LCD1602液晶显示器电路的介绍
1.6.1在单片机系统中应用液晶显示器作为输出器件的优点
(1)显示质量高
由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。
(2)数字式接口
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
(3)体积小、重量轻
液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
(4)功耗低
相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
1.6.2液晶显示简介
(1)液晶显示原理
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领 域。
(2)液晶显示器的分类
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
(3)液晶显示器各种图形的显示原理:
①线段的显示
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。
②字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
③汉字的显示
汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。
1.6.3 1602字符型LCD简介  
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。一般1602字符型液晶显示器实物如下图:
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
     file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg
                                           file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
图1-3   LCD1620引脚图
        
                           
图1-4   1602字符型液晶显示器实物
                           
1.7 试验、测试、试制加工所需主要仪器设备及条件
(1)主要仪器及设备:示波器、指针式万用表、数字式万用表、FPGA开发板等。
(2)仿真及编程软件:Quartus II、Keil uvision4编程调试软件。
(3)电路板制作焊接设备:Protell99SE、打印机、转印机、腐蚀槽、手动钻台、电烙铁等。
2  设计系统方案
2.1 系统框架
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png 本设计应用SOPC 和 8051 单片机IP 技术, 通过在FPGA 中嵌入8051单片机IP 来取代单片机,其框图如图2-1。本系统主要包括信号放大整形输入模块 、标准频率源晶振 、 测频模块、单片机控制模块、LCD 显示模块和键盘模块。其中,信号放大整形输入模块用来对待测信号的进行前端处理,以便作为测频模块的输入信号。测频模块用来测量被测信号的频率,用 VHDL 语言设计 , 由FPGA 实现计数。 单片机控制模块使用 8051 单片机 IP核在 FPGA中 实现。单片机控制模块控制测频模块进行测频,读取测频数据 , 并作相应数据处理 , 通过 LCD显示模块显示测量结果。晶振为 FPGA 中的测频模块和单片机控制模块提供标准频率信号和时钟信号。
            
  




图2-1 系统框架图

2.2频率测量模块
2.2.1周期测量方法
    (1) 直接周期测量法:用被测信号经放大整形后形成的方波信号直接控制计数门控电路,使主门开放时间等于信号周期Tx,时标为Ts的脉冲在主门开放时间进入计数器。设在Tx期间计数值为N,可以根据以下公式来算得被测信号周期:
Tx=NTs                        (2.1)
经误差分析,可得结论:用该测量法测量时,被测信号的频率越高,测量误差越大。
(2)等精度周期测量法:该方法在测量电路和测量精度上与等精度频率测量完全相同,只是在进行计算时公式不同,用周期1/T代换频率f即可,其计算公式为
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
Tx=                                (2.2)
2.2.2测频原理   
      测频模块内部结构如图2-2所示。主要通过一个预置门控制和两个计数器A,B实现。给CLK一个标准时钟频率fc,当测频开始使,先将CLR置1,使两个计数器清零。单片机给预置门CTRL置0,不让计数器计时,然后单片机在给预制门信号CTRL置1,当被测信号Tsig上升沿到来时与预制门信号同步时使能端EN为1,开始计数,经过一个预置时间T时,单片机将预置门信号CTRL置0时,计数器仍然计数,只有Tsig上升沿来临时使能端EN为0,计数才停止。一个预置时间是被测信号周期的整数倍, 计数器B 没有普通频率计的计数器计数最大为一个周期的误差, 实现等精度测量。计数器A 虽然还有最大为一个周期的误差, 但由于此误差与被测信号无关, 并且标准时钟信号的频率 fc通常非常高, 故可忽略。在一个预制门时间内,计数器A的计数值为QA=fc*T,计数器B的计数时间为QB=fx*T,由于QA/fc=QB/fx=T,fx=(QA/QB)*fc。一个预制门时间之后,两计数器的计数值AQ 和BQ 通过多路选择器MUX64-8,在单片机发出的选通信号SEL 控制下分8 次通过DOUT读入单片机控制模块。在单片机控制模块中由单片机软件通过以上公式计算待测频率 fx。

file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg

图2-2 测频模块内部结构图


2.2.3用VHDL描述硬件电路
(1)D触发器
D触发器是现代数字系统中最基本的时序单元和底层元件,本设计的D触发器在复位信号为高电平CP脉冲的上升沿(或者下降沿)的作用下,把D端的数据打入D触发器,在复位信号为低电平时,D触发器的输出端Q和Qb分别输出0和1,程序见附录三。
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg




D触发器逻辑符号
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png  

(2)32位计数器
    计数器能够记忆时钟信号脉冲个数的时序逻辑电路,不仅可以对脉冲进行计数,还可以分频、定时等。本设计中的32为计数器分别用来计表针频率信号和被测频率信号的周期数,计数器是以二进制数据的形式计数,为了提高测量精度所以讲计数器设为32位。在计数器使能端EN高电平时,当CLR置1时,计数器清零;当CLR置0,上升沿到来时计数值加1,程序见附录三。
32位逻辑符号
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png



file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg图2-3  32位计数器仿真图
3MUX64-8多路选择器
因为单片机的数据总线有限,一次只能读取一个8位的二进制数据。MUX64-8多路选择器的作用就是将两个计数器的64位数值暂存,通过单片机控制限号sel下分八次分八次将数值读入,程序见附录三。
MUX64-8多路选择器逻辑符号
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png





file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg
图2-4  MUX64-8多路选择器仿真图
2.3 标准频率源晶振
  本设计使用的是杭州康芯公司KX_7C5H开发板24M本振频率,进行32次分频当做计数频率,将24M频率进行二分频用作单片机频率。
2.4 单片机控制模块
(1)单片机总流程
首先将操作界面初始化,判断是否有按键按下,确认按键按下时,测频模块开始测频,测好的数据读取单片机,单片机按公式计算:
fx=(QA/QB)*fc                  (2.3)
主程序不断扫描键盘子程序,当某键按下时,程序跳转到相应的子程序执行其功能,然后返回继续执行键盘扫描主程序。当键盘子程序扫描到测频键按下时,读入键值后跳转到测频子程序,测频子程序先置测频控制位CLR(P1.6)、AS(P1.4)将FPGA内的计数器清零,选择测量被测信号。并将CS(P1.3)置零,即为选择测频,然后通过键盘将预置门的时间读入单片机,打开预置门进行测频计数,等预置门时间到后,关断预置门,FPGA关断预置门后将给单片机一个结束信号,单片机读入结束信号后,分四次将测频结果的32位数据读入单片机,计算后将结果换为BCD码送LCD1620显示输出。

file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg
图2-5 单片机总流程图



(2)测频子程序流程
测频开始时,STR口置1读准备,CTRL置1预制闸门关闭,CLR置1,是两个计数器同步清零,CTLR置0预制闸门打开,,当STR信号为0,一个时间周期完成,计数完毕,P2数据口准备读数,分别读取计数器的数值,测频结束。该模块主要完成单片机对FPGA的控制。单片机P0口连接上的8根线路为控制信号线,具体控制功能如下:
P0.0(CLR):脉宽计数复位端,CLR=1时计数器清零,D触发器触发状态。
P0.1(CTRL):单片机给预置门预置时间信号,当CTRL=1,预制门打开,当CTRL=0时,预制门关闭。
P0.7(STR):测频块给单片机的信号端,单片机接受到STR=0时,测频没有计数完毕,当STR=1,计数接受,将测得的数据传入单片机。
P0.6  P0.5  P0.4 (sel):计数值读出选通控制。sel=000,001,010.011,100,101,110,111时可从P2口由低8位至高8位分别读出两组4个8位计数值。程序见附录四。


file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg
图2-6  测频子程序流程
2.5 LCD显示模块
使用杭州康芯公司KX_7C5H开发板自带的LCD1620液晶显示器和相应的电路,根据相应的字符代码将数据转移为可是别的字母和数字,达到显示的效果。
表2-1 字符型 LCD 的引脚
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg









DDRAM 就是显示数据 RAM, 用来寄存待显示的字符代码。共80个字节, 其地址和屏幕的对应关系 如下表2-2:
表2-2 DDRAM地址和屏幕的对应关系
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image031.png

    HD44780的指令集及其设置说明,通过浏览该指令集,并找出对DDRAM 的内容和地址进行操作的指令。操作指令共 11 条指令:
(1)清屏指令功能:<1> 清除液晶显示器,即将 DDRAM 的内容全部填入"空白 "的 ASCII 码20H; <2> 光标归位,即将光标撤回液晶显示屏的左上方; <3> 将地址计数器(AC) 的值设为0。
(2)光标归位指令功能:<1> 把光标撤回到显示器的左上方; <2> 把地址计数器(AC) 的值设置为 0; <3> 保持 DDRAM 的内容不变。
(3)进入模式设置指令功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:位名设置 I/D 0=写入新数据后光标左移1=写入新数据后光标右移S0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移1个字符
(4)显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。 参数设定的情 况如下:位名 设置D 0=显示功能关 1=显示功能开C 0=无光标 1=有光标 B0=光标闪烁1=光标不闪烁 。
(5)设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。 参数设定的情况如下: S/C R/L 设定情况00光标左移1格,且 AC 值减101光标右移1格,且 AC值加 110 显示器上字符全部左移一格,但光标不动11显示器上字符全部右移一格,但光标不动 。
(6)功能设定指令功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名 设置 DL 0=数据总线为4位 1=数据总线为8位 N0=显示1行1=显示2行 F 0=5× 7 点阵/每字符 1=5× 10 点阵/每字符
(7)设定CGRAM 地址指令功能:设定下一个要存入数据的CGRAM的地址。 DB5DB4DB3为字符号,也就是你将来要显示该字符时要用到的字符地址。(000~111)( 能定义八个字符) DB2DB1DB0 为行号。( 000~111 )(八行)
(8)设定 DDRAM 地址指令功能:设定下一个要存入数据的 DDRAM 的地址。
(9)读取忙信号或 AC 地址指令功能: <1> 读取忙碌信号BF的内容,BF=1 表示液晶显示器忙,暂时无法接收单 片 机送来的数据或指令;当 BF=0 时,液晶显示器可以接收单片 机送来的数据或指令; <2> 读取地址计数器(AC) 的内容。
(10)数据写入 DDRAM 或 CGRAM 指令一览 功能: <1> 将字符码写入 DDRAM,以使液晶显示屏显示出相对应的字符; <2> 将使用者自己设计的图形存入 CGRAM。 DB7DB6DB5 可为任何数据,一般取“000” 。DB4DB3DB2DB1DB0 对应于每行5点的字模数据。
(11)从 CGRAM 或 DDRAM 读出数据的指令一览 功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符; <2> 将使用者自己设计的图形存入CGRAM。 DB7DB6DB5 可为任何数据,一般取“000”。DB4DB3DB2DB1DB0对应于每行 5点的字模数据。功能:读取DDRAM或CGRAM中的内容。基本操作时序:读状态输入:RS=L,RW=H, E=H 输出: DB0~ DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0~ DB7=指令码 输出:无读数据 输入:RS=H,RW=H,E=H 输出:DB0~ DB7=数据 写数据输入:RS=H, RW=L,E=下降沿脉冲,DB0~ DB7=数据 输出:无
在程序设计中先将液晶初始化,显示初始操作界面,当测频开始,按键按下,液晶第一行显示 DIANXIN   1201,第二行显示待测频率的大小多少KHz ,可保留两位小数点。
2.6 键盘模块
本设计因为使用按键不多,因此键盘使用的是独立按键,主要作用是当按键按下时,给单片机信号,开始测频。键盘设计主要是对按键进行消抖,分别有软件消抖和硬件消抖两种方法。本设计用KX_7C5H开发板上第八个独立按键用做测频按键。使用的是软件消抖,当按键按下时,延时10ms,然后再判断按键是否闭合,若闭合按键有效,从而达到消抖的作用。读取按键是否按下,用一个外部中断0实现 。
2.7 信号放大整形输入模块
因为外来信号一般是模拟信号,而单片机的输入是逻辑电平,也就是高电平的电压一般在2.4V以上,低电平在0.7V以下,无法直接读取信号,因此需要对输入信号进行放大整形,首先是放大幅度,使幅度满足逻辑电平的需要,其次对于整形我的理解是,单片机采集信号需要使用内部的时钟进行采集,如果脉冲宽度小于单片机工作的机器周期则单片机是不能采集到的,因此必须用整形电路将信号的幅度进行规范同时将信号的宽度进行规范,以便单片机可以正确识别,因此必须进行整形放大。
3  外围电路设计
信号放大整形的输入,利用了UA741CD可以实现把微弱的信号进行放大,uA741通用高增益运算通用放大器,早些年最常用的运放之一.应用非常广泛,双列直插8脚或圆筒8脚封装。工作电压±22V,差分电压±30V,输入电压±18V,允许功耗500mW.。U2A707相当一个非门,对波形进行整形滤波,得到数字信号,使FPGA能接收信号。电路图如图3-1。

file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image033.jpg                             图3-1  外围电路设计图
4  系统测试
调试是系统开始总体运行以前必须要做的工作,为的是检验各子程序及功能模块的性能。调试时要使用测试程序和专门的测试仪器。因此我们在编写正式程序的同时,还要编写简洁有效的测试程序,以便查错和纠错。对于本题目我们可以进行以下方面的调试。对于部分FPGA程序(例如计数器程序等),我们可以采用仿真的形式调试。
4.1 单片机程序调试
(1)显示程序调试:检验LCD1620是否有显示;
(2)键盘输入程序调试:检验键盘输入键值是否正确;
(3)计算程序调试:观察运算结果是否正确,是否出现溢出情况;
(4)单片机与FPGA通信调试:测试FPGA能否将数据准确地传给单片机;
(5)FPGA内部程序调试;
4.2信号放大整形调试
(1)闸门信号调试:用示波器观察闸门信号波形,以及高电平宽度。
(2)中断信号调试:首先用示波器观察波形,然后编写测试程序,观察单片机是否能够接收到中断信号,并执行中断程序。
(3)标准频率测试:用示波器观察波形以及频率值。


4.3 综合调试
完成以上各模块调试工作之后,可以进行系统整体调试。在调试过程中,认真观察FPGA与单片机的配合情况,在FPGA端口上设置若干测点,比如中断测点,闸门信号测点等,便于在系统出现故障时,检查测试。
4.4 调试中出现的问题
编程VHDL语言时,出现一下编程上的语法错误,一开始无从下手,后面经过查找资料,明白了Quartus II软件报错的处理方式,Quartus II软件会把报错的行数显示出来便于程序员查找,可以很快的解决问题。VHDL语言对编程上的格式比较严格,在编程过程中经常遇到由于语言格式上的出错而报错,例如符号上标示的错误等,一旦报错根据报错的信息一一解决即可。虽然调试过程问题众多,但经过多次的调试和修改,在最后也能实现最终的功能。

5  结论
本次设计结合了软硬件的设计,各项功能达基本能达到预定的设计指标。测频系统克服了传统的测频法或测周期法的不足,能在频率范围变化较大时,仍然有比较高的测量精度。而且本系统将单片机灵活的控制性能和FPGA模块具有定时精确及时和速度快的特点结合起来,使整个系统体积较小,价格也不高。由于数码管采用静态显示,因此,操作可靠,显示比较清晰。该设计具有测试精度高,制作简单,测量的精度不会随着被测信号频率的大幅度变化而变化等优点,由于该电路对频率的测试范围为100Hz~100kHz测量范围比较宽,在频率测试中有一定的应用前景。由于时间和实验条件所限,本设计在测频精度和硬件电路方面还存在着一些不足,需要进一步的完善和提高。
通过本次的毕业设计,我更加了解单片机的结构与功能与FPGA模块的原理;对Quartus II软、Keil 51软件的运用更加熟练,以前在学习这两个软件时,总觉得难度挺大的,每次老师布置任务时,总是得看课本来进行操作,但经过这一次的了解,相信如果在今后的工作中遇到,这一次的认识是个很好的参考对象;以及更加了解软硬件相结合的道理。虽然在设计过程中遇到的困难也不少,由一开始的迷茫,到后来的渐入佳境,我的导师给了我很大的帮助,教会我如何看待设计中遇到的每一个问题,找到问题的关键,然后一一破解,很感激导师对我的指导,让我懂得了在今后的生活中即使困难重重也要迎难而上。
谢  辞
随着毕业设计的完成,想着自己在未来的不久手上会多了一本本科的毕业证书,我心中无比激动,常言道:“多一份选择,就多一份希望”,我相信我这一份多的选择会让我未来的人生有更多的选择,在这里我想感谢当初支持我的所有人。
首先,我要感谢我的父母,感谢他们二十多年来对我的培育和支持,感谢他们当初明智的决定,不但让我完成了应有的学业,还让我的未来多了一份选择。
接下来,我要感谢所有上专本衔接的老师们,谢谢他们本应该在休息的周末,却来陪着是我们一起上课学习,教给我们更多的知识,再次感谢他们的付出。
最后,我要感谢我的母校对我的再造之恩,在这里我学会了很多从出生到现在自己从来不具备的东西,不单单指那些书本知识,更多的是在精神上熏陶、心灵上灌溉。还让我们有再一次选择的机会,继续学习更多的知识,谢谢母校给我们的再次选择,相信在未来的不久我们会因这一次多的选择而有更精彩的人生。
在这里我还要衷心感谢,我的导师(廖超平老师),不但在周末陪着我们一起上课学习,还在我出去实习中经常督促我的毕业设计进度状况。在整个毕业设计过程中,只要我有任何疑惑都会耐下心来指导我一一解决,很感谢他的引导。
   同时我也很感谢我自己,在本设计中即使困难重重,也没有想过放弃的精神;在学习的空余中,继续学习了更多的知识。通过这次的毕业设计,使我对单片机的认识更加的清晰,同时也提高了我对系统设计及软件设计的能力。
参考文献
[1]  杨刚,龙海燕.现代电子技术——VHDL与数字系统设计.北京:电子工业出版社,2004,39-59.
[2]  倪云峰等,单片机原理与应用,西安电子科技大学出版社,2009.
[3]  曾繁泰,李冰,李晓林.EDA工程概论.北京:清华大学出版社,2002,98-138.
[4]  陈海宴,51单片机原理及应用,北京航空航天大学出版社,2010.
[5]  潘松 黄继业,EDA技术实用教程,科学出版社,2009.
[6]  陈权昌,李兴富.单片机与应用.广州:华南理工大学出版社,2007.8.
[7] 任晓东、文博.CPLD/FPGA高级应用开发指南.北京:电子工业出版社,2003,22-29.
[8]  数字系统设计VerilogHDL(第四版),电子工业出版社,2011年.
[9]  谭浩强,C程序设计,清华大学出版社,2007.



















file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg附  录一  利用VHDL语言设计测频模块








附 录二  显示模块
file:///C:/Users/Wynn/AppData/Local/Temp/msohtmlclip1/01/clip_image037.png

附 录三  VHDL语言设计代码
(1)计数闸门信号产生模块VHDL 设计
libraryieee;
use ieee.std_logic_1164.all;
entity dff1is
    port( CTRL: in std_logic;
          Tsig: in std_logic;
          CLR: in std_logic;
           en: out std_logic);
end dff1;
architecturea of dff1 is
begin
     en <='0' when(CLR ='1')
     else CTRL when(Tsig = '1' andTsig'event)   
     else unaffected;
end  a;

(2) 三十二位计数器模块VHDL 设计
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt32 is
    port( en: in std_logic;
          CLK: in std_logic;
          CLR: in std_logic;
           QA: out std_logic_vector(31 downto 0));
end cnt32;
architecturev1 of cnt32 is
signal f:std_logic_vector(31 downto 0);
begin
    process(en,clk,clr)
       begin
       if CLR ='1' then
         f<= (others=>'0');
        elsif  clk'event and clk = '1'and en='1' then
          f<=f+1;
        else
          null;
       end if;
    end process;
       QA<=f;
end  v1;

(3) 多路选择器MUX64-8模块VHDL 设计
libraryieee;
useieee.std_logic_1164.all;
entitymux64_8 is
    port( sel: in std_logic_vector(2 downto 0);
          QA: in std_logic_vector(31 downto 0);
           QB: in std_logic_vector(31 downto 0);
          Dout: out std_logic_vector(7 downto 0));
endmux64_8;
architecturebehv of mux64_8 is
begin
  process(sel,QA,QB)
    begin
       case sel is
        when "000"=>
           Dout<=QA(7 downto 0);
        when "001"=>
           Dout<=QA(15 downto 8);
        when "010"=>
           Dout<=QA(23 downto 16);
        when "011"=>
           Dout<=QA(31 downto 24);
         when "100"=>
           Dout<=QB(7 downto 0);
        when "101"=>
           Dout<=QB(15 downto 8);
        when "110"=>
           Dout<=QB(23 downto 16);
        when others=>
           Dout<=QB(31 downto 24);
    end case;
end process;
end behv;















附  录四  单片机汇编语言程序清单

RS EQU P3.0
         RW   EQU P3.1
         E    EQU P3.2
         DAT  EQU 30H
         DAT1 EQU 31H

          ORG   0000H
          MOV   0FFH,#0FFH
          MOV   SP,#60H
          MOV DAT,#01H   ; CLEAR 液晶显示初始化
      LCALL  ENABLE     ; 如果使用LCD液晶显示,在程序开头必须加       上这句
          LCALL DISP3
          MOV DAT,#01H      ; CLEAR
     LCALL     ENABLE
          MOV  R5,#80H
          MOV  DPTR,#KONX
          LCALL FB6
          MOV   DPTR,#TC1
          MOV   R5,#0C0H
          LCALL FB1

          MOV DAT,#0CH   ; 关闭光标
      LCALL   ENABLE
          MOV   7AH,#00H
          MOV   7BH,#00H
          MOV   7CH,#00H
          MOV   7DH,#00H

KKE1:     LCALL KKEYI       ;键盘信号搜索
KCACOM: LCALL KCOM1    ;  A > 9 执行键盘命令
          LJMP KKE1
;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
     ;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KCOM1:  CJNE  A,#01H,KN88 ;     键1 (04):---------------------------(1)
          RET

;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU  键2(K05) LLLLLLLLLLLLLLLLLLLLLLLLUUUUUUUUUUUUUUUUUUUUUUUKKKKKKKKKKKKKKKK
KNJ99:    LJMP  MMKL
KN88:   CJNE  A,#02H,KNJ99 ; ----------------(2)
        MOV   DAT,#01H      ; CLEAR 液晶显示初始化
        LCALL ENABLE
        MOV   A,#4BH
        MOV   B,#80H
        LCALL DISP2        ;
        MOV   A,#32H
        MOV   B,#81H
        LCALL DISP2
          RET

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 键3(K06) JJJJJJJJJJJJJJJJJJJLLLLLLLLLLLLLLLLLLL
KAAN7: LJMP  KAAN   ;
MMKL  : CJNE A,#03H,KAAN7
        MOV   DAT,#01H      ; CLEAR 液晶显示初始化
        LCALL ENABLE
        MOV   A,#4BH
        MOV   B,#80H
        LCALL DISP2        ;
        MOV   A,#33H
        MOV   B,#81H
        LCALL DISP2
          RET
          ;--------------------------------------------------------------------------------------------------------------

;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 键4(K07)SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
KBBN: LJMP   KBBN3
KAAN: CJNE   A,#04H,KBBN     ;
        MOV   DAT,#01H      ; CLEAR 液晶显示初始化
        LCALL ENABLE
        MOV   A,#4BH
        MOV   B,#80H
        LCALL DISP2        ;
        MOV   A,#34H
        MOV   B,#81H
        LCALL DISP2
          RET

  ;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ  键5(K14) KKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJ
KDDN :  LJMP  KDDN7
KBBN3:  CJNE  A,#05H,KDDN   ;   键5仅
         MOV  DAT,#01H      ; CLEAR 液晶显示初始化
        LCALL ENABLE
        MOV   A,#4BH
        MOV   B,#80H
       LCALL  DISP2        ;
        MOV   A,#35H
        MOV   B,#81H
        LCALL DISP2
          RET

  ;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL  键6(K15) LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
KEEN:     LJMP KEEN8
KDDN7:    CJNE A,#06H,KEEN    ; 键6
         MOV  DAT,#01H      ; CLEAR
     LCALL    ENABLE
        MOV   A,#4BH
        MOV   B,#80H
        LCALL DISP2        ;
        MOV   A,#36H
        MOV   B,#81H
        LCALL DISP2
          RET

   ; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ  键7(K16) KKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJ
KDDN8:    LJMP  KFFN
KEEN8:  CJNE  A,#07H,KDDN8
         MOV  DAT,#01H      ; CLEAR
     LCALL    ENABLE
        MOV   A,#4BH
        MOV   B,#80H
        LCALL DISP2        ;
        MOV   A,#38H
        MOV   B,#81H
        LCALL DISP2
          RET

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL键8(K17)LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

KFFN:     CJNE A,#08H,KF8                    ; 键8控制
     MOV  DAT,#01H      ; CLEAR
     LCALL     ENABLE
                            ; -----------------------------------------------测频主程序-------------------------------------
          MOV   DPTR,#FN_A             ;以上程序显示液晶设置
          MOV   R5,#80H
          LCALL FCN9

   RRRV: LCALL  TESTF          ; 测频率子程序
          LCALL TESTFF         ; 数据显示调整子程序

          SJMP  RRRV

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
   KF8:
          RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

KKEYI:   LCALLKKS1    ; KEY SCANNING PROG
          JNZ  KLK1       ;  有键盘, 转跳 KLK1
  KN1:   LCALL DELAY
          LCALL DELAY
          SJMP KKEYI      ;  无键,转跳 KKEYI 继续测键

KLK1:    LCALLDELAY
          LCALL DELAY
          LCALL KKS1
          JNZ  KLK2       ;  确实有键,转跳至 KLK2
          LCALL DELAY
          SJMP KKEYI
                          ;--------------------------------------------
KLK2:   ;MOV   P1,#0FEH         ; THERE IS KEYI
          NOP
          JB   P1.1,NOK1
          MOV  A,#02H
          LJMP GOHM
NOK1:     NOP
          JB   P1.2,NOK2
          MOV  A,#03H
          LJMP GOHM
NOK2:     NOP
          JB   P1.3,NOK3
          MOV  A,#04H
          LJMP GOHM
NOK3:     NOP
          JB   P1.4,NOK4
          MOV  A,#05H
          LJMP GOHM
NOK4:     NOP
                         ;---------------------------------------------

;   MOV   P1,#0FDH          ; THERE IS KEYI
          NOP
          JB   P1.5,NOK5
          MOV  A,#06H
          LJMP GOHM
NOK5:     NOP
          JB   P1.6,NOK6
          MOV  A,#07H
          LJMP GOHM
NOK6:     NOP
          JB   P1.7,NOKR
          MOV  A,#08H
          LJMP GOHM
NOKR:     RET
                         ;---------------------------------------------

GOHM:     PUSH  ACC
KLK3:    LCALLDELAY
          LCALL KKS1
          JNZ  KLK3
          LCALL DELAY
          LCALL KKS1
          JNZ  KLK3
          POP  ACC
          RET

KKS1:  
          NOP
          NOP
          NOP
          NOP
          NOP
          MOV  A,P1
          CPL  A
          RET       ; IF THERE IS KEYING THEN A =/= 0;如果A=0表示没有任何键
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

ENABLE:   CLR RS
   CLR RW
   MOV P1,DAT
   CLR E
        nop
   SETB   E
        LCALL  DDT9
   RET

;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK显示子程序
ASC:    MOV    DPTR,#TA6
          MOVC  A,@A+DPTR
          RET
TA6:    DB    30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,20H,48H,7AH,4DH
          DB    0E4H,73H,2EH  ;   0EH- u ; 0FH- s  ;10H ->.


DISP3: MOV DAT,#38H;8bit 2 Rol 5*7
   LCALL  ENABLE
   MOV DAT,#0FH   ;OPEN LCD : 00001DCB
   LCALL  ENABLE
   MOV DAT,#06H   ;LEFT TO RIGHT:
   LCALL  ENABLE
   RET

       ;
;
   FB1:  MOV    R4,#14H
          MOV   R6,#00H
    RC5: MOV    A,R6
          INC   R6
          MOVC  A,@A+DPTR
          MOV   B,R5
          INC   R5
          LCALL DISP2
          DJNZ  R4,RC5
          RET

TC1:       DB    44H,69H,61H,6EH,20H,58H,69H,6EH,20H,31H,32H,4FH ,31H ,20H,20H,20H
          ;               DIANXIN     1201

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
   FB6:  MOV    R4,#0AH  ; SQUARE: ,SAWTOOTH , TRIANGLE, LADDER
          MOV   R6,#00H
   RCV:  MOV    A,R6
          INC   R6
          MOVC  A,@A+DPTR
          MOV   B,R5
          INC   R5
          LCALL DISP2
          DJNZ  R4,RCV
          RET

  KONX:   DB    20H,20H,47H,75H,61H,6EH,67H,20H,58H,69H,20H,20H,20H ;   GUANGXI
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
FCN9:  MOV    R4,#05H ;
          MOV   R6,#00H
   RCT9: MOV    A,R6
          INC   R6
          MOVC  A,@A+DPTR
          MOV   B,R5
          INC   R5
         LCALL  DISP2
          DJNZ  R4,RCT9
          RET
  ;
  FN_A : DB     46H,52H,45H,51H,3AH   ; FREQ:

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL


DISP2:    MOV   DAT,B  ; B是地址;A是显示数据
          LCALL  ENABLE
     MOV   P1,A
          SETB   RS
     CLR   RW
          nop
     CLR   E
          nop
    SETB   E
          LCALL DDT9
          RET

;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
DELAY:   MOV  R1,#0FH  ;    9H
  WWW:  MOV   R0,#0FFH
  NMN:  DJNZ  R0,NMN
         DJNZ R1,WWW
    RET

DDT9:   MOV  R3,#1FH
DDT8:   MOV  R2,#0FFH
DDT7:   DJNZ R2,DDT7
        DJNZ R3,DDT8
        RET



;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
                                                        ; 测频子程序
        ;MOV    10H,#07H
        ; MOV   11H,#06H
        ; MOV   12H,#05H
        ; MOV   13H,#04H
        ;MOV   14H,#03H
        ;MOV   15H,#02H
        ; MOV   16H,#01H

                ;RET
TESTF:
       SETB P0.7  
      CLR  P0.1
      CLR  P0.0
      SETB P0.0  
    CLR   P0.0
    SETB  P0.1
    ;LL: JNB P0.7, LL
     LCALLTIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
     LCALL TIS
     LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
     LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      LCALL TIS
      CLR  P0.1

  FLO:
      JB P0.7,FLO         ;等待计数,中断延时结束.即计数完

     CLRP0.6
     CLRP0.5
    CLR  P0.4
    MOV  A,P2
    MOV  20H,A

      CLR P0.5
     SETBP0.4
    MOV  A,P2
    MOV  21H,A

     SETB P0.5
    CLR   P0.4
    MOV   A,P2
    MOV  22H,A

    SETB  P0.5
    SETB  P0.4
    MOV   A,P2
     MOV  23H,A

    SETB   P0.6
    CLR    P0.5
    CLR    P0.4
    MOV    A,P2
    MOV   24H,A

    CLR    P0.5
    SETB   P0.4
    MOV    A,P2
    MOV    25H,A

    SETB   P0.5
    CLR    P0.4
    MOV    A,P2
    MOV   26H,A

    SETB   P0.5
    SETB   P0.4
    MOV    A,P2
     MOV  27H,A

      MOV 4AH, #24H                     
         MOV 4BH, #61H         ;40MHz的数值
    MOV  4CH, #39H
    MOV  4DH, #0CAH
    MOV  4EH, #80H
    MOV  4FH, #00H

    MOV  5AH,  #00H
    MOV  5BH,  #00H
    MOV  5CH, 27H   ;QB的数值
    MOV  5DH,    26H
    MOV  5EH,    25H
    MOV  5FH,  24H
    ACALL  MULNM
    ACALL  SEND8

    MOV 5AH, #00H
    MOV 5BH,  #00H

    MOV 5CH,  23H   ;QA的数值
    MOV 5DH,  22H
    MOV 5EH, 21H
    MOV 5FH,  20H

    ACALL  DIVD1
    MOV  36H,#00H
    MOV  35H, 4AH                    
         MOV 34H, 4BH
    MOV  33H, 4CH
    MOV  32H, 4DH
    MOV  31H, 4EH
    MOV  30H, 4FH

    ACALL  HEXBCD
    ACALL  PP
     RET

;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
  SEND8: MOV    R2,#0CH
  SEND7: MOV    R0,#44H
          MOV   R1,#54H
  RRQ9:  MOV    A,@R1
          INC   R1
          MOV   @R0,A
          INC   R0
          DJNZ  R2,RRQ9
          RET
  RRQ10: MOV    R2,#07H
   WWE4: MOV    A,@R1
          DEC   R1
          MOV   @R0,A
          INC   R0
          DJNZ  R2,WWE4
          RET
TIS:
      MOV 2AH,#0FFH     ;256*256uS延时
   TSM3:
      MOV 2BH,#0FFH
   TSM4:
      DJNZ 2BH,TSM4
      DJNZ 2AH,TSM3
      RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
  DIVD1: NOP             ; 2N BYTE / N BYTE= N BYTE ,HERE N=6 IN 31H
     MOV  30H,#0CH ; (44,45,46,47,48,49,4A,4B,4C,4D,4E,4FH)/(5A,5B,5C,5D,5E,5FH)=(4A,4B,4C,4D,4E,4FH)
     MOV  31H,#06H ; 除法程序,30H放置被除数字节数,31H放置除数字节数
  DIVPP: MOV A,AD1
     MOV  R2,A
     RL   A
     RL   A
     RL   A
     MOV  R3,A
     CLR  0F0H
     CLR  C
     MOV  A,#ADA
     SUBB A,R2
     MOV  AD3,A
     MOV  R1,#ADB
DIVMB2B: MOV A,@R1
     JNZ  DIVM2B
     DEC  R1
     DJNZ R2,DIVMB2B
     SETB 0F0H
     RET
DIVM2B: MOV R2,AD1
     MOV  R1,#ADB
     MOV  R0,AD3
DIVM2L: MOV A,@R0
     SUBB A,@R1
     DEC  R0
     DEC  R1
     DJNZ R2,DIVM2L
     JNC  DIVM20
DIVM2D: LCALL SHIL1
     JC   DIVM2S
DIVM2C: MOV R0,AD3
     MOV  R1,#ADB
     MOV  R2,AD1
DIVM2CL: MOV A,@R0
     SUBB A,@R1
     DEC  R0
     DEC  R1
     DJNZ R2,DIVM2CL
     JC   DIVM2E
DIVM2S: INC ADA
     MOV  R2,AD1
     MOV  R0,AD3
     MOV  R1,#ADB
     LCALLSUBMBB
DIVM2E: DJNZ   R3,DIVM2D
     RET
DIVM20: SETB   0F0H
     RET
     DB     02H,12H

  SHIL1: MOV R2,AD0
     MOV  R0,#ADA
SHIL1B: CLR C
SHILL:  MOV A,@R0
     RLC  A
     MOV  @R0,A
     DEC  R0
     DJNZ R2,SHILL
     RET


SUBMBB: CLR C
SUBMB1: MOV A,@R0
     SUBB A,@R1
     MOV  @R0,A
     DEC  R0
     DEC  R1
     DJNZ R2,SUBMB1
     RET

   AD0   EQU  30H
   AD1   EQU  31H
   AD2   EQU  32H
   AD3   EQU  33H
   AD4   EQU  34H
   AD5   EQU  35H
   AD6   EQU  36H
   ADA   EQU  4FH
   ADB   EQU  5FH
   ADC   EQU  4DH
   ADDV     EQU  5DH


  MULNM: NOP             ; N BYTES X MBYTES = N+M BYTES HERE N=6;M=6
     MOV  30H,#06H ; (4A,4B,4C,4D,4E,4FH)*(5A,5B,5C,5D,5E,5FH)=(54--5FH)
     MOV  31H,#06H ; 乘法程序,30H放置被乘数字节数,31H放置乘数字节数
MULTT:   MOV  A,AD0
     MOV  R3,AD1
     MOV  R2,A
     ADD  A,R3
     INC  A
     MOV  AD2,A
     MOV  A,#ADB
     CLR  C
     SUBB A,R3
     MOV  AD6,A
     MOV  R1,A
     SUBB A,R2
     MOV  AD5,A
     INC  R2
MULNMZ: MOV @R1,#00H
     DEC  R1
     DJNZ R2,MULNMZ
MULNMB: MOV R2,AD0
     MOV  R1,AD6
     MOV  R0,#ADA
     CLR  00H
MULNML: MOV A,ADB
     JZ   MULNMD
     MOV  B,@R0
     MUL  AB
     ADD  A,@R1
     MOV  @R1,A
     JNB  00H,MULNM1
     INC  B
MULNM1: MOV A,B
     DEC  R1
     ADDC A,@R1
     MOV  @R1,A
     MOV  00H,C
     DEC  R0
     DJNZ R2,MULNML
MULNMD: MOV R0,AD5
     CLR  A
     MOV  R2,AD2
MULNMS: XCH A,@R0
     INC  R0
     DJNZ R2,MULNMS
     DJNZ R3,MULNMB
     RET
; LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

;llllllllllllllllllllllllllllllllllllllllllll
HEXBCD :  NOP        ; 7 BYTE HEX TO 8 BYTE BCD : HEX(36H-30H)-->BCD(47H-40H)
  MUBTD: MOV      R0,#40H
     MOV      R7,#08H
     CLR       A
  LOPP1: MOV      @R0,A
     INC       R0
     DJNZ     R7,LOPP1

     MOV      R7,#38H
LOOP4:  MOV      R1,#30H
     MOV      R6,#07H
     CLR       C

  LOPP2: MOV      A,@R1
     RLC       A
     MOV      @R1,A
     INC       R1
     DJNZ     R6,LOPP2

     MOV      R5,#08H
     MOV      R0,#40H

  LOOP3: MOV      A,@R0
     ADDC     A,@R0
     DA        A
     MOV      @R0,A
     INC       R0
     DJNZ     R5,LOOP3
     DJNZ     R7,LOOP4
     RET


;*************************************************************************************
    PP:  MOV    16H,#0FH
          MOV   A,47H
          ANL   A,#0FH
          JNZ   JB47
          MOV   A,46H
          ANL   A,#0F0H
          JNZ   H46N
          MOV   A,46H
          ANL   A,#0FH
          JNZ   L46N   
          MOV   A,45H
          ANL   A,#0F0H
          JNZ   H45N
          MOV   A,45H
          ANL   A,#0FH
          JNZ   L45N
          MOV   A,44H
          ANL   A,#0F0H
          JNZ   H44N
          MOV   A,44H
          ANL   A,#0FH
          JNZ   L44N
          MOV   A,43H
          ANL   A,#0F0H
          JNZ   H43N
          MOV   A,43H
          ANL   A,#0FH
          JNZ   L43N
          SJMP  L43Y
  JB47:  SJMP   JM47

  L43Y:  MOV    R0,#40H     ; 0.5HZ
          LCALL DIS_A
          MOV   16H,#00H
          MOV   0AH,#40H
          RET

  L43N:  MOV    R0,#40H     ; 1HZ,4HZ
          LCALL DIS_A
          MOV   0AH,#40H
          RET

   H43N: MOV    R0,#40H     ; 16H
          LCALL DIS_B
          MOV   0AH,#20H
          RET

  L44N:  MOV    R0,#41H
          LCALL DIS_A
          MOV   0AH,#10H
          RET

  H44N:  MOV    R0,#41H
          LCALL DIS_B
          MOV   0AH,#08H
          RET

  L45N:  MOV    R0,#42H
          LCALL DIS_A
          MOV   0AH,#04H
          RET

  H45N:  MOV    R0,#42H
          LCALL DIS_B
          MOV   0AH,#02H
          RET

  L46N:  MOV    R0,#43H
          LCALL DIS_A
          MOV   0AH,#01H
          RET

  H46N:  MOV    R0,#43H
          LCALL DIS_B
          MOV   0AH,#60H
          RET

JM47:     MOV   R0,#44H
          LCALL DIS_A
          MOV   0AH,#70H
          RET
;llllllllllllllllllllllllllllllllllllll

DIS_A:    MOV   A,@R0     ; 40H     ; 显示
          ANL   A,#0FH
          MOV   10H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   11H,A
          INC   R0

          MOV   A,@R0
          ANL   A,#0FH
          MOV   12H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   13H,A
          INC   R0

          MOV   A,@R0
         ANL    A,#0FH
          MOV   14H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   15H,A
          INC   R0

          MOV   A,@R0
          ANL   A,#0FH
          MOV   16H,A
          RET

  DIS_B: MOV    A,@R0  ;  43H
          ANL   A,#0F0H
          SWAP  A
          MOV   10H,A

          INC   R0
          MOV   A,@R0    ; 44H                             ; 显示
          ANL   A,#0FH
          MOV   11H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   12H,A

          INC   R0
          MOV   A,@R0     ;    45H
          ANL   A,#0FH
          MOV   13H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   14H,A

          INC   R0
          MOV   A,@R0  ;  46H
          ANL   A,#0FH
          MOV   15H,A
          MOV   A,@R0
          ANL   A,#0F0H
          SWAP  A
          MOV   16H,A
          RET
;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
TESTFF:
          MOV  1BH,#0C4H
          MOV  1CH,#17H
          MOV  0DH,#0CH ; z
          MOV  0EH,#0BH ; H
          MOV  0FH,#0AH ;
          MOV  0CH,#0AH
          MOV  A,0AH
          CJNE A,#01H,POIN1
BASE:   MOV    B,#0CCH
          SJMP  POI8 ;          LCALL  DISP2
POIN1:  CJNE  A,#02H,POIN2
          MOV   B,#0CBH
          SJMP  POI8 ;
POIN2:  CJNE  A,#04H,POIN3
          MOV   B,#0CAH
          SJMP  POI8 ;
POIN3:  CJNE  A,#08H,POIN4
          MOV   B,#0C9H
          SJMP  POI8 ;
POIN4:  CJNE  A,#10H,POIN5
          MOV   B,#0C8H
          SJMP  POI8 ;
POIN5:  CJNE  A,#20H,POIN6
          MOV   B,#0C7H
          SJMP  POI8 ;
POIN6:  CJNE  A,#40H,POIN7
          MOV   B,#0C6H
          SJMP  POI8 ;
POIN7:   CJNE A,#60H,POIN8
          MOV  B,#0C7H
          SJMP  POI8 ;
POIN8:  CJNE  A,#70H,POIN9
          MOV   B,#0C8H
          SJMP  POI8 ;
POIN9:    RET

POI8:     MOV  A,#2EH ; . 数据
          MOV  1AH,B  ;显示 . 的地址
          LCALL DISP2  ; 显示 .
          MOV  R7,#0BH
RRD1:    MOV  A,1BH  ; 1BH中装地址
          INC  A
          CJNE A,1AH,NOEQ
          INC  A
NOEQ:   MOV   1BH,A
          MOV  R1,1CH  ; 1CH装数据
          DEC  R1
          MOV  1CH,R1
          MOV  A,R1
          CJNE A,#0FH,NOTX6
          MOV  A,0AH
          ANL  A,#60H
          CJNE A,#60H,NOTX6            
          MOV  0FH,#0DH
NOTX6:  MOV   A,@R1
          LCALL ASC
          MOV  B,1BH
          LCALL DISP2
          DJNZ R7,RRD1
          RET

         END
;----------------------------------------------------------------------------------------

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1083996 发表于 2023-10-19 11:03 | 只看该作者
腻害,论文
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表