51单片机定时器初值的计算

51单片机定时器初值的计算
51单片机定时器初值的计算

51单片机定时器初值的计算

一。10MS定时器初值的计算:

1.晶振12M

12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。65536-10000=55536(d8f0)

TH0=0xd8,TL0=0xf0

2.晶振11.0592M

除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。

65536-9216=56320(dc00)

TH0=0xdc,TL0=0x00

二。50MS定时器初值的计算:

1.晶振12M

12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。65536-50000=15536(3cb0)

TH0=0x3c,TL0=0xb0

2.晶振11.0592M

除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。

65536-46080=19456(4c00)

TH0=0x4c,TL0=0x00

三。使用说明

-

以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出

最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。

51单片机12M和11.0592M晶振定时器初值计算

2011-01-04 22:25

at89s52,晶振频率12m

其程序如下:

引用代码:#include<>

#include<>

void timer0_init()

{

TMOD=0x01;3c3c3c12M1M3c11.0592M0.9216M4C4c12M

2008-07-29

单片机T2定时器实现1秒精确定时程序

/****************************************************************************** **************

* 文件名:

* 功能:使用T2定时器实现1秒精确定时并闪灯

* 型号:AT89S52

* 2.晶振:

******************************************************************************* **************/

#include "" ....

* 注意:

* 1、要精确定时,必须使用定时器的自动装载方式。本实验使用T2定时器,让它工作在16bit自动

* 装载方式,这时,有另一个位置专门装着16位预装载值,当T2溢出时,预装载值立即被装入,

* 这就保证了精确定时。

* 2、T2定时器是一个16位定时器,最长的溢出时间也就几十毫秒,要定时1秒,就需要用一个变量

* 来保存溢出的次数,积累到了一定的次数后,才执行一次操作。这样就可以累加到1秒或者更

* 长的时间才做一次操作。

* 3、当T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的。

* 4、T2定时器预装载值的计算:

* 设晶振为12MHz,每秒钟可以执行1000000(/12)个机器周期。而T2每次溢出时最多

* 经过了65536个机器周期。我们应该尽量让T2定时器的溢出中断的次数最少,这样对主程序的干扰

* 也就最小。

* 选择每秒中断14次,每次溢出1000000/14=个机器周期,不为整数且超出65536个机器周期,有效。

* 选择每秒中断16次,每次溢出1000000/16=62500个机器周期,小于65536个机器周期,有效。

* 选择每秒中断20次,每次溢出1000000/20=50000个机器周期,小于65536个机器周期,有效。

* .

* .

* .

* 通过上面的计算,我们可以发现,我们可以选择的方式有很多,但是最佳的是每秒中断16次,每次

* 溢出62500个机器周期,那么赋给T2定时器的初值应为65536-62500=3036,转换成十六进制值为

* 0x0BDC。

******************************************************************************* **************/

void main (void)

{

P1_7=1; // LED11灭

/* T2定时器赋预装载值,溢出16次就是1秒。 */

RCAP2H=0x0B;

RCAP2L=0xDC;

ET2=1; // 允许T2定时器中断

EA=1; // 打开总中断

TR2=1; // 启动T2定时器

while(1); // 死循环,等待T2定时器的溢出中断}

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用 实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。软件定时:执行一个循环程序进行时间延迟。定时准确,不需要外加硬件电路,但会增加CPU 开销。专用硬件电路定时:可以实现请精确 的定时和计数,但参数调节不方波。可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方 式和其他参数,使用方便。以下说明仅试用宏晶的STC89C52!!定时器 2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址) 000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。定时器2 可配制成向上/向下计数器。0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址) TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会 置位。EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。EXF2 位必须用软件清零。在递增/递减计数器 模式(DCEN=1)中,EXF2 位不会引起中断。RCLK:5 接收时钟标志。RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。TCLK:4 发送时钟标志位。TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。TCLK=0 时,将定时器1 的溢出脉冲作为串口模 式1 和模式3 发送时钟。EXEN2:3 定时器2 外部使能标志。当其置位且定时器2 未作为串口时钟时,允许T2EX 的负跳变产生捕获或重装。

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

