新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > AVR單片機頻率計設(shè)計 頻率輸入源STM32口

AVR單片機頻率計設(shè)計 頻率輸入源STM32口

作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏

uint i; //定時器1秒到時變量
uint tt; //計數(shù)頻率
uchar start=1; //定時器啟動變量

void port_init()
{
PORTA=0xff;
DDRA=0xff;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;
}

void delay(uint k)
{
while(k--);
}



void time0_init() //定時器0初始化
{
TCCR0=0x00; //關(guān)閉定時器
TIMSK|=0x01; //定時器0溢出中斷
TCNT0=0x83; //定時1ms
SREG=0x80; //關(guān)閉總中斷
}

#pragma vector = 0x24 //定時器0中斷
__interrupt void tim0_ovr()
{
i++;
TCNT0=0x83;
if(i==1000) //1秒時間到
{
i=0;
TCCR1B=0x00; //停止計數(shù)
TCCR0=0x00; //停止定時
tt=TCNT1;//頻率值給變量
TCNT1H=0x00;
TCNT1L=0x00; //計數(shù)清零
TCNT0=0x83; //定時器初值
start=1; //開啟定時器啟動變量
}
}



void time1_init()
{
TCCR1A=0x00;
TCCR1B=0x00; //停止計數(shù)
TCNT1H=0x00;
TCNT1L=0x00;
}

void show(uint dat) //頻率值顯示
{
PORTA=seg[dat/1000];
PORTC=tab[3];
delay(100);
PORTA=seg[dat%1000/100];
PORTC=tab[2];
delay(100);
PORTA=seg[dat%100/10];
PORTC=tab[1];
delay(100);
PORTA=seg[dat%10];
PORTC=tab[0];
delay(100);
}

void main()
{
port_init();
time0_init();
time1_init();
while(1)
{
if(start==1)
{
TCCR0=0x03; //定時器開啟
TCCR1B=0x06; //計數(shù)器開啟
start=0; //保證定時1秒是否開啟變量
}
show(tt);
}
}

//-------------------STM32代碼-------------------------

#include
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

int main()
{
Stm32_Clock_Init(9);
delay_init(72);
led_init();
while(1)
{
LED=1;
delay_ms(2);
LED=0;
delay_ms(2);
}
}

//--------------------------led.c--------------
#include
#include "led.h"

void led_init(void)
{
RCC->APB2ENR|=1<<4; //使能PC時鐘
GPIOC->CRH&=0xffffff0f;
GPIOC->CRH|=0x00000030;
GPIOC->ODR|=1<<9;
}

//----------------------led.h-------------------------
#ifndef led_h
#define led_h
#include "sys.h"

#define LED PCout(9)

void led_init(void);
#endif


上一頁 1 2 下一頁

關(guān)鍵詞: AVR單片機頻率計STM3

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