一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1427|回复: 6
收起左侧

[avr] 求教avr定时器的问题

[复制链接]
发表于 2017-3-2 16:39 | 显示全部楼层 |阅读模式
本帖最后由 benxiong22 于 2017-3-2 16:47 编辑

请问以下定时器代码,为什么就是不响应呢,屏幕无任何显示,是哪里没搞对?  
另外,如果把  TCCR1B |= 0x01; 改成  TCCR1B |= 0x00; ,就会显示“main!”,那么设为0x01的时候飞到哪里去了呢?
void main()
{
  OCR1A = 240;     //约250us
  TIMSK |=(1<<OCIE1A);       //OCIE1A=1;  
  SREG = 0x80;
  TCCR1A = 0x00;
  TCCR1B = 0x08;    //ctc模式
  TCCR1B |= 0x01;    //无分频
while(1)
{
   LCD_write_char(0,0x01);  //清屏
   _delay_us(1);   
   LCD_write_string(0,0,"main!");
   _delay_ms(2000);
};
}

ISR(TIMER1_COMPB_vect)
{
   LCD_write_char(0,0x01);  //清屏
   _delay_us(1);   
   LCD_write_string(0,0,"timer_interruput!");
   _delay_ms(2000);
}

 楼主| 发表于 2017-3-2 17:11 | 显示全部楼层
本帖最后由 benxiong22 于 2017-3-2 17:20 编辑

没有显示是因为不断在自动复位。
但不知道为什么定时器一工作就不断复位。
发表于 2017-3-2 18:25 来自手机 | 显示全部楼层
搞定时器要有示波器,就算没示波器也要有个能测频率的万用表
 楼主| 发表于 2017-3-2 18:54 | 显示全部楼层
问题解决了,OCIE1B写错成OCIE1A了,一个字母写错,够喝一大壶了
发表于 2017-3-2 20:15 | 显示全部楼层
对着数据手册写, 其实还是比较简单的
发表于 2017-3-2 21:46 | 显示全部楼层
AVR的定时器模式太多,以前搞过pwm输出。
每个设置都不能错。看PDF就ok。
发表于 2017-3-4 23:59 | 显示全部楼层
不知道你用的是什么AVR处理器,看样子应该是mega8。那么TCCR1B这个寄存器的后三位主要控制的是分频器,也就是说
  1. TCCR1B |= 0x01
复制代码
意思是说不进行预分频,直接使用时钟频率,计数就非常快。你这时候应该是进了中断服务程序的,但是你的程序写法有点问题,LCD输出时间应该很长,在240us内应该是执行不完的,下一个中断又来了。。。。。。
  1. TCCR1B |= 0x00
复制代码

根据手册,意思是无时钟源,计数器停止。那么时钟中断就不会触发了,也就不会进中断服务程序了。

Image 1.png

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-15 23:31 , Processed in 0.078482 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表