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

单片机教学 第8章 定时计数器.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 定时/计数器 在计算机控制中可供选择的定时方法 (1)软件定时 执行一个循环程序来实现。 (2)硬件定时 定时全部由硬件电路完成,不占用CPU时间,但需要通过改变电路的元件参数来调节定时时间,在使用控制上不够方便,同时增加了开发成本。 (3)可编程定时器定时 由单片机内部的定时模块单元完成。 8.1 8051单片机的定时/计数器 1、定时/计数器的结构 单片机中的微处理器、寄存器TCON和TMOD与定时/计数器T0、T1之间的关系 2、定时/计数器方式和控制寄存器 3、定时/计数器的工作方式 4、定时/计数器量程的扩展 5、定时/计数器编程举例 【例8-l】 设计利用定时/计数器T0、T1端作为外部中断源输入线进行外部中断源扩充的程序。 解:为了扩充外部中断源,可以利用定时/计数器工作于计数状态时,T0(P3.4)或T1(P3.5)引脚上发生负跳变,计数器增1这一特性,把P3.4、P3.5作为外部中断源请求输入线,使计数器的计数值为-1(即0FFH),则外部T0、T1输入一个脉冲即计数溢出,从而置位相应的中断请求标志,以此来申请中断,则相当于扩充了一根/INT线。 编程时,将T0置为方式2计数,计数初值0FFH,计数输入端T0(P3.4)发生一次负跳变,计数器加1并产生溢出标志向CPU申请中断,中断处理程序使累加器A内容减1,送P1口,然后返回主程序。汇编语言程序清单如下: 【例8-2】 设系统时钟频率为6MHz,利用定时器T0定时,每隔1s将P1.0的状态取反。 汇编语言程序代码如下: ORG 0000H LJMP MAIN ;转主程序 ORG 000BH ;T0中断服务程序入口地址 LJMP T0_ISR ORG 0100H MAIN: MOV SP,#60H ;设置堆栈指针 MOV TMOD,#01H ;T0初始化 MOV TL0,#58H MOV TH0,#9EH MOV A,#20 ;累加器A置20 SETB TR0 ;启动T0计数 SETB ET0 ;允外T0中断 SETB EA ;CPU开中断 SJMP $ ;等待 T0_ISR: MOV TL0,#58H MOV TH0,#9EH DEC A ;累加器A内容减1 JNZ EXIT CPL P1.0 MOV A,#20 ;累加器A重载20 EXIT: RETI END 对应的C语言程序如下: #include “reg51.h” //包含8051单片机的头文件 sbit P10=P1^0; //声明P1.0的位变量 unsigned char i; //声明计数变量。在C语言程序中,不能使用ACC void timer0_ISR (void) interrupt 1 //定时器T0中断函数 { TL0=0x58; //重新装入时间常数 TH0=0x9E; i--; //计数变量减1 if(i==0) { //若减到0,则将P1.0取反 P10 = !P10; i = 20; //重新给计数变量赋值 } } void main (void) { //SP=0x60; //使用C语言设计程序时,可以不设置堆栈指针 TMOD=0x01; TL0=0x58; TH0=0x9E; i=20; //计数变量赋初值 TR0=1; //启动T

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档