1、
* 2007年2月 */
/* 目标MCU:MEGA16 晶振:外部8MHZ */
/*基于LCD的频率计,PC0~PC2对E,RS,RW
PORTA接DATA的8根线
用PB0口产生5000HZ方波,并二的N次分频
给ICP1输入补捕捉,既练习TC中断又有ICP
*****************************************/
#include
#include"lcd.h"
#pragma interrupt_handler Icp_timer1:6
//ICP中断入口地址
#pragma interrupt_handl
2、er Timer0:10
//定时器T0中断入口地址
char string[]="The frequency :";
unsigned int oldcount=0;//捕获时新旧T1值
unsigned int newcount=0;
unsigned char i=0; //用以分频
void Int_to_Char(unsigned int i,char *p) //整数到ASCII
{p[0]=i/1000+48;
p[1]=(i/100)%10+48;
p[2]=(i%100)/10+48;
p[3]=(i%100)%10+48;
}
//MCU初始化
v
3、oid Init_Io()
{DDRB=0xff;
DDRA=0XFF;//液晶输出
DDRD&=~(1<4、0'};
Init_Io();
Init_LCD();
SREG=0x80;
display_string(string);
set_xy(10,1);
display_char('H');
display_char('Z');
Delay_nms(100);
for(;;)
{
if((newcount&0xfff8)!=(oldcount&0xfff8)) //低三位不一样,频率
{ oldcount=newcount; //改变较大,要接受新值
freq=1000000/oldcount; //count每个数代表1us
Int_to_Char(freq,f);
set_xy(4,1);
display_string(f);
Delay_nms(100); //不必太快
}
}
}
//捕捉中断处理程序
void Icp_timer1()
{
newcount=ICR1;
ICR1=0;
TCNT1=0;
TCCR1B=0XC2;//8分频,噪声抑制,使能捕获
}
//方波产生中断程序
void Timer0()
{TCNT0=156;
i++;
PORTB=i;//在PA口产生频率不同的方波,从低位到高位2倍递增,便于试验
}