找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3003|回复: 3
收起左侧

STC15F2K60S2做数字频率计,单片机的定时器和外部中断不会用

[复制链接]
ID:341404 发表于 2018-5-30 15:11 | 显示全部楼层 |阅读模式
用STC15F2K60S2做一款数字频率计,频率0-20MHZ,电路已经设计完了,单片机的定时器和外部中断不会用,求大神给个实例程序或者加QQ1240073943分享下经验,谢谢。
回复

使用道具 举报

ID:345953 发表于 2018-6-13 14:52 | 显示全部楼层
谢谢,谢谢
回复

使用道具 举报

ID:100247 发表于 2020-5-11 22:18 | 显示全部楼层
你好!STC官网有详细的例程可以下载,参考。另外STC单片机烧写软件中有各个功能的标准源码和各个寄存器设置值,很有用的!
回复

使用道具 举报

ID:419968 发表于 2020-5-12 00:26 | 显示全部楼层
unsigned int  cnt =  0,Meter_cnt=0,Meter_f =0;

   

void EXT0_INIT()
{
INT0 = 1;                    //外部诊断允许
    IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
    EX0 = 1;                    //使能INT0中断
    EA = 1;
}

//中断服务程序
void exint0() interrupt 0       //INT0中断入口
{
    cnt++;
}

void Timer0Init(void)                //10毫秒@12.000MHz
{
          AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                  //设置定时器为模式16位自动重装载
        TL0 = 0xF0;                //设置定时初值
        TH0 = 0xD8;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        ET0 = 1;                //使能定时器0中断
        TR0 = 1;                //定时器0开始计时
}

void tm0_isr() interrupt 1 //定时器 10ms 溢出中断
{
static char t=0;
  t++;cnt++;
if(t==200)   //每2秒读取外部中断的次数
{
    Meter_cnt = cnt;
   cnt = 0;
   Meter_f = Meter_cnt/2; //计算1秒的次数,就是频率
}
}
main()
{
EXT0_INIT();
Timer0Init();
while(1);
}

大概思路就是读取单位时间内外部中断的个数,在求出频率
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表