EDA作业

发布 2022-09-02 20:38:28 阅读 3217

山东交通学院。

eda电路**设计软件。

设计报告。班级电气111

姓名罗汉林。

学号 110812135

专业电气工程及其自动化

学院信电学院。

简易频率计数器的设计。

设计说明。频率的测量实际上就是在1个单位时间内(通常1s)对信号脉冲进行计数,计数值就是信号频率。

1.设计目标。

用at89s51设计一个数显频率计数器对0~300khz的方波信号进行测量,信号从p3.5引脚输入,p1、 p2口做输出口,接一个8位led数码管,编写程序,测出从p3.5引脚输入的方波信号的频率并显示出来。

2.设计过程。

1)硬件电路设计。

电路组成: 选用 at89s51单片机作为控制核心,1个8位共阳数码管作为输出显示端。at89s51的p0口接数码管的段码控制,其中p0.

0~p0.6分别连接数码管的a~g引脚,p0.7连接dp端,低电平有效。

p2口接数码管位码选通部分,p2.0口控制第1个数码管,一直到p2.7口控制第8个,高电平有效。

硬件电路原理图如图1所示。

电路分析: 要使8位数码管显示实现动态显示,实际上就是通过p2口输出控制信号轮流选通数码管,共阳型数码管公共端为高电平方可选通,因此要求p2口由p2.0到p2.

7依次输出高电平,然后在数码管段码控制端口p0按照一定规律送出要显示的数字0~9。

图1 数显频率计电路图。

2)软件设计思路。

在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12 mhz时钟时,最大计数速率为500 khz),也就是说使用12 mhz时钟的at89s51单片机设计的频率计数器系统,所测的信号的频率不能大于500 khz,若大于则必须通过分频器分频才能测试,而本次任务的要求是对0~300khz的信号进行测量,所以可以直接进行。

利用at89s51单片机的t0、t1的定时计数器功能,来完成对输入的信号进行频率计数。设置定时器0工作在定时方式1,定时1s,并产生方波信号从p1.1引脚输出。

设置定时器1工作在计数方式1,对输入脉冲进行计数,溢出产生中断。将定时器1中断定义为优先。由于16位二进制加法计数器的最大计数值为65535,1s之内可能会产生多次溢出,所以需要在中断处理程序里对中断次数进行计数。

1s到后,将中断次数和计数器里的计数值取出进行综合数据处理,处理后的数据送显示。

定时器t0的计数初值:

由于定时器t0工作在定时方式时最大的定时时间大约为65ms,若要定时1s,可以采用定时20ms,中断50次来完成1s的定时。对于定时20ms来说,用定时器方式1可实现。

机器周期为:

tp=12/晶振频率=12/12mhz=1μs

计数初值为:x=2n-tc=216-20000=45536=b1e0h

故th0=b1h,tl0= e0h。

信号频率的计算:

t1工作在计数方式时最大的计数值为216,若假设1s内溢出c1次,最后未溢出的计数值为c2,则f=c1*216+c2= c1*65536+(th1*256+tl1)。

编写的源程序如下:

#include<>

#include <>

#define uchar unsigned char

uchar display_code=

//定义数组存放显示数据的编码。

uchar display_data[8]=;定义数组存放显示数据的各位。

uchar c1,b1;

sbit p1_1=p1^1;

void delay(void) /延时。

uchar i;

for(i=500;i>0;i--)

void display() 显示程序。

uchar i,k;

k=0x01;

for(i=0;i<8;i++)

display_data[0]=f;

k=1e7从这开始到本子程序结束的语句完成让八位led的高位为0时不显示。

for(i=0;i<7;i++)

f2=f1/k;

if(f2==0)

display_data[i]=10;

k=k/10;

void timer1(void) interrupt 3 //定时器1中断服务程序。

void timer0(void) interrupt 1 //定时器0中断服务程序。

th0=0xb1装入时间常数。

tl0=0xe0

p1_1=!p1_1p1.1取反,从p1.1引脚输出25hz的方波信号,通过导线连接。

/到p3.5引脚输入,以方便调试程序。若使用其它信号源,则去掉即可。

if (b1==49)

convert();

c1=0将计数值清零。

b1=0;th1=0;

tl1=0;

else b1++;

void main(void) /主函数。

p0_1=0;

c1=0;b1=0;

th1=0;

tl1=0;

tmod=0x51;

th0=0xb1;

tl0=0xe0;

ie=0x8a;

tcon=0x50;

while(1)

display();

3)程序流程图:

设计总结:本学期我选修了eda电路**,通过这一学期的学习,我学会了很多关于单片机的知识。最后的作业也很大的锻炼了我:

(1)掌握了电子系统设计的流程,熟悉了各种硬件电路以及软件编程方法。(2)学会了利用keiluvision2对汇编语言进行编译过程。对protues软件也有了直观的学习。

(3)对设计思路有了更好的理解,也学会根据题目要求设计相应的程序。

最后,感谢饶老师的悉心教导,我会更加努力的学习单片机。

EDA作业

电子电路基础 eda作业。multisim的应用之晶体管放大器的设计与调测。本实验的主要目的是熟悉multisim软件的使用,包括电路图编辑,虚拟仪器仪表的使用和掌握常见电路分析方法。能够运用multisim软件对模拟电路进行设计和性能分析,掌握eda设计的基本方法和步骤。熟练掌握有关单级放大电路有...

EDA作业

控制灯亮灭的一个eda程序 library ieee use use 以上三条语句引入可用的函数库。entity light is 定义实体,名为light port clk1 in std logic 程序仅有时钟信号这一个输入。light buffer std logic vector 7 do...

eda作业

eda综合作业。1 任务 设计vhdl模块,输入模块的时钟信号为50mhz,输出如以下参数的信号 周期为22.6us,占空比为75 2 方案 输入的信号周期t 1 50m 0.02us,输出的21.5us的信号用计数器来实现,并且占空比为75 那么。输出信号的低电平范围 t1 22.6 25 5.6...