标题: STC15F2K60S2做数字频率计,单片机的定时器和外部中断不会用 [打印本页]

作者: renlei97    时间: 2018-5-30 15:11
标题: STC15F2K60S2做数字频率计,单片机的定时器和外部中断不会用
用STC15F2K60S2做一款数字频率计,频率0-20MHZ,电路已经设计完了,单片机的定时器和外部中断不会用,求大神给个实例程序或者加QQ1240073943分享下经验,谢谢。

作者: 大玉米    时间: 2018-6-13 14:52
谢谢,谢谢
作者: jzzgb    时间: 2020-5-11 22:18
你好!STC官网有详细的例程可以下载,参考。另外STC单片机烧写软件中有各个功能的标准源码和各个寄存器设置值,很有用的!
作者: adject    时间: 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);
}

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1