1 / 29

定时器 (Timer) / 计数器 (Counter)

定时器 (Timer) / 计数器 (Counter). 定时器 / 计数器模块是大部分单片机都内置的一项重要功能模块,定时器 / 计数器一般表现为对数字脉冲信号的累计功能。. 为什么叫 “ 定时器 / 记数器 ”. 当此信号发生 频率固定 时,记数器就成了定时器。. 本质是记录数字 脉冲 信号的发生次数. PIC16F877 定时器模块简介. TMR. Flag 位. TMR. MAX VALUE. 0. 三者的共同点:.

everly
Download Presentation

定时器 (Timer) / 计数器 (Counter)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 定时器(Timer)/计数器(Counter) 定时器/计数器模块是大部分单片机都内置的一项重要功能模块,定时器/计数器一般表现为对数字脉冲信号的累计功能。

  2. 为什么叫“定时器/记数器” • 当此信号发生频率固定时,记数器就成了定时器。 • 本质是记录数字脉冲信号的发生次数

  3. PIC16F877定时器模块简介

  4. TMR Flag位 TMR MAX VALUE 0 三者的共同点: 它们的核心部分都是由脉冲信号触发的循环加计数器;从预先设定的某初始值开始累加,在累加发生上溢时,计数器清零,并且同时会对一个标志位(TXIF)置位。 1 0 ╋ ╋

  5. TMRO的特点 • 在RAM中地址是H’01’,8位,TMR0; • 此寄存器用户可用软件读写; • 具有一个8位分频器寄存器OPTION_REG; • 与WDT(WatchDog Timer)共用 一个硬件模块。 • 可内部计数,也可外部触发。

  6. TMR0的用途 TMR0的用法有两种: 1、由外部的RA4引脚输入做记数信号,此时做记数用。 2、由内部晶振提供记数信号,此时做定时器用。

  7. TMR0模块的电路结构和工作原理(126页) PSA PS2 PS1 PS0 TOCS

  8. TMR0模块相关的寄存器 • 选项寄存器 OPTION_REG • 端口RA方向控制寄存器TRISA • 定时器/计数器 TMR0 • 中断控制寄存器INTCON

  9. TRISA相关位介绍 • RA4引脚置为输入状态,TMR0才能可能记录MCU外部的数字信号变化次数。 • 如何把RA4引脚置为输入状态? • TRISA=0b00010000;

  10. 中断控制寄存器INTCON相关位介绍 如何设置系统中只响应TMR0中断? INTCON =0b10100000;

  11. 用法一:作为内部定时器 • 初始化步骤:RA4置为输入OPTION赋初值,T0CS=0TMR0赋初值INTCON赋初值 • 使用方法:1)、查询T0IF位;2)、中断中判断T0IF位;

  12. 用法二 作为外部计数器 • OPTION赋初值,T0CS=1 • 其他同上

  13. +5V 使用举例1 • 啤酒自动生产线的装箱部分模拟:RA4输入24个脉冲后,PORTD的值加一并输出。 RA4 RD0 …… 16F877 RD7 电源电路 . . . 复位电路 晶振电路 GND

  14. 程序分析: • RA4输入24个外部脉冲后触发加一事件,所以可以让TMR0每隔24个外部脉冲后溢出一次,产生中断,在中断中把PORTD口值加一输出。

  15. 初始化代码 • OPTION=0b00101000 ; • TMR0=0-24; • TRISA=0b00010000 ; • INTCON =0b10100000 ; • TRISD=0; //外部,1:1 // 24个脉冲溢出 //RA4输入 //T0IE=1,使能TMR0中断 //D口全为输出方式

  16. 中断处理代码 void interrupt ISR(void) { if((INTCON&0b00000100)!=0){ INTCON=INTCON&0b11111011; TMR0=0-24; PORTD++; } } //判断T0IF是否为1 // T0IF是1,则清空此标志位 // TMR0初值仍为(0-24) // D口值加一

  17. 代码分析 • 通过例程理解OPTION寄存器各个位的作用: • T0CS,T0SE • PSA,PS2,PS1,PS0

  18. 使用举例2 • 电路图如图所示,采用TMR0的中断方式实现每隔1秒钟LED小灯显示的值加一 RD0 …… 16F877 RD7 电源电路 . . . 复位电路 4MHz晶振 GND

  19. 程序分析: • TMR0的最大溢出间隔是 个脉冲? • 如何能记录1秒钟的时间间隔呢? • 再人为加入一个计数器,TMRCNT; • 让TMR0的溢出时间间隔是50000个脉冲 • 当TMRCNT记录20次后执行PORTD口加一 65536

  20. 初始化代码 • OPTION=0b00000111 ; • TMR0=0; • INTCON =0b10100000 ; • TRISD=0; //1:256 // 256次后溢出 //T0IE=1,使能TMR0中断 //D口全为输出方式

  21. 中断处理代码 void interrupt ISR(void) { if((INTCON&0b00000100)!=0){ INTCON=INTCON&0b11111011; TMR0=0; PORTD++; } } //判断T0IF是否为1 // T0IF是1,则清空此标志位 // TMR0初值仍为0 // D口值加一

  22. 代码分析 • 通过例程理解内部触发的概念

  23. 作业 • 采用TMR0内部触发中断实现数码管每隔一秒加一效果

  24. 提问时间

  25. OPTION_REG相关位介绍地址:(81H),第124页 T0CS TOSE PSA PS0~PS2:分频倍数选择位 PSA:分频选择位(1:WDT,0:TMR0) T0SE:触发沿选择位(Source Edge) T0CS:(Clock Source) 0 :内部晶振输出(Clock OUT) Fosc/4 1 :外部输入(Input)

  26. PS2 PS1 PS0 PSA=0,TMR0 PSA=1,WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 PSA,PS2,PS1,PS0的功能

  27. 计算题 • 主频4MHz,TMR0初值是6,OPTION=0b00000111; 请问TMR0 • 寄存器多长时间溢出一次?

  28. OPTION设置举例1 • 主频为4MHz,使TMR0为内部时钟触发,设TMR0的初值为0,约每隔0.065535秒溢出一次; • OPTION =0b10000111; 4/4MHz=106个脉冲/s 0.065535秒=65535个脉冲

  29. OPTION_REG设置举例2 • 使TMR0为外部脉冲触发,每一个脉冲上升沿TMR0值加一: • OPTION=0B00101000;

More Related