T0工作在计数方式计算外部脉冲数
各位,下午好。我现在想应用T0来计算从T0脚进来的脉冲数,是用PROTUES来仿真光电编码器输进单片机的脉冲,从而
计算出电机转速的(光电编码器测速度)
思路是: 时钟由T0 引脚输入,下降沿触发;设定1秒钟,读取脉冲数,根据在这1秒钟内数到的脉冲数确定转速
问题是:1、我现在是可以起动T0计数器,但是怎样设定那1秒钟呢?要用内部定时吗?
2、T0是不断地从0到255,中断一次,再循环;而我是要不断的读取每1秒钟的脉冲数,应该怎样读取呢?
我以下的程序,不知可否实现我的功能要求呢?
那1秒钟只是个假设,我最终目的是某一段固定的时间内数出不同的脉冲数来
谢谢各位啦
//ICC-AVR application builder : 4/6/2006 11:08:37
// Target : M16
// Crystal: 4.0000Mhz
int Timer_Count = 0;
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x19; //set count是这里设定的吗? 仿真好像不是
//啊,TCNT0是不断从0到255循环啊
// OCR0= 0x3E;//set compare
TCCR0 = 0x06; //start timer
//TCCR0 |= (1<<CS02)|(1<<CS01);
TIMSK|=1<<TOIE0;
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
Timer_Count++;
if (Timer_Count = 5)
{
for(i=0;i<5;i++)
{
PORTA ^= (1<<PA4);
PORTA |= (1<<PA4);
}
}
TCNT0 = 0x19; //reload counter value
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
timer0_init;
MCUCR = 0x00;
GICR= 0x00;
TIMSK|=1<<TOIE0;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1)
{;;}
} T0已用作外部脉冲数计数方式了,就不能再用来定时,定时只能用另外的定时器了 可以考虑用TIME3,个人觉得那个用的少!!
页:
[1]