7 第 七章 定时计数器.doc_第1页
7 第 七章 定时计数器.doc_第2页
7 第 七章 定时计数器.doc_第3页
7 第 七章 定时计数器.doc_第4页
7 第 七章 定时计数器.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8x51的定时器/计数器定时器/计数器(timer/counter)是一种计数器建若计数内部的时钟脉冲,可视为定时器;若计数外部的脉冲,可视为计数器定时器/计数器的应用可以用中断的方式进行。MCS-51的定时器/计数器8051提供两个16位的定时器/计数器,分别是Timer0及Timer1(简称T0及T1), 若当成内部计数器时,则是计数内部的脉冲,以12M为例,定时器所计数的脉冲周期为1us.若当成外部计数器,则是计数由T0或T1引脚送入的脉冲。MCS-51的定时器/计数器 可设置4种工作方式,定时器/计数器方式寄存器TMOD功能是设置定时器/计数器的工作方式,计数信号源及启动定时器/计数器方式。TMOD方式寄存器的高4位,(TMOD.7TMOD4)设置timer1的工作方式,而第四位(TMOD.3TMOD.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;启动timer0TR0=0;关闭timer0TCON.5 ( TF0 ): timer0的中断标志位Timer0中断时,CPU设置TF0=1;Timer0中断结束时,CPU设置TF0=0;TCON.6: ( TR1 ) timer1启动的开关TR1=1;启动timer1TR1=0;关闭timer1TCON.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 x4;中断子程序的编写Void 中断子程序名称(void) interrupt 中断编号 using 寄存器组如 Void my-IT (void) interrupt 3 查询方式,请参考代码所谓的查询方式:就是主程序什么也不做,只是不断的查询定时器是否中断了,而不需要准备中断子程序。中断方式,则是主程序专注于其他事情,待定时器时才执行中断子程序,再此以查询方式进行闪烁灯的控制#include /定义8Xj51寄存器的头文件 #define LED P1 /定义LED 接置 P1 #define count 50000 /T0(Mode1) 的计数值,约0.05s #define TH_M1 (65536-count)/256 /T0(mode1)计数高8位 #define TL_M1 (65536-count)%256 /T0(mode1)计数低8位 int IntCount =0; /声明IntCount变量,计算T0中断次数 main () IE=0x82; /启用T0中断TMOD&=0xf1; TMOD|=0x01; /设置T0为mode1 TMOD&=0xf1;这个执行完后高四位原来是什么还是什么,低四位变成了4h0x. / 再当TMOD|=0x01执行完毕时,高四位还是不会影响到的TH0=TH_M1;TL0=TL_M1; /设置T0计数值高8位,低8位。 TR0=1; /启动T0LED=0xf0; /LED初值计数值1111 0000,右4灯亮while (1) void timer0(void) interrupt 1 /T0中断子程序开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论