MCS-51单片机计数器定时器

80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。 : 从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1 (P3.5)输入。 定时计数器的原理: 16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。 当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为: T=1/(12×106)Hz×1/12=1μs 这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长 度(如8位、13位、16位等)。 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。例如,如果选用12MHz 晶振,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

4实验四 单片机定时器的使用

姓名:学号:日期: 实验四单片机定时器的使用 一、实验名称:单片机定时器的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG H ;定时器T0的入口地址 LJMP TIMER0 MAIN: MOV TMOD,#01H

MOV R0,#05H MOV TH0,# H ;定时器的初值 MOV TL0,# H SETB ;开定时器T0的中断 SETB ;开CPU的中断 SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ;重装初值 MOV TL0,# H ;重装初值 RETI END 将以上程序补充完整,流水时间间隔为250ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:实现流水灯,时间间隔250ms,由定时器实现定时250ms。 六、回答思考题 1.定时器由几种工作模式,各种模式的最大定时时间是多少? 2.各种模式下初值怎么计算?

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图: 8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构 8051单片机的两个定时器T0和T1分别都由两个特殊功能寄存器组成;T0由特殊功能寄存器

单片机定时器习题

单片机定时器/计数器、中断和串行口习题 一、填空题 1、若要启动定时器T0开始计数,则应将TR0的值设置为 1 。 2、定时器T1工作在方式0时,其定时时间为(8192-定时器初值)*2us 。方式1时定时时间又为(65536-定时器初值)*2us 。 3、串行通信有异步通信和同步通信两种基本通讯方式。 4、波特率是指每秒钟传递信息的位数。 5、如果要将现有的波特率加倍,可使用指令MOV PCON,#80H 。 6、当串行口工作在方式1时,一帧信息共有10位,即起始位、8个数据位、停止位。 7、串行口工作在方式2时的波特率为fosc/32或fosc/64 。 8、外部中断1的程序入口地址是0013H 。 二、选择题 1、若要采用定时器0,方式1,如何设置TMOD__B__ A.00H B.01H C.10H D. 11H 2、单片机采用方式0时是13位计数器,它的最大定时时间是多少?_B__ A.81.92ms B.8.192ms C.65.536ms D.6.5536ms 3、以下哪项不是中断的特点? C A.分时操作 B.实时处理 C.在线编程 D.故障处理 4、外部中断响应时间至少需要__A个机器周期。 A.3 B.2 C.4 D.8 5、通过串口发送和接受数据时,在程序中使用__A___指令。 A.MOV BMOVX C.MOVC D.SW AP 6、以下哪个是中断优先级寄存器?__B A.IE B.IP C.TCON D.SCON 7、串行口中断的程序入口地址是 C 。 A 0003H B 001BH C 0023H D 000BH 三、判断题 1、8051的两个定时器T0和T1都是16位的计数器。(对) 2、单片机的计数器最高检测频率为振荡频率的1/12。(错) 3、定时/计数器的方式2具有自动装入初值的功能。(对) 4、引起中断的原因或发出中断申请的来源称为中断源。(对) 5、中断可使CPU和外设同时工作。(对) 6、定时器的特殊功能寄存器TMOD是用作中断溢出标志,并控制定时计数器的启动和停止。(错) 7、定时器控制寄存器TCON可以位寻址。(对) 8、MCS-51系列单片机的5个中断源都是可屏蔽中断。(对) 四、综合题

单片机试验之定时器计数器应用试验二

一、实验目的 1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 三、电路原理图 六、实验总结 通过本实验弄清楚了定时/计数器计数功能的初始化设定(TMOD,初值的计算,被计数信号的输入点等等),掌握了查询和中断工作方式的应用。 七、思考题 1、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。 答:程序见程序清单。 . . . . 四、实验程序流程框图和程序清单。 1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数,每计

满100个脉冲,则取反P1.0口线状态。 开始汇编程序开始 ORG 0000H START: LJMP MAIN TMO初始化 ORG 0100H 初始TMOD MAIN: MOV IE, #00H MOV TMOD, #60H计数初值初始计数初值初始化MOV TH1, #9CH MOV TL1, #9CH SETB TR1 中断初始中断初始化LOOP: JNB TF1, LOOP CLR TF1 CPL P1.0 启动定时器 AJMP LOOP 启动计数器 END

单片机定时器习题

单片机定时器/计数器、中断和串行 口习题 一、填空题 1、若要启动定时器T0开始计数,则应将TR0的值 设置为 1 。 2、定时器T1工作在方式0时,其定时时间为 (8192-定时器初值)*2us 。方式1时定时时间又 为(65536-定时器初值)*2us 。 3、串行通信有异步通信和同步通信两 种基本通讯方式。 4、波特率是指每秒钟传递信息的位数。 5、如果要将现有的波特率加倍,可使用指令 MOV PCON,#80H 。 6、当串行口工作在方式1时,一帧信息共有10位, 即起始位、8个数据位、停止位。 7、串行口工作在方式2时的波特率为 fosc/32或 fosc/64 。 8、外部中断1的程序入口地址是 0013H 。 二、选择题 1、若要采用定时器0,方式1,如何设置TMOD__B__ A.00H B.01H C.10H D. 11H 2、单片机采用方式0时是13位计数器,它的最大

定时时间是多少?_B__ A.81.92ms B.8.192ms C.65.536ms D.6.5536ms 3、以下哪项不是中断的特点? C A.分时操作 B.实时处理 C.在线编程 D.故障处理 4、外部中断响应时间至少需要__A个机器周期。 A.3 B.2 C.4 D.8 5、通过串口发送和接受数据时,在程序中使用__A___ 指令。 A.MOV BMOVX C.MOVC D.SWAP 6、以下哪个是中断优先级寄存器?__B A.IE B.IP C.TCON D.SCON 7、串行口中断的程序入口地址是 C 。 A 0003H B 001BH C 0023H D 000BH 三、判断题 1、8051的两个定时器T0和T1都是16位的计数器。 (对) 2、单片机的计数器最高检测频率为振荡频率的 1/12。(错) 3、定时/计数器的方式2具有自动装入初值的功能。 (对) 4、引起中断的原因或发出中断申请的来源称为中断 源。(对) 5、中断可使CPU和外设同时工作。(对) 6、定时器的特殊功能寄存器TMOD是用作中断溢出 标志,并控制定时计数器的启动和停止。(错) 7、定时器控制寄存器TCON可以位寻址。(对) 8、MCS-51系列单片机的5个中断源都是可屏蔽中断。

单片机定时器2的使用

/*----------------------------------------------- 名称:定时器2 内容:通过定时让LED灯闪烁,数据口为:P0口 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sfr T2MOD=0xC9; //定时器2模式控制寄存器地址;可以在头文件中定义 /*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ void T2_init(void) { T2CON=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置 T2MOD=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD 上电默认就是0,这里赋值只是为了演示这个寄存器的配置 RCAP2H = (65536-60000)/256;//晶振12M 60ms 16bit 自动重载 RCAP2L = (65536-6000)%256; ET2=1; //打开定时器中断 EA=1; //打开总中断 TR2=1; //打开定时器开关 } /*------------------------------------------------ 主程序 ------------------------------------------------*/ main() { T2_init(); while(1); } /*------------------------------------------------ 定时器中断子程序 ------------------------------------------------*/ void T2_ISR(void) interrupt 5 using 1//定时器2中断 { //自动重装,无需再次赋初值! TF2=0;//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!! P0=~P0; }

STC89C52单片机定时器2的使用

52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。 T2CON(T2的控制寄存器),字节地址0C8H: 0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下: TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。 EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。EXF2也是只能通过软件来清除的。RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器 TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器 EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部 时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获 或重装,并置位EXF2,申请中断。 TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2 C/T2:T2的定时方式或计数方式选择位。只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变

51单片机定时器初值的计算

