基于tc1的频率计设计

发布者:Changsheng520最新更新时间:2016-10-25 来源: eefocus关键字:tc1  频率计 手机看文章 扫描二维码
随时随地手机看文章
//***************FileName:Capature.C***************//

//***************ICCAVR V6.30编译*****************//

#include        
#include           
#define uchar unsigned char
#define uint unsigned int

#define CON 1000      //频率常数定义
uchar Flag=0;         //捕获次数定义

//数码管字型表,对应0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F//
uchar Table[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                 0x7f,0x6f,0x77,0x7c,0x39,0x5E,0x79,0x71};
uchar Data[4]={0,0,0,0};       //显示初始值:0 0 0 0
uint CNT1;                    //第一次捕获值
uint CNT2;                    //第二此捕获值
uint CNT=100;                 //捕获差值 
      
void DelayMs(uint i)           //Ms级延时,参数i为延时时间
{uint j;
for(;i!=0;i--)
{for(j=2000;j!=0;j--) {;}}
}

void Pre_Display(void)         //预显示函数,数码管显示检测
{uchar i;
for(i=0;i<16;i++)
{PORTB=0x00;
   PORTA=Table[i];
DelayMs(100);
}
}

void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
{uchar i,sel=0x08;           
for(i=0;i<4;i++)
{PORTC=~sel;                  //选通最右边的数码管
   PORTA=Table[p[i]];          //送字型码
   DelayMs(2);                 //显示延时    
   sel=sel>>1;                 //移位以显示前一位
}
}

void HZ(uint i,uchar *p)
{uint TEM;
p[0]=CON/i;
TEM=CON%i;
TEM=TEM*10;
p[1]=TEM/i;
TEM=TEM%i;
TEM=TEM*10;
p[2]=TEM/i;
TEM=TEM%i;
TEM=TEM*10;
p[3]=TEM/i;
}

void Init_IO(void)             //初始化I/O口
{DDRA=0xff;                    //设置A口为推挽1输出
PORTA=0xff;
DDRC=0xff;                    //设置C口为推挽1输出             
PORTC=0xff;
DDRD=0x00;                    //设置D口为带上拉电阻输入
PORTD=0x00;    
}

void Init_Timer1(void)         //初始化T/C1的输入捕获中断
{TIMSK=TIMSK|0x20;             //输入捕获使能
TCCR1B=0xC2;                  //输入捕获噪音使能,下降沿捕获,时钟8分频1uS计数一次。
TIFR=0x20;                    //清中断标志
SREG=SREG&0x7f;               //全局中断关
}

void main(void)
{uchar i;
Init_IO();                    //初始化I/O口
PORTA=0xff;                   //点亮以测试所有的数码管
PORTC=0xf0;   
DelayMs(300);
PORTC=0xff;                   //熄灭所有的数码管
Pre_Display();                //预显示,数码管显示测试
PORTC=0xff;
Init_Timer1();                //T/C1初试化 
while(1)
{
while(TIFR&0x20)             //捕获检测
      {TIFR|=0x20;             //清除捕获标志
    CNT=ICR1L;              //CNT暂存
       CNT2=(ICR1H<<8)+ICR1L; //CNT2存放当前捕获值
       CNT=CNT2-CNT1;          //CNT存放两次时间差
       CNT1=CNT2;              //CNT1存放上次捕获值
       Flag++;}                //检测到第一次捕获
   if(Flag==2)                 //检测到第二此捕获
      {Flag=0;                 //清除捕获检测标志
    HZ(CNT,Data);           //数据处理
    for(i=0;i<100;i++)      //频率显示
        Display(Data);
    CNT=0;CNT1=0;CNT2=0;}} //清除捕获值及捕获差值
}

关键字:tc1  频率计 引用地址:基于tc1的频率计设计

上一篇:看门狗定时器的c语言编程
下一篇:基于tc1的波形发生器设计

推荐阅读最新更新时间:2024-03-16 15:17

