单片机第六章定时器计数器资料.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机第六章定时器计数器资料.ppt

12分频后的内部脉冲信号计数。由于时钟频率是定值,所以可根据计数值可计算出定时时间。 计数器的起始计数都是从计数器初值开始的。单片机复位时计数器的初值为0,也可用指令给计数器装入一个新的初值。AT89C51的定时器/计数器属于增1计数器。 6.3 对外部输入的计数信号的要求 当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。 当输入信号产生负跳变时,计数器的值增1。 每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1 期间,计数器加1。由于确认一次负跳变要花2个机器周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。 例如,选用6MHz频率的晶体,允许输入的脉冲频率最高为250kHz。如果选用12MHz频率的晶体,则可输入最高频率为500kHz的外部脉冲。 对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。 【例6-2】系统时钟为6MHz,编写定时器T0产生1s定时的程序。 基本思想:采用定时器模式。因定时时间较长,首先确定采用哪一种工作方式。时钟为6MHz的条件下,定时器各种工作方式最长可定时时间: 方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512?s。 由上可见,可选方式1,每隔100ms中断一次,中断10次为1s。 * (1)计算计数初值X 因为 216???X ???2???10?6? ?10?1,所以X? ?15536? ?3CB0H。因此TH0? ?3CH,TL0? ?B0H。 (2)10次计数的实现 对于中断10次的计数,采用B寄存器作为中断次数计数器。 (3)程序设计 参考程序如下: ORG 0000H ;程序运行入口 RESET:LJMP MAIN ;跳向主程序入口MAIN ORG 000BH ;T0的中断入口 LJMP IT0P ;转T0中断处理子程序IT0P ORG 1000H ;主程序入口 * MAIN: MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设置T0工作在方式1定时 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB ET0 ;允许T0中断 SETB EA ;总中断允许 SETB TR0 ;启动T0 HERE: SJMP HERE ;原地循环,等待中断 * IT0P: MOV TL0,#0B0H ;T0中断子程序,T0重装初值 MOV TH0,#3CH DJNZ B,RTURN ;B中断次数计数,减1非0则 ;中断返回 CLR TR0 ;1s定时时间到,停止T0工作 SETB F0 ;1s定时时间到标志F0置1 RTURN:RETI 程序说明:不论1s定时时间是否已到,都返回到“SJMP HERE”指令处。“SJMP HERE”指令实际是一段主程序。在这段主程序中再通过对F0标志的判定,可知1s定时是否到,再进行具体处理。 * 例 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 解:1、计算计数初值X: 由于晶振为12 MHz,所以机器周期Tcy为1 ?s。 所以: N=t/ Tcy =10×10-3/1×10-6=10000 X=65536-10000=55536=D8F0H 即应将D8H送入TH0中,F0H送入TL0中 2、求T0的方式控制字TMOD: M1M0 01,GATE 0,C/T 0,可取方式控制字为01H; 采用查询方式 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0100H MAIN:MOV TMOD,#01H ;置T0工作于方式1 LOOP:MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H SETB TR0 ;启动T0 JNB TF0, $ ; 查询TF0 0,等待;T0在工作,未计满 CLR TF0 ;清TF0; 此时,TF0 1,10ms定时到 CPL P1.0 ; P1.0取反,产生方波的半个周期 SJMP LOOP ;循环产生方波 END ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN:

文档评论(0)

love + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档