定时器中断—频率计程序

发布者:技术旅人最新更新时间:2012-11-10 来源: 21ic 关键字:定时器中断  频率计  延时子函数 手机看文章 扫描二维码
随时随地手机看文章

/*注:定时器中断的例子,简单的频率计,初学者留意各引脚电
 压极性和电压值,不可超出5V,我们只是做学习实验,不要
 超出51hei单片机学习板的承受范围,否则要求对电子非常熟悉,
不然会烧坏芯片, 版权:www.51hei.com,注意:P1.3与P1.7要相连接
如果是测量外部频率要共地.
*/
#include //头文件
#include
#define uchar unsigned char//宏定义
#define uint  unsigned int
sbit Fin=P1^3;  //测量频率管脚
sbit Fout=P1^7;  //发生频率管脚
uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
void display(uchar *lp,uchar lc);  //显示子函数
void delay(); //延时子函数
void mee_F(); //测频率子函数
void mee_T(); //测周期子函数
void Fry_mee(); //测频测周选择的子函数
uchar l_tmpdata[8]; //程序显示的缓冲区
bit int_flag; //中断事件相应的标志
uint fry;   //保存的频率值
void init() ;
void main() //主函数
{
init(); // 调用初始化函数

}
void init()   //初始化函数
{
uint tmp; //数据转换缓冲区
uint i=2000;//显示延时,提高亮度
EA=1; //打开总中断
TMOD=0x11;//工作方式3
TH0=256-(50000/256); //装入初值
TL0=256-(50000%256);
TH1=256-500/256;
TL0=256-500%256;
ET0=1;  //定时器0开
ET1=1;  //定时器1开
TR1=1;  //启动定时器1
     while(1)
     {
 Fry_mee();//开始测量
 l_tmpdata[0]=tmp/10000;  //测量完后将整数分离出来
 tmp=tmp%10000;   //进行显示
  l_tmpdata[1]=tmp/1000;
 tmp=tmp%1000;
 l_tmpdata[2]=tmp/100;
 tmp=tmp%100;
 l_tmpdata[3]=tmp/10;
 l_tmpdata[4]=tmp%10;
  while(i--)  //显示延时,提高亮度
 {
  display(l_tmpdata,5); //用数字显示频率
 }
   i=2000;  //从新装入初值
     }
}
void time0() interrupt 1 //定时器0的中断函数
{
 int_flag=1;    //中断标志
}
void time1() interrupt 3   //定时器1的中断函数,用来产生频率
{
 TH1=(65536-1000)/256; //从新赋值
 TL1=(65536-1000)%256;
 Fout=!Fout;  //?反,产生频率,即频率发生器
}
void Fry_mee()
{
 if(fry<2000)   //?于2k的,侧周
    mee_T();
 else if(fry>=2000) //大于2k的,测频
  mee_F();
}
//测频原理:用一个标准的50ms计数中断,对被测信号计数
void mee_F()  //测频子函数
{
 bit lhj_old=1,lhj_new=1;  //定义起始状态
 uint f_count=0;//计数变量
 int_flag=0;
 TH0=(65536-50000)/256;//定时器,初值50ms
 TL0=(65536-50000)%256;
 TR0=1;    //启动定时器0
     while(1)   //死循环,测频
     {
 lhj_new=Fin; //?现在频率引脚的状态
 if(lhj_old!=lhj_new) //与前一刻的值比较
 f_count++;
 lhj_old=lhj_new; //将新值赋给旧值
 if(int_flag) //如果到了定时时间
   {
  TR0=0; //关闭定时器0
  fry=f_count*10; //计算频率,f_count=f_count*20/2
  //一个周期有2个跳变,20个周期为1s
  return;     //返回
   }
     }
}
//测周原理:以被测信号的一个周期为中断源,对单片机及其
//周期进行计数读?定时器的值为计数值
void mee_T() //测周子函数
{
 bit lhj_old=0,lhj_new=0; //定义初始状态
 uchar temp_flag=0;
 uint t_count;  //计数变量
 TH0=0;   //赋初始值
 TL0=0;
 while(1) //死循环,测周
 {
  lhj_new=Fin; //取现在的频率发声引脚的状态
   if(lhj_old&&!lhj_new) //当下降沿来临时,启动定时器
   {
  temp_flag++;
  TR0=1;   //启动定时器并开始计数
   }
  if(temp_flag==2)
  {
  TR0=0; //停止计数
  t_count=TH0*256+TL0;//取得当前的计数值
  fry=1000000/t_count;//计算频率,这个1000000是
  //晶振12M经12分频的计数脉冲
  return;   //返回
  }
  lhj_old=lhj_new;
     }
}
void display(uchar *lp,uchar lc)  //显示子函数
{
 uchar i;
 P2=0;
 P1=0xf8;
 for(i=0;i {
  P2=table[lp[i]];
  delay();
  if(i==7)
  break;
  P2=0;
  P1++;
 }
}
void  delay()  //延时子函数
{
 _nop_();_nop_();_nop_();_nop_();_nop_();
}

关键字:定时器中断  频率计  延时子函数 引用地址:定时器中断—频率计程序

上一篇:定时器计数LED显示的简单程序
下一篇:按键控制音阶声音输出

推荐阅读最新更新时间:2024-03-16 13:12

基于CPLD的简易数字频率计的设计
摘要:CPLD器件的出现给现代电子设计带来了极大的方便和灵活性,使复杂的数字电子系统设计变为芯片级设计,同时还可以很方便地对设计进行在线修改。首先介绍了频率计的测频原理,然后利用CPLD芯片进行测频计数,从而实现了简易数字频率计的设计。此频率计的设计采用基于VHDL的“Top-Down”(自上而下)的设计方法,从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。所设计的电路在GW48系列SoPC/EDA实验箱上通过硬件仿真,下载到目标器件上运行,能够满足实际测量频率的要求。 关键词:CPLD;VHDL;频率计;设计 0 引言 目前已经有不少文献分别从不同的角度对此问题进行了讨论和研究。有基于FPG
[工业控制]
基于CPLD的简易数字<font color='red'>频率计</font>的设计
M40 定时器 中断程序形象化理解
框架与要点 编写单片机类的程序,最核心、最重要的是上面的框架。 硬件支持:单片机 软件框架 初始化代码 时钟配置 定时器配置 中断配置 功能代码 通过此框架我们会明白,初始化代码是重中之重。实际初始化代码是初始化寄存器配置。 时钟配置,是初始化时钟相关的寄存器配置 定时器配置,是初始化定时器相关的寄存器配置 中断配置,是初始化中断相关的寄存器配置 这里引申出一个重要概念,寄存器。 展示的时间到了,实际上寄存器就是一排开关,一排管道,一排过滤器。 如果寄存器的一位(一个开关)是红色的,代表这个这个位管理这个通道(每个色块)关闭,如果是绿色的代表这个通道打开,当寄存器1~5的一位都变成绿色,蓝色的电
[单片机]
M40 <font color='red'>定时器</font> <font color='red'>中断</font>程序形象化理解
AT89S51单片机6位数显频率计数器
1. 实验任务 利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。 2. 电路原理图 图4.31.1 3. 系统板上硬件连线 (1). 把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 (2). 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 (3). 把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的W
[单片机]
PIC16F15323单片机 (中断定时器Timer0)
开发环境选择的是 MPLAB X IDE v5.50和 xc8-v2.32-full-install-windows-x64-installer。 1 基本原理 2 实现代码 主要根据FIGURE 25-1 和中断的逻辑框图来编写代码,这样代码的可读性强,也便于理解。但有些寄存器在框图中可能没有说明,所以也需要仔细阅读定时器0的官方文档,即基本原理部分。 /* * File: timer0.c * Author: Sure *---------------系统功能: 中断 定时器0 * Created on October 21, 2021, 7:48 PM */ // PIC16F
[单片机]
PIC16F15323单片机 (<font color='red'>中断</font>与<font color='red'>定时器</font>Timer0)
中断&定时器(二)
1、中断 上图即为中断过程示意图,产生中断的请求源被称为中断源,中断源向CPU提出的处理请求被称为中断请求或中断申请。CPU暂时中止当前的事件,转去处理中断请求所对应的事件称为CPU的中断响应过程,对事件的整个处理过程称为中断服务(中断处理)。处理完毕后,返回到原先被中止的地方称为中断返回。 80C51中断系统结构: 80C51的终端系统有5个中断源(52有6个),两个 优先级 ,可以实现二级中断嵌套。 2、51单片机的定时/计数器 51 单片机 有两个定时/计数器T0和T1,为16位可编程计数器,定时器的实质是加1计数器(16位),由低8位和高8位两个寄存器组成,最大计数值为65535个计数脉冲。 该加
[单片机]
<font color='red'>中断</font>&<font color='red'>定时器</font>(二)
MSP430用按键中断控制定时器产生持续 1s 的周期信号
////////////////////////////////////////////////////////////////////////////////////////////////////// // 2012 年吉林省大学生电子设计大赛 C题 声源定位系统 ----(声源部分) // 要求: 有信号产生电路, 放大电路, 声音频率 800Hz 左右, 按一次键响声持续 1 秒. // 声源模块体积不超过 4cm*4cm*4cm. //==========================================================================================
[单片机]
msp430G2553定时器中断控制LED每秒进行亮熄变化
/////////////////////////////////////////////////////////////////// // msp430G2553的定时器中断控制LED每秒钟进行亮熄变化 /////////////////////////////////////////////////////////////////// #include "msp430G2553.h" void led_init(); void timer_init(); void delay(int); //---------------------------------- void led_init() { P1DIR
[单片机]
STM32学习笔记——高级定时器TIM1更新中断配置
stm32高级定时器TIM1,更新中断初始化配置和普通定时器差别不大,需要注意的是结构IM_TimeBaseInitTypeDef中TIM_RepetitionCounter配置问题。TIM_RepetitionCounte是用来配置重复计数,就是重复溢出多少次才给你来一个溢出中断,只有高级定时器需要配置。下面是官方库中对它的注释: 它对应的寄存器叫TIM1_RCR.如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成N 秒中断一次。下图是stm32参考手册中对该寄存器的详细解释: 总结一下高级定时器溢出中断配置的步骤: 1,时钟使能 2,配置预分频、自动重装值和重复计数值 3,清除中断标志
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved