单片机交流
直播中

刘艳

8年用户 2502经验值
私信 关注
[问答]

如何实现基于7.3728M晶振作AVR定时器的时钟源进行1S定时的设计呢

如何实现基于7.3728M晶振作AVR定时器的时钟源进行1S定时的设计呢?其实验代码是怎样的?

回帖(1)

邹昀

2021-11-2 10:28:25
  基于7.3728M晶振作AVR定时器的时钟源进行1S定时!
  实验内容:
  使用AVR的定时器T1做1S定时,并使用PD口的LED指示灯做简单指示。
  #include 《iom16v.h》
  #include 《macros.h》
  #define DISP_DDR DDRD
  #define DISP_PORT PORTD
  /*--------------------------------------------------------
  程序名称:定时器1初始化程序
  --------------------------------------------------------*/
  void timer1_init(void)
  {
  TCCR1B = 0x00; //stop timer
  TCNT1H = 0xE3; //设置 TC1 的 计数寄存器 高8位值,基于7.3728M晶振
  TCNT1L = 0xDF; //设置 TC1 的 计数寄存器 低8位值,基于7.3728M晶振
  //OCR1AH = 0x1C; //设置 TC1 的 输出比较寄存器A 高8位值
  //OCR1AL = 0x20; //设置 TC1 的 输出比较寄存器A 低8位值
  //OCR1BH = 0x1C; //设置 TC1 的 输出比较寄存器B 高8位值
  //OCR1BL = 0x20; //设置 TC1 的 输出比较寄存器B 低8位值
  //ICR1H = 0x1C; //设置 TC1 的 输入捕获寄存器 高8位值
  //ICR1L = 0x20; //设置 TC1 的 输入捕获寄存器 低8位值
  TCCR1A = 0x00;
  TCCR1B = 0x05; //设置TC1 为 CLK/1024分频,启动TC1
  //选择时钟为晶振1024分频即7372800/1024=7200HZ
  //定时1s (65535-初值)/(定时器时钟7200)=1s
  //得初值换算十六进制给TCNT1H TCNT1L
  MCUCR = 0x00; //设置 MCU 的 控制寄存器
  GICR = 0x00; //设置 中断控制寄存器
  TIMSK = 0x04; //设置 定时计数器 的 屏蔽寄存器(TIMSK = BIT(2);)溢出中断使能
  //SEI(); //enable interrupts
  }
  /*--------------------------------------------------------
  程序名称:定时器1中断服务程序
  --------------------------------------------------------*/
  #pragma interrupt_handler timer1_ovf_isr:9
  void timer1_ovf_isr(void)
  {
  TCNT1H = 0xE3; //reload counter high value
  TCNT1L = 0xE1; //reload counter low value
  DISP_PORT++; //每加1S,显示加1
  }
  void main(void)
  {
  DISP_DDR = 0XFF; //设置显示口为输出
  timer1_init();
  SEI();
  while(1);
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分