|
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
unsigned int oldval,newval,nowval;
volatile unsigned int i;
static int Send_Byte(char c, FILE *stream); //添加自定义的putchar函数
static FILE mystdout = FDEV_SETUP_STREAM(Send_Byte, NULL,_FDEV_SETUP_WRITE);
void Port_Init(void)
{
PORTA = 0xff;
PORTB = 0xff;
PORTC = 0xff;
PORTD = 0xff;
DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
DDRD |= (1 << PD1);
DDRD &= ~(1 << PD6);
}
void Timer1_Init(void)
{
TCCR1B |= (1 << CS11);
TIMSK |= (1 << TICIE1) | (1 << TOIE1);
}
void Usart_Init(void)
{
UBRRH = 0x00;
UBRRL = 0x33;
UCSRB |= (1 << TXEN);
}
int Send_Byte(char c, FILE *stream)
{
if (c == '\n')
Send_Byte('\r', stream);
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
return 0;
}
int main(void)
{
unsigned int i = 10;
Port_Init();
Timer1_Init();
Usart_Init();
stdout = &mystdout;
sei();
while(1)
{
_delay_ms(50);
// printf("test\n");
}
}
ISR(TIMER1_CAPT_vect)
{
static unsigned int t;
if(t == 0)
{
TCNT1H = 0x00;
TCNT1L = 0x00;
oldval = ICR1;
printf("oldval=%ud\n",oldval);
t = 1;
}
else if( t == 1)
{
newval = ICR1;
nowval = newval - oldval;
printf("newval=%ud\n",newval);
printf("timercnt=%ud",i);
t = 10;
}
}
ISR(TIMER1_OVF_vect)
{
i++;
}
输入的信号是周期500us的方波,高低电平各250us,现在程序打印出来的数据newval和oldval 相减是计算周期的,可是数值感觉不对,不知道为什么? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|