第5章定时器计数器的C51编程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//初始化
【例5-4】模式3应用
• 51单片机外接6MHz晶振,通过T0定时, 需要在P1.0和P1.1分别产生周期为 400μs和800μs的方波。 • 说明:此时可以TL0和TH0产生200μs和 400μs的定时中断,并在中断服务程序 中对P1.0和P1.1取反。由于采用了6MHz 晶振,因此单片机的机器周期为2μs。 因此可计算TL0的初值X=156=9CH,TH0 的初值X=56=38H。
【例5-1】计数器工作方式初始化示例:
• 定时器/计数器0工作于计数方式,且允 许中断,计数值n=100,分别令其工作 在模式1和模式2,初始化编程。 • 模式1:
• • • • • TMOD=0x05; TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1;ET0=1; TR0=1; //设置计数器工作方式 //计数器高8位TH0赋初值 //计数器低8位TL0赋初值 //中断管理 //启动计数器
【例5-7】计数器应用
• 用定时器/计数器T0监视一生产线,每 生产100个工件,发出一包装命令,包 装成一箱,并记录其箱数。 •
实验1 按钮型开关模拟计数器实 验
实验2 定时器实验

方法2:硬件定时器*硬件计数器
• (1)T0定时器,定时器50ms,定时时 间到,P1.0取反; • (2)T1计数器, • 计数脉冲位P1.0, • 计数10次; • (3)计数次数到 • P1.1取反。
【例5-6】不同占空比的输出
• 设系统时钟频率为12MHz,编程实现: P1.1引脚上输出周期为1s,占空比为20 %的脉冲信号。 • (取10ms基础,100个,分别占20个、 80个)
3.模式2:
计数与定时范围:
• • • • • • • • • • 计数器的计数值范围是:1~256(28) 当为计数器工作方式时: 计数器的初值范围为:0~28-1; 当为定时工作方式时: 定时时间=(28-计数初值)×定时周期 若晶振频率为12MHz,其定时周期1μs: 则最短定时时间为: Tmin=[28-(28-1)] ×1μs =1(μs) 最长定时时间为: Tmax=(28-0) ×1μs =256(μs)
(2)模式2—中断方式
• • • • • • • • • • • #include<reg51.h> sbit LED=P1^0; void main( ) { TMOD=0x02; //初始化 TH0=6; TL0=6; //初值 EA=1; ET0=1; //中断管理 TR0=1; //启动定时器 while(1); //等待中断 } void time0_int(void) interrupt 1 { LED=~LED; }
• void main(void) //主函数 • { Wave2=0; //初始化P1^1=0 • TMOD=0x03; //设置定时器T0为模式3 • TL0=0x9C; TH0=0x38; //初始化 • TR0=1; ET0=1; • TR1=1; ET1=1;EA=1; //开中断 • while(1) ; //主循环 • }
• void time0_int(void) interrupt 1 • { TH0=(65536-10000)/256; //重载初始值 • TL0=(65536-10000)%256; • i++; //每发生一次中断,计数变量加1 • if (i==50) //发生50次中断,定时0.5ms • { P1_1=!P1_1; • i=0; //计数变量清零 • } • }
模式2—查询方式:
• • • • • • • • • • • #include<reg51.h> sbit LED=P1^0; void main( ) { TMOD=0x02; TH0=6; TL0=6; EA=1; ET0=1; TR0=1; while(1){ while(TF0==1) { TF0=1; LED=~LED; } } }
5Leabharlann Baidu1.1
结构
• 计数功能: • 是指对外部事件进行计数:计数信号来 自T0(P3.4)、T1(P3.5)引脚。 • 定时功能: • 也是通过计数器的计数功能来完成的, 不过此时的计数脉冲来自单片机内部: 机器周期。
5.1.2
控制寄存器
• 与定时器/计数器应用有关的控制寄存 器有2个,分别为TCON、TMOD、TH、TL。
【例5-5】P1.1输出周期1s的方波
• 由于定时时间较长,一个定时器不能直 接实现(一个定时器最长定时时间为 65536us),可以有以下两种方法。 • 方法1:硬件定时*软件计数 • 如硬件定时50ms,软件计数器设定为20 即可。
• • • • • • • • • •
#include<reg51.h> sbit P1_1=P1^1; unsigned char i; //定义计数变量 void main( ) { i=0; //初始化 TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1;TR0=1; while(1); }
• 1、计数器控制寄存器(TCON)
2、工作方式控制寄存器(TMOD)
• 3、TH、TL • 4、如果是中断方式,还与IE、IP寄存 器有关。
5.2 工作模式4种
• 1.模式0
定时和计数范围:
• • • • • • • • • • 计数器的计数值范围是:1~8192(213) 当为计数器工作方式时: 计数器的初值范围为:0~213-1; 定时时间的计算公式为: 定时时间=(213-计数初值)×定时周期 若晶振频率为6MHz,其定时周期2μs: 则最短定时时间为: Tmin=[213-(213-1)] ×2μs =2(μs) 最长定时时间为: Tmax=(213-0) ×2μs =16384(μs)
4.模式3:
5.3
应用举例
• (1)TMOD的确定 • (2)计数器的计数初值X 已知需要计的数N : X=2N-n • 模式1: • TH=(65536-n)/256; • TL=(65536-n)%256; • 或:TH=-n/256; • TL=-n%256;

• 模式2: • TH=TL=256-n;或: TH=TL=-n • (3)定时器/计数器在中断方式工作时 ,需开CPU中断和源中断——编程IE寄 存器; • (4)启动定时器/计数器——编程TCON 中的TR1或TR0位。 • (5)中断类型号: 1、 3
【例5-3】模式1、2应用:
• 设系统时钟频率为12MHz,用定时器/计 数器T0编程实现从P1.0输出周期为 500μs的方波。 • 分析: • (1)定时250us • (2)应该采用模式2,也可以采用模式1 • (3)可以采用中断或查询
(1)模式1—中断方式
• • • • • • • • • • #include<reg51.h> sbit LED=P1^0; void main( ) { TMOD=0x01; //初始化 TH0=(65536-250)/256; //赋初值 TL0=(65536-250)%256; EA=1; ET0=1; //中断管理 TR0=1; //启动定时器 while(1); //等待中断 }
模式2:
• • • • • •
TMOD=0x06; TH0=-100; TL0=-100; EA=1; ET0=1; TR0=1;
【例5-2】定时器工作方式初始化示例:
• 外接晶振频率fosc=12MHz,T1工作于定 时方式,且允许中断,定时时间为20ms, 令其工作在模式1。
• • • • • • TMOD=0x01; //设置定时器工作方式 TH0=(65536-20000)/256; //高8位TH0赋初值 TL0=(65536-20000)%256; //低8位TL0赋初值 ET0=1; //开计数器中断 EA=1; TR0=1; //启动计数器
• • • • • • • • • • •
#include <reg51.h> //头文件 sbit Wave1=P1^0; //定义位变量 sbit Wave2=P1^1; void T0ISR(void) interrupt 1 //T0中断响应 { Wave1=~ Wave1; TL0=0x9C; //重置计数初值 } void T1ISR(void) interrupt 3 //T1 中断响应 { Wave2=~ Wave2; TH0=0x38; //重置计数初值 }
第 5章
51单片机定时器/计数器 的C51编程
5.1 5.2 5.3 5.4
定时器/计数器的基本知识 定时器/计数器的工作模式 定时器/计数器应用举例 实验
5.1 51单片机的定时器/计数器基本 知识 • 51单片机有两个16位的定时器/计 数器,其核心部件为加法计数器。 • 5.1.1 结构 • 5.1.2 控制寄存器
• void
• { • •
time0_int(void) interrupt 1 //中断函数 LED=~LED; TH0=(65536-250)/256; //重载初始值 TL0=(65536-250)%256;
• }
模式1--查询方式:
• • • • • • • • • • • • #include<reg51.h> sbit LED=P1^0; void main( ) { TMOD=0x01; //初始化 TH0=(65536-250)/256;TL0=(65536-250)%256; TR0=1; while(1){ while(TF0==1) //定时时间未到,等待 { TF0=0; TH0=(65536-250)/256;TL0=(65536-250)%256; LED=~LED; } } }
2.模式1:
定时与计数范围:
• • • • • • • • • • 计数器的计数值范围是:1~65536(216)。 当为计数器工作方式时: 计数器的初值范围为: 0~216-1; 当为定时工作方式时: 定时时间=(216-计数初值)×定时周期 若晶振频率为12MHz,其定时周期1μs: 则最短定时时间为: Tmin=[216-(216-1)] ×1μs =1(μs) 最长定时时间为: Tmax=(216-0) ×1μs =65536(μs)
相关文档
最新文档