51单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次机器周期。65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。 65536-9216=56320(dc00) TH0=0xdc,TL0=0x00 二。50MS定时器初值的计算: 1.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次机器周期。65536-50000=15536(3cb0) TH0=0x3c,TL0=0xb0 2.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) TH0=0x4c,TL0=0x00 三。使用说明 以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串

口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。 51单片机12M和11.0592M晶振定时器初值计算 2011-01-04 22:25 at89s52,晶振频率12m 其程序如下: 引用代码:#include #include void timer0_init() { TMOD=0x01;//方式1 TL0=0xb0; TH0=0x3c; TR0=1; ET0=1; } void timer0_ISR(void) interrupt 1 { TL0=0xb0; TH0=0x3c;//50ms中断一次 single++; if(single==20) { kk++; single=0; } } void main() { int kk=0;//计数器 int single=0; timer0_init(); } TL0=0xb0; TH0=0x3c; 这两个是怎么算出来得

单片机定时器实验

实验三单片机内部定时器应用 实验目的 1、理解单片机内部定时器的工作原理及使用方法 2、了解单片机定时中断程序的编写和调试方法 3、掌握定时器的基本使用方法 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机定时器的工原理 MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。 工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。 工作于计数器方式时,对P3.4 或P3.5 管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。 特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图4-7所示。 图4-7 定时器模式控制字格式 TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。 图4-8 定时控制寄存器数据格式 编写程序控制这两个寄存器就可以控制定时器的运行方式。 单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD设置;(3)然后启动计数,即对TR0或TR1置1。(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。

51单片机实现数码管99秒倒计时

51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。 目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。 定时器定时时间计算公式:初值X=M(最大计时)-计数值。 初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。 M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S 计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。 下面为实现99秒倒计时C语言源程序 /*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/ /*数码管,12M晶振*/ #include #define uchar unsigned char sbit p11=P1^1; //连的是继电器。。 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shiwei; uchar gewei; void delay(unsigned int cnt) { while(--cnt); } void main() { TMOD|=0x01; /*定时器0 16位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms */ TH0=0xd8; TL0=0xf0; IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时

AT89C51单片机定时器中断模式和查询设置

AT89C51单片机定时器终端模式和查询设置 T1为定时模式,定时65.536ms,P2.0对应的LED等闪烁一次,T0计数模式,计数脉冲从P3.4脚用按键输入,按一次,记一次,所以计数初值为0FFFFh,没按一次,产生一个溢出,P2.5对应的LED闪烁,同时数码管加1显示。 一、定时/计数器终端模式 org 0000h ljmp bb ;跳转到主程序入口bb处 org 000bh ;定时器0中断响应从这里开始执行 cjne r2,#9d,xx mov r2,#00h ljmp xx11 org 001bh ;定时器1中断响应从这里开始执行 ljmp xxx bb: mov p1,#3fh ;主程序入口处 mov tmod,#05h ;05h=0000 0101B设置T1定时T0计数模式,0定时,1计数 ;00是13位二进制计数模式0,高4位控制T1 ;01是16位二进制计数模式1,低4位控制T0 mov dptr,#0300h ;查表入口地址存放 mov r2,#00h

setb et0 ;和setb 0afh效果相同 setb ea ;和setb 0abh相同 setb et1 ;和setb 0a9h相同 setb tr0 setb tr1 mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0fdh ;计数器0的计数初值的低8位(第一次开始计数初值) sjmp $ ;程序执行时,原地踏步等待语句,在没有中断请求时, ;在此位置原地踏步计数定时计数,有请求时跳到中断入口执行中断xx: inc r2 xx11: mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0fdh ;计数器0的计数初值的低8位(第二次以后开始计数初值) mov a,r2 movc a,@a+dptr cpl p2.5 mov p1,a reti xxx: mov th1,#00h ;计数器1的计数初值的高8位 mov tl1,#00h ;计数器1的计数初值的低8位 cpl p2.0 reti org 0300h ;七段显示吗表格入口 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh end 二、定时/计数器查询模式 org 0000h ljmp bb ;跳转到主程序入口bb处 bb: mov tmod,#15h ;主程序入口处 ;设置T1定时模式,工作在计数方式0,设置T0计数模 ;式工作在计数方式1 mov dptr,#0300h ;查表入口地址存放 clr et0 ;关定时/计数器0中断 setb ea ;和setb 0abh相同,开总中断开关 setb et1 ;和setb 0a9h相同,开定时/计数器1中断 setb tr0 setb tr1 mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0ffh ;计数器0的计数初值的低8位(第一次开始计数初值) CX: JBC TF0, xx ;查询定时/计数器0溢出标志位,有溢出跳转xx执行 JBC TF1, xxx ;查询定时/计数器1溢出标志位,有溢出跳转xxx执行 sjmp CX ;无溢出,跳CX继续查询 ;溢出是在THi和TLi计数满,超过FFFFH时,TFi被自动置1,中断和查询都是根 ;据这个标志是否为1来响应的。 xx: mov th0,#0ffh ;计数器0的计数初值的高8位 mov tl0,#0ffh ;计数器0的计数初值的低8位(第二次以后开始计数初值) cjne r2,#10d,xx11 mov r2,#00h

51单片机定时器计数器汇编实验报告

批 阅 长沙理工大学 实验报告 年级光电班号姓名同组姓名实验日期月日 指导教师签字:批阅老师签字: 内容 一、实验目的四、实验方法及步骤 二、实验原理五、实验记录及数据处理 三、实验仪器六、误差分析及问题讨论 单片机定时器/计数器实验 一、实验目的 1、掌握51单片机定时器/计数器的基本结构。 2、掌握定时器/计数器的原理及编程方法。 二、实验仪器 1、装有keil软件的电脑 2、单片机开发板 三、实验原理 51单片机有2个16位的定时器/计数器,分别是T0和T1,他们有四种工作方式,现以方式1举例。若定时器/计数器0工作在方式1,计数器由TH0全部8位和TL0全部8位构

成。 方式1作计数器用时,计数范围是:1-65536(2^16);作定时器用时,时间计算公式是:T=(2^16-计数初值)×晶振周期×12。 四、实验内容 1、计算计数初值 单片机晶振频率为6MHz,使用定时器0产生周期为120000μs等宽方波连续脉冲,并由P1.0输出。设待求计数初值为x,则: (2^16-x)×2×10^-6 = 120000×10^-6解得x=5536。二进制表示为:00010101 10100000B。十六进制为:高八位(15H),低八位(A0H)。 2、设置相关控制寄存器 TMOD设置为xxxx0001B 3、程序设计 ORG 0000H AJMP MAIN ORG 30H MAIN: MOV P1,#0FFH ;关闭所有灯 ANL TMOD,#0F0H ;置定时器0工作方式1 ORL TMOD,#01H ;不影响T1的工作 MOV TH0,#15H ;设置计数初始值 MOV TL0,#0A0H SETB EA ;CPU开中断 SETB ET0 ;定时器0开中断 SETB TR0 ;定时器开始运行 LOOP: JBC TF0,INTP ;如果TF0=1,则清TF0并转到INTP AJMP LOOP ;然跳转到LOOP处运行 INTP: MOV TH0,#15H ;重新设置计数初值 MOV TL0,#0A0H CPL P1.0 ;输出取反 AJMP LOOP END AJMP LOOP

51单片机定时器设置

51单片机定时器设置入门(STC89C52RC) STC单片机定时器设置 STC单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。 2. 尽量用形像的方法记忆 比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像 TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER) 定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。 其格式为: 其中低四位定义定时器/计数器C/T0,高四位定义定时器/计数器C/T1,各位的说明: GA TE——门控制。 GA TE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。 当INT0引脚为高电平时TR0置位,启动定时器T0; 当INT1引脚为高电平时TR1置位,启动定时器T1。 GA TE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。 C/T——功能选择位 C/T=0时为定时功能,C/T=1时为计数功能。 置位时选择计数功能,清零时选择定时功能。

