ATmega8 单片机怎么测频率?
来源:百度知道 编辑:UC知道 时间:2024/09/22 18:15:10
有一个正弦波输入ATmega8的单片机内
我知道用ICP1来输入,然后来一个输入捕捉,用TCNT1来记录,可是我不知道怎么来中断
最好有一些类似的代码,这是不是一个复杂的
还有,我已经用了TCCR1来创造输出PWM的波了,那么怎么样再设置这个呢?
我找了好多网站,他们都是很复杂的那种.
请大家能告诉主要思路怎么样的吗?谢谢,我已经纠结这个问题两天了,谢谢高手们了,答案录用的话,再追加100分,谢谢!
我是用C来编的....
万分感谢
我知道用ICP1来输入,然后来一个输入捕捉,用TCNT1来记录,可是我不知道怎么来中断
最好有一些类似的代码,这是不是一个复杂的
还有,我已经用了TCCR1来创造输出PWM的波了,那么怎么样再设置这个呢?
我找了好多网站,他们都是很复杂的那种.
请大家能告诉主要思路怎么样的吗?谢谢,我已经纠结这个问题两天了,谢谢高手们了,答案录用的话,再追加100分,谢谢!
我是用C来编的....
万分感谢
正弦波先要整形成方波再送入M8进行中断,不然容易出错
例子;给你参考一下吧 外部中断来了 你就在外部中断函数里面写你中断以后你要执行的程序就可以了,就这么简单 PWM占空比,周期 都可以通过定时器寄存器初值来设定
//ICC-AVR application builder : 2009-09-11 19:02:05
// Target : M8
// Crystal: 8.0000Mhz
#include <iom8v.h>
#include <macros.h>
void port_init(void)
{
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1mSec
// actual value: 1.000mSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00;