1计算机中的电子钟、电子日历2UcharsecondUcharminiteUcharhourUchardayUcharmonthUintyear由这些变量如何实现时钟?3实现时钟及日历的思路秒分钟小时年……4构造时钟C程序Ucharsecond,minite,hour;Voidtime(){second++;If(second==60){second=0;minite++;If(minite==60){minite=0;hour++;If(hour==24)hour=0;}}5时间单位的重要性时钟日历时序逻辑:抢答器、表决器、电梯…操作系统中的任务分配测距:地月距离…生化过程:酿酒…时间、温度、长度、流量、压力等主要参数在实际生活中,时间参数使用的比例超过50%。时钟“滴答”一下成功就会浸润我们的生命6第7章定时器/计数器“滴答”之间的艺术7本章内容7.1定时器/计数器的工作原理7.2定时器/计数器的工作方式7.3定时器/计数器的初始化7.4定时器/计数器的应用总结作业8本章重点掌握定时/计数器的原理及其控制使用定时器定制时间信号使用计数器对事件进行统计97.1定时器/计数器的工作原理定时由一个N位计数器对机器周期脉冲进行加1累计,计数则由计数器对外部脉冲进行加1累计。7.1.1定时器/计数器的组成7.1.2定时器/计数器的控制T0定时方式计数方式(即产生一个”滴答“)(即产生一个”滴答“)N位加1计数器TR0C/T1/12fOSC外部脉冲TF100110定时器模式7.1.1定时器/计数器的组成定时器控制11GATEC/TM1M0GATEC/TM1M0定时器1定时器07.1.2定时器/计数器的控制定时器/计数器工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式。1.工作方式寄存器TMOD(89H)(1).M1、M0:工作方式控制位M1M0方式位数00013011161028(自动置初值)113两个8127.1.2定时器/计数器的控制-工作方式寄存器TMOD高电平、必须满足、,不受门控、,门控位最高频率时钟的数,引脚输入的脉冲进行计或对定时方式方式选择INT1INT0T1T01GATET1T00GATEGATE(3)1/24T1T01TC/0TC/(2)13TCON的高4位:定时器的运行控制位和溢出标志位。TR0、TR1:定时器T0或T1启动位TF0、TF1:定时器T0或T1溢出标志位当T0被启动后,T0从初值开始加1计数,当T0溢出时,TF0被置1。进入T0中断服务程序后,TF0被硬件自动清0。TF0在非中断方式可作为查询位。7.1.2定时器/计数器的控制2.控制寄存器TCON148051有四种方式方式0:13位,THi+TLi(低5位)方式1:16位,THi+TLi方式2:8位,TLi,THi(自动装入值)方式3(只有T0):双8位,TH0、TL0TL0使用TF0、TH0使用TF1方式1常用于定时,T1方式2常用于串行波特率发生,方式0、方式3很少使用。7.2定时器/计数器的工作方式157.2.1工作方式1方式1为16位的定时器/计数器定时范围:t=(65536-X)×(12/fosc)(X称为初值,fosc称为振荡频率)X=65536-t×fosc/12或X=-t×fosc/12167.2.1工作方式1-T0方式1最大定时时间由t=(65536-X)×(12/fosc)可知当fosc=12MHz时,其机器周期为1us当初值X=0x0000时,最大定时时间为65536us,定时时间约为65.5ms。177.2.1工作方式1-如何定制N毫秒“滴答”?实际应用中,一般通过特定时间t(即“滴答”间隔)计算初值X。例如:fosc=12MHz时,要产生50ms(“滴答”)定时信号,计算T0在方式1下的初值。解:X=65536-fosc×t/12=65536-50000=15536或者X=-50000why?187.2.1工作方式1-赋初值指令将X高位赋给TH0、低位赋给TL0TH0=X/256;TL0=X%256;注意:要让T0连续等间隔定时,每溢出一次要重新赋初值!197.2.2工作方式2方式2为自动重装载初值的8位定时器/计数器,TL0用作8位计数器,TH0用作初值寄存器。X=-t×fosc/12(X-为初值)注意:方式2一般用作串行通信的波特率发生器。207.3定时器/计数器初始化7.3.1定时器/计数器初始化初始化的步骤(1)确定工作方式,即初始化方式控制字TMOD;(2)计算计数初值/定时初值,并写入TH0、TL0或TH1、TL1中;(3)根据需要初始化中断。(4)使用TR0、TR1位(在TCON中)启动定时器。217.3.2定时器/计数器中断方式程序结构主程序负责初始化T0(包括T0初值)开总中断、T0中断键盘、显示等任务中断服务程序负责重写T0初值其它任务初始化主程序T0中断程序TF0=1(即出现1次“滴答”)RETITF0=022定时器T0在fosc=6MHz时,X为-50000(即65536-50000=15536)时,产生了一个100ms(“滴答”)定时信号。(P141,例6-6)由多少个100ms“滴答”产生“秒”信号?由“秒”进一步产生“分、时”等信号。7.4定时器/计数器的应用237.4定时器/计数器的应用-时钟及日历的软件设计步骤“滴答”分钟小时年…秒实现时钟需要几个变量?247.4定时器/计数器的应用-时钟主程序和中断程序流程图T1中断程序开始Cnt_hund_ms+1到10?返回Cnt-hund_ms=0Second++到60?Second=0minte+1,到60?Minite=0hour+1,到24?Hour=0NNNNYYYY初始化T1并启动调显示函数调键盘函数开T1中断主程序开总中断TF1=0TF1=1257.4定时器/计数器的应用-T0中断汇编语言指令#includereg51.hconstlongX=-100000/2;unsignedcharcnt_hund_ms,second,minute,hour;t1interrupt()interrupt3{TL1=X%256;//T1初值TH1=X/256;if(cnt_hund_ms++=10){cnt_hund_ms=0;if(second++==60){second=0;if(minute++==60){minute=0;if(hour++==24)hour=0;}}}}main(){TMOD=0x10;TL1=X%256;//T1初值TH1=X/256;EA=1;ET1=1;TR1=1;while(1);}T1中断程序开始Cnt_hund_ms+1到10?返回Cnt-hund_ms=0Second+1,到60?Second=0minte+1,到60?Minite=0hour+1,到24?Hour=0NNNNYYYY初始化T1并启动调显示函数调键盘函数开T1中断主程序开总中断TF1=0TF1=126本章总结T0、T1的16位计数器常用于定时器/计数,T1的自动装初值8位定时器常用于波特率发生器。计时是对fOSC/12信号计数,计数是对外部脉冲进行计数,利用溢出标志TF0、TF1可查询或中断执行相应任务。271.设fosc=12MHz,编写程序,利用T0及其中断从P1.4输出500Hz方波。2.在第一题基础上,编程还利用T0在P1.5输出1Hz方波。作业28END