M0、M1——方式选择功能 由于有2位,因此有4种工作方式: M1M0 工作方式计数器模式TMOD(设置定时器模式) 0 0 方式0 13位计数器TMOD=0x00 0 1 方式1 16位计数器TMOD=0x01 1 0 方式 2 自动重装8位计数器TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器TMOD=0x03 单片机定时器0设置为工作方式1为TMOD=0x01 这里我们一定要知道,TMOD的T是TIMER/COUNTER的意思,MOD是MODE的意思。至于每位上的功能,你只要记住图表,并知道每个英文缩写的原型就可以了。 在程序中用到TMOD时,先立即回忆图表,并根据缩写的单词原形理出每位的意义,如果意义不是很清楚,就查下手册,几次下来,TMOD的图表就已经在脑子里了。 8位GA TE位,本身是门的意思。 7位C/T Counter/Timer 6位M1 Mode 1 5位M0 Mode 0 TCON: 定时器/计数器控制寄存器(TIMER/COUNTER CONTROL REGISTER) TMOD分成2段,TCON控制更加精细,分成四段,在本文中只要用到高四段。 TF0(TF1)——计数溢出标志位,当计数器计数溢出时,该位置1。 TR0(TR1)——定时器运行控制位 当TR0(TR1)=0 停止定时器/计数器工作 当TR0(TR1)=1 启动定时器/计数器工作 IE0(IE1)——外中断请求标志位 当CPU采样到P3.2(P3.3)出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。 IT0(IT1)——外中断请求信号方式控制位 当IT0(IT1)=1 脉冲方式(后沿负跳有效) 当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。 TF0(TF1)——计数溢出标志位

