[AVR单片机] 新买的avr开发板,定时器不准确

[复制链接]
1334|5
 楼主| 我是祝大叔 发表于 2015-9-16 10:50 | 显示全部楼层 |阅读模式
前不久买的arduino uno r3开发板,我更换了一片atmega328p 单片机,想把它做普通avr开发板用,但我发现程序的定时器不准确,而且时间错得特别多,想请兄弟们帮我分析一下。

  1. /* ************************************************************************ *\
  2.   Author : XiaoLoong
  3.   Date   : 2015/09
  4.   IDE    : Atmel Studio 6.0
  5. Comments: 用ATmega328P写的测试程序。
  6. \* ************************************************************************ */

  7. #define F_CPU  16000000UL  // 16 MHz   
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int

  12. #define LED_BLINK() ( PORTB ^= _BV(PB5) ) //LED闪烁
  13. uchar T0_count=0;                                //用于延时累加计数

  14. int main(void)
  15. {
  16.         DDRB |= _BV(PB5);        // PB5=19引脚为输出
  17.         PORTB |= _BV(PB5);        //输出上拉
  18.        
  19.         cli();                        //关全局中断
  20.         TCCR0A = 0X00;
  21.         TCCR0B = 0X05;        //1024预分频
  22.         TCNT0 = 0X64;        //定时10毫秒 256-16M/1024*0.01=100=0X64
  23.         TIMSK0 =0X01;        //定时器0 溢出中断使能
  24.         sei();                        //开全局中断
  25.         while(1);
  26. }

  27. ISR(TIMER0_OVF_vect)        //定时器0中断服务程序
  28. {       
  29.         TCNT0 = 0X64;               
  30.         if (++T0_count == 100 )        //定时1秒钟
  31.         {
  32.                 T0_count=0;
  33.                 LED_BLINK();               
  34.         }
  35.         else return ;       
  36. }


开发板用的外接16M晶振,我熔丝位配置如下:
E:\11.png
 楼主| 我是祝大叔 发表于 2015-9-16 10:56 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
JY-DX-JY 发表于 2015-9-17 18:22 | 显示全部楼层
你用的晶振是16M吗?
findidiot 发表于 2015-9-18 11:58 | 显示全部楼层
不懂,路过帮顶
jazzyfox 发表于 2015-9-23 17:05 来自手机 | 显示全部楼层
晶振很准,肯定还是硬件或者设置有问题
SD10A 发表于 2015-9-23 19:02 | 显示全部楼层
熔丝位应该没对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

77

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部