新聞中心

ATMEGA8計數(shù)器

作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
//可測1MHZ的頻率

#include
#include
#define uchar unsigned char
#define uint unsigned int
/***********對應(yīng)的幾個數(shù)碼管顯示*****************/
const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned long load=0;
uchar data[4]={0,0,0,0};//
uint cnt=0;//定時中的中斷次數(shù)
uchar temp=0;//超過65536時這個數(shù)需要
//
void display(uchar *p)
{
uchar i,j,sel=0x01;
for(j=0;j<2;j++)
for(i=0;i<4;i++)
{PORTB=~table[p[i]];
PORTC=sel;
Delay_us(2000);
sel=sel<<1;
}
}
void process(unsigned long t,uchar *p)//數(shù)據(jù)處理
{unsigned long i=t;
if(i<=9999)
PORTD=PORTD|0X03;
else if((i<=99999)&&(i>9999))
{
i=i/100;
PORTD=PORTD&0XFE;
PORTD=PORTD|0X02;
}
else if(i>99999)
{
PORTD=PORTD|0X01;
PORTD=PORTD&0XFD;
i=i/1000;
}
p[3]=i/1000;
i=i%1000;
p[2]=i/100;
i=i%100;
p[1]=i/10;
i=i%10;
p[0]=i;
}
void int_io(void)
{DDRB=DDRC=0XFF;
DDRD=0XDF;
PORTC=PORTB=0XFF;
PORTD=0XFF;
SREG=0X80;//全局使能
TCCR1B=0X06;//計數(shù)方式:T1下降沿
TCNT1H=0X00;//計數(shù)器賦初值
TCNT1L=0X00;
}
void main(void )
{
int_io();
PORTB=0X00;
PORTC=0XFF;
Delay_ms(500);
PORTB=0XFF;
/****************************/
TCNT0=0X06;//定時計數(shù)初使值為6
TCCR0=0X04;//T/C0工作在定時方式,系統(tǒng)時鐘256分頻
TIMSK=0X01;//定時局部使能T/C0
while(1)
{
process(load,data);
display(data);
if(TIFR&0X04)//用標(biāo)志位來進(jìn)行 >65536時的事件
{ // if(TIFR&0X20)
temp++;
TIFR=TIFR&0X04;
}
}
}
/************************/
///////////////以下是T0的定時中斷
#pragma interrupt_handler time0:10
void time0(void)
{
uint tep=0;//讀取高字TCNT1L的值
cnt++;
if(125==cnt)//125*256us,且此處用于調(diào)節(jié)精度;
{
cnt=0;//
/********以下為讀取計數(shù)器的值***********/
load=0;
load=TCNT1L;//讀取計數(shù)器低位的值
tep=TCNT1H*256;//讀取計數(shù)器高位的值并處理
load=tep+load;//高位加低位
load=load+65536*temp;//處理完的數(shù)
/***********************/
TCNT1H=0X00;//重新賦初值
TCNT1L=0X00;
temp=0;
}
}
//TO用于定時,

本文引用地址:http://butianyuan.cn/article/201611/315786.htm


關(guān)鍵詞: ATMEGA8計數(shù)

評論


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

關(guān)閉