1593|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

CAP功能测频率 [复制链接]

STC12C5608AD单片机带有CAP功能,可以利用CAP功能测量信号的频率。原理是测量两次上升沿或者下降沿的时间,这个时间就是信号的周期,周期的倒数就是频率了。下面是实现的程序:


#include <stc12c5608ad.h>// 调用头文件,可以上官方下载STC12C5608AD下载头文件

unsigned char counter=0;
unsigned char out_data[2]={0x00};

void UART_Init()
{
    TMOD=0x22;
    TH1=0xF3;
    TL1=0xF3;         //设置波特率为2400    
    TH0=0XEC;         //12M下的值
    TL0=0XEC;
    SCON=0X50;
    TR1=1; 
    TR0=1; 
}
void CAP_Init()
{
    CMOD = 0X04;   // ECF = 1;开PCA中断标志
    CCAPM1 = 0X11; // CAPN0 = 1; 下降沿捕获。ECCF0 = 1; 开捕获中断。
    CL = 0;
    CH = 0; // PCA计数器清零
    CCAP1L = 0;
    CCAP1H = 0; // 捕获寄存器清零
    EPCA_LVD = 1; // 开PCA中断
    CR = 1;
}

void send232byte(unsigned char bytebuf)
{
    TI=0;
     SBUF=bytebuf;
    while(!TI);           
}
void delay()
{
    unsigned int x;

    for(x=0;x<65535;x++);    

}
void PCAIRQ(void) interrupt 6
{      
 if(CCF1==1)  // 如果是PCA捕获产生的中断
 {
        CF=0;
        CCF1=0;                
        out_data[0]=CCAP1L;
        out_data[1]=CCAP1H;
        CH=0;
        CL=0;     
 }        
}

void main(void)
{    
    unsigned int tmp;
    unsigned long dat;

    UART_Init();
    CAP_Init();
    EA = 1;

    while(1)            // 死循环
    {
        tmp=out_data[1]<<8;
    tmp+=out_data[0];
        dat=50000/tmp;   //计算频率值
        send232byte(dat>>8);
      send232byte(dat);
        delay();
    }
}
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表