在AVR单片机里timer1的例子
想找一个在AVR里timer1的例子简单就好。溢出中断什么的都好,简单的就行!在这里谢谢了!...
想找一个 在AVR里timer1的例子 简单就好。 溢出中断 什么的都好, 简单的就行! 在这里谢谢了!
展开
提示该问答中所提及的号码未经验证,请注意甄别。
1个回答
展开全部
你也不贴明是什么编译器,AVR中的那一款芯片。。 time1我就理解成为T/C1,我用的winavr + avr studio,mega16,外挂8M晶振,实现1秒定时LED闪烁 #include<avr/io.h> #include<avr/interrupt.h> int main(void) { DDRB = 0xff; PORTB = 0xff; TCNT1H = 15535/256; TCNT1L = 15535%256;//计50000次才溢出 TIMSK |= (1 << TOIE1);//使能中断 TCCR1B |= (1 << CS11);//8分频 sei(); while(1) { } } volatile unsigned int i; SIGNAL(SIG_OVERFLOW1) { TCNT1H = 15535/256; TCNT1L = 15535%256; i ++; if(i >= 20)//晶振为8M,8分频,每次溢出为跳50000次,1s/((1/8000000)*50000*8)=20 { //所以循环20次 i = 0; PORTB ^= 0xff; //PB口接led,实现1s翻转。 } } 如果有不明白上述程序或者和你要求的不相符的,欢迎追问 追问: 我用ICCV7。溢出中断和我看过的书有些不一样。我看到的是中断后面写上一个函数和端口号。 然后在这个函数上值行 如:流水灯程序。 上面的代码能修改成IICV7上编译的让我看看吗? 回答: 额,我不会ICC,我想我爱莫能助,因为我想不会有人特意去学习两种编译器的吧。。不过我可以告诉你我上面的要点你试着写一下,这个会了流水灯不成问题。 TCNT1H = 15535/256; TCNT1L = 15535%256;//计50000次才溢出 TIMSK |= (1 << TOIE1);//使能中断 TCCR1B |= (1 << CS11);//8分频 这个四句是关键,前面两句我想你是清楚的, 开定时器中断的时候,只要将TIMSK寄存器的TOIE1和TCCR1B寄存器的CS11这两位置位其他都不要设置按照默认的来就好了 然后再根据ICC的中断方式开个定时器中断就可以看到效果了。 既然书上有的话如果你有学习板子,写一段烧到单片机上看下就好了啊,多练习才能明白书上为什么不一样但是能达到一样的效果 追问: 朋友,能留下个Q吗?我的QQ号码是:422015582 回答: 已经加了 witnessiz 。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询