请问atmega16如何用定时器1产生周期1s的定时
答案:2 悬赏:10 手机版
解决时间 2021-04-06 06:23
- 提问者网友:箛茗
- 2021-04-05 12:04
请问atmega16如何用定时器1产生周期1s的定时
最佳答案
- 五星知识达人网友:封刀令
- 2021-04-05 13:33
配置几个寄存器就可以,TCCR1A用来产生PWM,TCCR1B用来定时。所以此时只需用TCCR1B。
写一个中断服务函数。再配置一下定时器所需要的寄存器。(需要用到TCCR1B 、TCNT1H、TCNT1L、TIMSK、SREG五个寄存器,这几个寄存器功能可以看芯片手册)
中断服务程序,开发环境用WINAVR +STUDIO
ISR (TIME1_OVE vect)
{
TCNT1H=0x85;
TCNT1L=0xED;//(65535-CPU频率/分频系数)为1S一次中断。
}
int main()
{
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。
}追问那用哪种模式比较精确,如果修正,用什么方法比较好,
ps:只能用t1吗,t0和t2能不能实现1s定时(我指的是只有定时,没有循环)追答都可以。一样的。要说精度高的话,当然是T0,因为TO是16位的。以下几个配置就可以得出1秒定时。
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。追问恩??t1才是16位的吧?
ps:貌似8位的好像不能记到1s吧,我算了半天,不靠循环达不到啊追答打错了,是T1。
TCNT1H=0x85;
TCNT1L=0xED;//初值
8位不用循环计数,是达不到.
写一个中断服务函数。再配置一下定时器所需要的寄存器。(需要用到TCCR1B 、TCNT1H、TCNT1L、TIMSK、SREG五个寄存器,这几个寄存器功能可以看芯片手册)
中断服务程序,开发环境用WINAVR +STUDIO
ISR (TIME1_OVE vect)
{
TCNT1H=0x85;
TCNT1L=0xED;//(65535-CPU频率/分频系数)为1S一次中断。
}
int main()
{
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。
}追问那用哪种模式比较精确,如果修正,用什么方法比较好,
ps:只能用t1吗,t0和t2能不能实现1s定时(我指的是只有定时,没有循环)追答都可以。一样的。要说精度高的话,当然是T0,因为TO是16位的。以下几个配置就可以得出1秒定时。
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。追问恩??t1才是16位的吧?
ps:貌似8位的好像不能记到1s吧,我算了半天,不靠循环达不到啊追答打错了,是T1。
TCNT1H=0x85;
TCNT1L=0xED;//初值
8位不用循环计数,是达不到.
全部回答
- 1楼网友:忘川信使
- 2021-04-05 15:11
配置几个寄存器就可以,TCCR1A用来产生PWM,TCCR1B用来定时。所以此时只需用TCCR1B。
写一个中断服务函数。再配置一下定时器所需要的寄存器。(需要用到TCCR1B 、TCNT1H、TCNT1L、TIMSK、SREG五个寄存器,这几个寄存器功能可以看芯片手册)
中断服务程序,开发环境用WINAVR +STUDIO
ISR (TIME1_OVE vect)
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。
写一个中断服务函数。再配置一下定时器所需要的寄存器。(需要用到TCCR1B 、TCNT1H、TCNT1L、TIMSK、SREG五个寄存器,这几个寄存器功能可以看芯片手册)
中断服务程序,开发环境用WINAVR +STUDIO
ISR (TIME1_OVE vect)
TCCR1B=0x04;//256分频。
TCNT1H=0x85;
TCNT1L=0xED;//初值
TIMSK|=0x01;//分启溢出中断
SREG|=0x80;//开总中断。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