52单片机定时器2使用C语言程序

52单片机定时器2使用(C语言程序) 水寒8051 1,128 views 0 Comments发表评论 本文是关于52单片机定时器计数器2做为普通的16位自动重装定时器使用,类似于定时器计数器0和定时器计数器1工作在方式1下。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。 源代码: view source print? 00 1 /*********************************************************** 00 2 程序功能:52系列单片机定时器计数器2使用 00 3 程序设计:燕山大学鲁信琼 00 4 晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯 00 5 本实验注意事项:

6 1. 定时器2的中断使能为IE^6位,也就是ET2;中断服务程序标号为5。 00 7 2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。 00 8 3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。 00 9 4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。 01 0 01 1 承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作 01 2 01 3 EMail: xqlu(at)https://www.360docs.net/doc/f313325138.html, QQ: 9790335 01***********************************************************/

基于51单片机控制的简易时钟(内部定时器)

若需要仿真图+程序(Q:409975690)附程序:#include #define uint unsigned int #define uchar unsigned char uchar n,fen,miao,shi,ri ,yue; uint a; sbit lcden=P2^1; sbit lcdrs=P2^0; sbit k1=P1^0; sbit k2=P1^2; sbit k3=P1^5; sbit k4=P1^6; sbit k5=P1^7; void keyscan(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_comd(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;

void write_date (uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void start() { write_comd(0x38); write_comd(0x0c); write_comd(0x06); write_comd(0x01); } void write_sfm() { write_comd(0x80+0x44); write_date(0x30+shi/10); write_comd(0x80+0x45); write_date(0x30+shi%10); write_comd(0x80+0x46); write_date(0x3A); write_comd(0x80+0x47); write_date(0x30+fen/10); write_comd(0x80+0x48); write_date(0x30+fen%10); write_comd(0x80+0x49); write_date(0x3A); write_comd(0x80+0x4a); write_date(0x30+miao/10); write_comd(0x80+0x4b); write_date(0x30+miao%10); } void write_nyr() { write_comd(0x80); write_date('M'); write_comd(0x80+0x01); write_date('T'); write_comd(0x80+0x02); write_date('Z');

51单片机计数器和定时器的本质区别及应用方法

51单片机计数器和定时器的本质区别及应用方法 在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是单片机学习的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。 在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。 计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。 在定时器和计数器中都有一个溢出的概念,那什么是溢出了。我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的定时计数器中溢出将导致一次中断。 在定时器计数器中,我们有个概念叫容量,就是最大计数量。 方式0是2的13次方, 方式1是2的16次方, 方式2是2的8次方, 把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。 在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。

相关文档
最新文档