预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共90页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6章MCS-51单片机定时器/计数器6.1定时器/计数器的结构及原理6.1.1MCS-51单片机定时器的结构MCS-51主要由如下构成: 三个16位的可编程定时器/计数器:定时器/计数器0、1和2。 每个定时器有两部分构成:THx和TLx 特殊功能寄存器T2MOD和T2CON,主要对T2进行控制。 特殊功能寄存器TMOD和TCON,主要对T0和T1进行控制。引脚P3.5、P3.4、P1.0,输入计数脉冲。 定时器T0、T1和T2是3个中断源,可以向CPU发出中断请求。 定时器/计数器T2增加了两个8位的寄存器: RCAP2H和RCAP2L。 特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。 6.1.2MCS-51单片机定时器的工作原理 6.2定时器/计数器的控制GATE=0,不使用外部门控制计数器 C/T—定时或计数方式选择位。 C/T=0时,为定时器 C/T=1时,为计数器 采样过程:CPU在每机器周期S5P2期间,输入信号进行采样。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,随后的机器周期S3P1期间,新的计数值装入计数器。M1、M0——工作模式选择位。2、T0、T1的控制寄存器TCONTR1、TR0:T1、T0启停控制位。 置1,启动定时器; 清0,关闭定时器。 IE1、IE0:外部中断1、0请求标志位 IT1、IT0:外部中断1、0触发方式选择位 注意:GATE=1,TRx与P3.2(P3.3)的配合。6.3定时器T0、T1的工作模式C/T=1,计数方式。计数脉冲由P3.4引脚输入。 C/T=0时,定时方式。 模式1的逻辑结构及应用模式2的逻辑结构及应用定时时间=(28-初值)×机器周期 最大定时时间=28×机器周期 优点:模式2能够进行自动重装载。模式0和1计数溢出后,计数器为全0。循环定时或计数时,需要重新设置初值。 说明:在模式2能够满足计数或定时要求时,尽可能使用模式2。6.2.4模式3的逻辑结构及应用图6-7模式3下T0的逻辑结构图2、T0模式3时T1的工作模式 T1可以模式0~模式2工作。 T1的结构如图6-9所示 由于TF1及中断矢量被TH0占用,所以T1仅用作波特率发生器或其它不用中断的地方。 T1作波特率发生器,其计数溢出直接送至串行口。设置好工作方式,串行口波特率发生器开始自动运行。 TMOD中T1的M1M0=11,T1停止工作。图6-9模式3下,T1的逻辑结构图 思考:T0工作在模式3,T1怎么进行方式设置?1、定时器/计数器工作模式的选择方法 (1)首先计算计数值N (2)确定工作模式 原则是尽可能地选择模式2 若N≤256选择模式2,否则选择模式1 (3)如果需要增加一个定时器/计数器 选择模式3。2、定时器/计数器初值X的计算方法 因为X+N=28或216 所以X=28或216-N (1)对定时器 设定时时间为t N=t/机器周期 所以 X=28或216-t/机器周期 (2)对计数器 X=28或216-N例设单片机的振荡频率为12MHz,用定时器/计数器0的模式1编程,在P1.0引脚产生一个周期为1000µs的方波,定时器T0采用中断的处理方式。 定时器的分析过程。 工作方式选择 需要产生周期信号时,选择定时方式。定时时间到了对输出端进行周期性的输出即可。 工作模式选择 根据定时时间长短选择工作模式。 首选模式2,可以省略重装初值操作。定时时间计算:周期为1000µs的方波要求定时器的定时时间为500µs,每次溢出时,将P1.0引脚的输出取反,就可以在P1.0上产生所需要的方波。 定时初值计算: 振荡频率为12MHz,则机器周期为1µs。 设定时初值为X, (65536-X)×1µs=500µs X=65036=0FE0CH 定时器的初值为:TH0=0FEH,TL0=0CHC语言程序: #include<reg52.h>//包含特殊功能寄存器库 sbit P1_0=P1^0;//进行位定义 voidmain() {TMOD=0x01;//T0做定时器,模式1 TL0=0x0c; TH0=0xfe; //设置定时器的初值 ET0=1; //允许T0中断 EA=1; //允许CPU中断 TR0=1; //启动定时器 while(1);//等待中断 } voidtime0_int(void)interrupt1 { //中断服务程序 TL0=0x0c; TH0=0xfe; //定时器重赋初值 P1_0=~P1_0; //P1.0取反,输出方波 } 汇编语言程序: ORG 0000H SJMP MAIN ORG 000BH LJMP TIME0MAIN: MOV TM