网站大量收购独家精品文档,联系QQ:2885784924

7 第 七章 准时计数器.doc

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

8x51的定时器/计数器 定时器/计数器(timer/counter)是一种计数器建 若计数内部的时钟脉冲,可视为定时器; 若计数外部的脉冲,可视为计数器 定时器/计数器的应用可以用中断的方式进行。 MCS-51的定时器/计数器 8051提供两个16位的定时器/计数器,分别是Timer0及Timer1(简称T0及T1), 若当成内部计数器时,则是计数内部的脉冲,以12M为例,定时器所计数的脉冲周期为1us. 若当成外部计数器,则是计数由T0或T1引脚送入的脉冲。 MCS-51的定时器/计数器 可设置4种工作方式, 定时器/计数器方式寄存器TMOD 功能是设置定时器/计数器的工作方式,计数信号源及启动定时器/计数器方式。 TMOD方式寄存器的高4位,(TMOD.7~TMOD4)设置timer1的工作方式,而第四位(TMOD.3~TMOD.0)用以设置timer0的工作方式。 以第四位为例,GATE位为定时器的门控开关,用以决定其启动方式,若GATE=0,则只要TR0位=1;即可启动timer0,称为内部启动或软件启动。 若 GATE=1,则必须先将TR0位为1,再等待INT0引脚为高电平,方可启动timer0.称为外部启动或硬件启动。 C/T位为定时器/计数器切换开关,若C/T位=0,则timer0为内部定时器,用以计数fosc/12产生的脉冲,若C/T位为外部计数器,用以计数由T0引脚输入的脉冲。 M1及M0这两位可设置工作方式 Mode 1 Mode1提供两个16位的定时器/计数器(timer0及timer1) 其数值分别放在THx与TLx 两个8位的计数寄存器里。其中THx 放置8位,其中TLx 放置8位 , 定时器/计数器控制寄存器 TCON 定时器/计数器控制寄存器 TCON的高四位提供定时器/计数器的启动开关以及中断时的标志。 TCON.0-TCON.3 :外部中断功能 TCON.4: ( TR0 ) timer0启动的开关 TR0=1;启动timer0 TR0=0;关闭timer0 TCON.5 ( TF0 ): timer0的中断标志位 Timer0中断时,CPU设置TF0=1; Timer0中断结束时,CPU设置TF0=0; TCON.6: ( TR1 ) timer1启动的开关 TR1=1;启动timer1 TR1=0;关闭timer1 TCON.7: ( TF0 ): timer1的中断标志位 Timer1中断时,CPU设置TF1=1; Timer1中断结束时,CPU设置TF1=0; Mode 1 在mode1的工作方式下,THx与TLx 计数寄存器各使用8位,共256即是2的8次方。因此要把计数起点的值除以256,其余数放入THx计数器,其商放入TLx计数寄存器,例如要使用timer0计数50000 则填入计数寄存器的指令如下 TL0=(65536-50000)%256; //取8位的余数 TH0=(65536-50000)/256; //取8位的商数 定时器/计数器的应用 第一种:中断应用 第二种:查询方式 中断应用: 1:定时器/计数器中断的设置, 包括开启中断开关(即IE寄存器的设置),中断优先级的设置(IP的设置),中断信号的设置(TCON的设置), IE=0x82; //开启中断总开关及T0开关 同理对于IP寄存器、TMOD寄存器的设置,也可以使用类似的指令 例如要把T1的中断优先级提高,并设置为内部定时器,软件启动方式及mode1 则指令如下 IP=0x02; //提升T0中断的优先等级 TMOD=0x01; //设置内部定时器,软件启动,mode1; 2:计数值得设置 TL0=(65536-50000)%256; //取8位的余数 TH0=(65536-50000)/256; //取8位的商数 3:启动定时器/计数器 若是采用软件启动,则只要在程序中出现如下指令即可: TRx=1; //启动timer x 4;中断子程序的编写 Void 中断子程序名称(void) interrupt 中断编号 using 寄存器组 如 Void my-IT (void) interrupt 3 { } 查询方式,请参考代码 所谓的查询方式:就是主程序什么也不做,只是不断的查询定时器是否中断了,而不需要准备中断子程序。 中断方式,则是主程序专注于其他事情,待定时器时才执行中断子程序,再此以查询方式进行闪烁灯的控制 #include reg51.h //定义8Xj51寄存器的头文件 #define LED P1 //定义LED 接置 P1 #de

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档