51单片机频率计程序(4位不带小数点)
**************************************************************** 51单片机设计的4位不带小数点的频率计c语言程序 ***************************************************/ #include AT89X51.H #include stdio.h int value=0,n=0; int n,n1,n2,n3,n4; int LEDData = { 0xC0, //"0" 0xF9, //"1" 0xA4, //"2" 0
[单片机]
基于单片机高性价比频率计的设计与实现
1 系统测量原理 测量方法采用多周期同步测量法,保证了测量精度。 多周期同步测量原理与传统的频率和周期的测量原理不同,时钟信号(f0)经同步电路作用后与被测信号同步。主门 与主门 在时间T 内被同时打开,于是计数器 和计数器 便分别对被测信号和时钟信号的周期数进行累计。在T内,事件计数器的累加数为Na;时间计数器的累加数为Nb。再由单片机运算得出被测频率为(Na/Nb)×f。由于D触发器的同步作用,计数器 所记录的Na值已不存正负1误差的影响。但由于时钟信号与闸门的开和关无确定的相位关系,计数器 所记录的Nb值仍存在正负1误差的影响,由于时钟频率很高,正负1误差影响小,所以测量精度与被测信号频率无关,且在全频段的测量精度是均
[单片机]
基于单片机高性价比<font color='red'>频率计</font>的设计与实现
频率计算工具(FCT)简化测试程序开发
1 引言 数字信号处理技术为工程师进行特殊模拟、混合信号应用开发提供了极大的灵活性。然而这一灵活性的增加也使工程师开发测试程序时存在不易发现的缺陷从而降低测试性能的可能性有所增加。 2 使采样技术符合测试频率的要求 进行模拟DSP测试时工程师依赖复杂的相关采样技术保证采样与测试频率一致。要实现相关采样需要满足下列公式的最优解决方案: 式中:M为采样窗口中的周期数; N为采样点数;Ft为测试频率; Fs为采样频率。 满足该公式测试程序编写人员必须考虑各种限制:M/N的比值必须是素数,N必须是2的整数次幂才能保证使用快速傅立叶变换技术的相关性。同时N必须足够大以提供所需的分辨率,但又不能太大否则测试时间会太长。另外正确的解决
[测试测量]
特<font color='red'>频率计</font>算工具(FCT)简化测试程序开发
基于单片机和CPLD的数字频率计的设计(图)
引言 在传统的控制系统中,通常将单片机作为控制核心并辅以相应的元器件构成一个整体。但这种方法硬件连线复杂、可靠性差,且在实际应用中往往需要外加扩展芯片,这无疑会增大控制系统的体积,还会增加引入干扰的可能性。对一些体积小的控制系统,要求以尽可能小的器件体积实现尽可能复杂的控制功能,直接应用单片机及其扩展芯片就难以达到所期望的效果。 复杂可编程逻辑器件(CPLD)具有集成度高、运算速度快、开发周期短等特点,它的出现,改变了数字电路的设计方法、增强了设计的灵活性。基于此,本文提出了一种采用Altera公司的CPLD(ATF1508AS)和Atmel公司的单片机(AT89S52)相结合的数字频率计的设计方法。该数字频率计电路简洁,
[电源管理]
基于单片机和CPLD的数字<font color='red'>频率计</font>的设计(图)
等精度频率计的实现
频率测量在电子设计和测量领域中经常用到,因此对频率测量方法的研究在实际工程应用中具有重要意义。常用的频率测量方法有两种:频率测量法和周期测量法。频率测量法是在时间t内对被测信号的脉冲数N进行计数,然后求出单位时间内的脉冲数,即为被测信号的频率。周期测量法是先测量出被测信号的周期T,然后根据频率f=1/T求出被测信号的频率。但是上述两种方法都会产生±1个被测脉冲的误差,在实际应用中有一定的局限性。根据测量原理,很容易发现频率测量法适合于高频信号测量,周期测量法适合于低频信号测量,但二者都不能兼顾高低频率同样精度的测量要求。 1 等精度测量原理 等精度测量的一个最大特点是测量的实际门控时间不是一个固定值,而是一个与被测信号有
[测试测量]
等精度<font color='red'>频率计</font>的实现
示波器硬件频率计
  大家好,对于波形的频率测量,您知道有哪种方法可以不受采样率控制,测量精度高到在停止状态下,测量结果依然能随信号频率的微小波动而改变吗?当屏幕上出现的波形不足一个周期时,在不放大水平时基的情况下,您知道如何自动测量其波形的频率吗?   图1 硬件频率计测量   按下【Measure】键,在测量项选择菜单中旋转旋钮B选中频率参数项,返回到主界面,可看到对屏幕波形频率的测量结果。   我们按下频率计软键,可对测量通道进行选择,短按旋钮A选中CH1,在屏幕的右上角就会出现硬件频率计的测量结果。由于示波器的测量功能只对屏幕内的波形进行测量统计,所以当屏幕上出现的波形不足一个周期时,频率信息便不会获得,但这并不会影响硬件频率计的测
[测试测量]
示波器硬件<font color='red'>频率计</font>
一个精练的频率计与时钟程序
$regfile = m16def.dat $crystal = 7372800 $baud = 9600 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6 Config Lcd = 16 * 2 Config Int0 = Falling Config Timer0 = Timer , Prescale = 1 Dim Hs As Integer Dim Hr As Integer Dim Hh As Long Dim Hz As Byte : Hz =
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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