结合555 电路实验和单片机定时器频率计实验

电子实验

52人已加入

描述

结合555 电路实验和单片机定时器频率计实验

一. 实验目的
利用单片机的定时器/计数器功能,开发设计一个低频信号频率计。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC 单片机综合仿真实验仪 一台
10K 电阻 二只
104 电容 二只
三. 实验内容
利用实验十一的555 多谐振荡器产生的输出为输入(频率低于6KHz),用单片机算出
频率,并在LED 上显示。
四. 实验要求
用定时器0 作为定时器,定时1s;用定时器1 作为计数器,对输入的脉冲进行计数。
利用ZLG7290 键盘显示芯片在LED 上显示五位的频率数值。
五. 实验步骤
1. 首先按实验十一的555 多谐振荡器电路图连接,其中将474 电容换为104 电容。
2. 用导线连接A2 区的T1 与C6 区的OUT(即555 的输出)。
3. 用导线连接A2 区的P16 与D5 区的SCL。
4. 用导线连接A2 区的P17 与D5 区的SDA。
5. 将D5 区的RST_L 连接到+5V。
6. 短接C6 区JP5 的555 电源跳线和D5 区JP1 的电源跳线。
7. 编写程序并运行,可以在D5 区的数码管上显示频率值。
六. 实验预习要求
认真阅读实验参考程序,理解程序的算法和原理。
七. 实验参考程序
#include "reg52.h"
#include "Zlg7290.h" //Zlg7290 库
#include "viic_c51.h" //I2C 库
unsigned char scount;
void timer0_int() interrupt 1
{
TR0=0; //关闭定时器
TH0=0x4C; //重装定时器值

TL0=0x19;
TF0=0; //清除溢出标志
scount--;
if(scount>0) //到1s 了吗?
TR0=1; //没到,开定时器
else
TR1=0; //到了,停止T1 的计数
}
main()
{
unsigned char a[5];
unsigned char i,resh,resl;
unsigned long int freq;
TMOD=0xD1;
//定时器0 工作在定时方式1,定时器1 工作在计数方式1
TH0=0x4C; //定时50ms
TL0=0x19;
TH1=0; //计数值清0
TL1=0;
scount=20; //定时1s
ET0=1; //开定时器0 中断
EA=1; //开总中断
TR0=1; //启动定时器和计数器
TR1=1;
for (i=0;i<5;++i)
a[i]=0;
ZLG7290_SendBuf(a,5); //在LED 上显示5 位0。
while(1)
{
if(!scount) //1s时间到
{
resh=TH1; //取出计数值
resl=TL1;
TH1=0; //计数值清零
TL1=0;
TH0=0x4C; //重装定时器0
TL0=0x19;
scount=20; //定时1S
TR0=1; //启动定时器和计数器
TR1=1;
freq=resh*256+resl; //计算频率值
a[0]=freq%10; //将各位分离显示

a[1]=(freq/10)%10;
a[2]=(freq/100)%10;
a[3]=(freq/1000)%10;
a[4]=freq/10000;
ZLG7290_SendBuf(a,5); //送ZLG7290 显示
}
}
}
八. 实验思考题
(1)请编写一段程序实现6KHz 以上的频率计。
(2)请用硬件实现,用本程序制作6KHz 以上的频率计。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分