51单片机频率计的中断程序怎么设计
答案:1 悬赏:0
解决时间 2021-10-22 19:17
- 提问者网友:且恨且铭记
- 2021-10-21 21:36
51单片机频率计的中断程序怎么设计
最佳答案
- 二级知识专家网友:空山清雨
- 2021-10-21 22:05
定时器1 1MS中断一次,5次是5ms,乘200就是1秒种,其初值由晶振频率决定,有计算软件
当然,也可以中断10次或20次,频率判断更准确,但响应速度慢了
1600或800方波接入定时器/计数器0的外部输入引脚上,好像是P3.4
程序如下:
void init()//初始化设置
{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=.0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=......;
TL1=.......;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;// 5ms的计数值
ee=200*dd;//换算为1秒钟的计数值
if((ee>750)&&(ee<850))
{
P3.5=0;
}
if((ee>1550)&&(ee<1650))
{
P3.5=1;
}
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=....;.
TL1=....;.
if(aa==5)//中断5次,共5ms
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}
当然,也可以中断10次或20次,频率判断更准确,但响应速度慢了
1600或800方波接入定时器/计数器0的外部输入引脚上,好像是P3.4
程序如下:
void init()//初始化设置
{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=.0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=......;
TL1=.......;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;// 5ms的计数值
ee=200*dd;//换算为1秒钟的计数值
if((ee>750)&&(ee<850))
{
P3.5=0;
}
if((ee>1550)&&(ee<1650))
{
P3.5=1;
}
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=....;.
TL1=....;.
if(aa==5)//中断5次,共5ms
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