单片机定时计数器实现(自己整理的)

合集下载

【报告】单片机定时器计数器实验报告

【报告】单片机定时器计数器实验报告

【关键字】报告单片机定时器计数器实验报告篇一:单片机计数器实验报告计数器实验报告㈠实验目的1. 学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。

㈡实验器材1. 2. 3. 4. 5.G6W仿真器一台MCS—51实验板一台PC机一台电源一台信号发生器一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。

㈣实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。

单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。

2. 计数脉冲由信号发生器输入(从T0端接入)。

3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)程序源代码ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H;T0的中断入口地址;设置T1做定时器,T0做计数器,都于方式1工作;装入中断次数;装入计数值低8位;装入计数值高8位MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0MOV P1.7,C ;保护现场;装入计数值低8位;装入计数值高8位,50ms;允许T1中断;未到1s,继续计时;1s到重新开始;显示计数器T0的值;读计数器当前值;将计数值转为十进制;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中;将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器T0清零MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。

单片机应用技术实例教程第6章 51单片机的定时计数器

单片机应用技术实例教程第6章 51单片机的定时计数器

前一页
6.4.4定时计数器值的读取
定时计数器在运行过程中,程序可能要求取得当前的定时值,但是由于TH0/TH1寄存器和 TL0/TL1寄存器是分开的,不可能同时读取,这就有可能由于在读取其中一个寄存器时另外一 个寄存器正在改变而造成得到一个错误的数据。对于这种情况,在程序设计时可以考虑用小误 差来代替大误差的情况,即用定时计数器的数据寄存器低位上的误差来代替高位上的误差。程 序应该先读取定时器高8位数据寄存器TH0/TH1,再读取低8位数据寄存器TL0/TL1。还有另外 一种情况,即读取TH0/TH1后TL0/TL1对高位产生了进位,如果出现这种情况,读出的数据同 样会存在较大的误差。对于这种情况,可以考虑在读取低位寄存器后再次读取高位寄存器并且 和第一次取得的数值进行比较,如果不相同则再次重复操作的方式来避免,例6.8给出了这种 算法。 【例6.8】定时计数器的数据寄存器的值读取 (实例代码详见教材)
前一页
6.2.2 控制寄存器TCON
TCON是定时计数器控制寄存器,其内部结构如下表所示,在51单片机复位后初始化值为所有 位都被清零。
前一页
6.2.3数据寄存器TH0、TL0、和TH1、TL1
TH0、TL0/TH1、TL1分别是T0/T1的数据高位/低位寄存器,均为8位。当定时计数器收到一个 驱动事件(定时、计数)后,对应的数据寄存器的内容加1,当数据寄存器的值到达最大时, 将产生一个溢出中断,在单片机复位后所有寄存器的值都被初始化为0x00,这些寄存器都不能 位寻址。
前一页
首页
6.2 51单片机定时计数器的寄存器
6.2.1工作方式控制寄存器TMOD 6.2.2控制寄存器TCON 6.2.3数据寄存器TH0、TL0、和TH1、TL1

用单片机内部的定时计数器来实现电子时钟的方法-

用单片机内部的定时计数器来实现电子时钟的方法-
MOV 2BH,#00H;若是,则清除分的值为00
N3:JNB P0.1,$;(分)放开了?
CALL DELAY;消除抖动
N4:JB P0.2,LOOP;时按了么?若不是,则跳至LOOP
CALL DELAY;消除抖动
MOV A,2AH;将十的值存入A
ADD D,#01;A的内容加1
DA A;将十进位调整
ADD A,#1;秒加1
DA A;做十进制调整
MOV 2CH,A;存入秒计数单元
CJNE A,#60H,X4;是否等于60秒?若不是,则跳至X4
MOV 2CH,#00;若是,则清除为00
MOV A,2BH;2BH为计数单元
ADD A,#1;分加1
DA A;做十进制调整
MOV 2BH,A;存入分计数单元
D1:MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
MOV TL0,#60
PUSH ACE;将A的值暂时存入堆栈
PUSH PSW;将PSW的值暂时存入堆栈
DJNZ R4,X2;计时一秒
MOV R4,#250
CALL CLOCK;调用计时子程序CLOCK
CALL DISP;调用显示子程序
X2:CALL SCAN;调用扫描子程序
POP PSW;从堆栈取出PSW的值
T0中断
重新启动T0
保护现场
1S定时到
计数值调整
调DISP子程序
调SCAN子程序
恢复现场
中断返回
3.3显示程序DISP:
DISP子程序的作用是分别将时间记数单元2CH(S)2BH(MIN)2AH(H)中的十进制时间值(组合BCD码)转化为个位和十位(分离BCD码)存放在显示缓冲区中。显示缓冲区的地质为20H~25H,其中,20H~21H存放秒数据,22H~23H存放分数据,24H~25H存放时数据,由于每一个地址单元均为分离BCD码,用BCD七为译码器74LS47直接进行编译。因此,不需要软件方式对BCD码进行编译。

单片机定时计数器工作方式实现方法

单片机定时计数器工作方式实现方法

单片机定时计数器工作方式实现方法本文介绍了单片机定时计数器的工作原理和四种工作方式的实现方法,包括初始化、定时器计数器结构的详细说明以及定时时间的计算公式。

下面是本店铺为大家精心编写的5篇《单片机定时计数器工作方式实现方法》,供大家借鉴与参考,希望对大家有所帮助。

《单片机定时计数器工作方式实现方法》篇1一、引言单片机定时计数器是单片机中的一个重要组成部分,它可以用于测量时间、控制程序流程等。

单片机定时计数器的工作方式有多种,每种工作方式都有不同的计数器结构和计时精度,因此需要根据具体应用场景选择合适的工作方式。

本文将详细介绍单片机定时计数器的工作原理和四种工作方式的实现方法。

二、定时计数器工作原理单片机定时计数器通常由一个或多个计数器和一些控制寄存器组成。

计数器用于计数外部时钟脉冲的数量,控制寄存器用于设置计数器的工作方式和初始值等。

定时计数器的工作原理如下:1. 初始化:在使用定时计数器之前,需要对其进行初始化,包括设置工作方式、计数器初始值和开启中断等。

2. 计时:定时计数器根据外部时钟脉冲的频率和计数器的位数计算时间,通常使用二进制计数法,计数器的每一位代表一个时间单位。

3. 中断:定时计数器可以根据计数器的溢出情况产生中断,中断服务程序可以根据具体应用场景进行时间处理和控制。

三、定时计数器工作方式实现方法单片机定时计数器有四种工作方式,分别为工作方式 0、工作方式 1、工作方式 2 和工作方式 3,每种工作方式都有不同的计数器结构和计时精度。

1. 工作方式 0:13 位定时器/计数器工作方式 0 是 13 位计数结构的工作方式,其计数器由 TH 的全部 8 位和 TL 的低 5 位构成,TL 的高 3 位没有使用。

以定时器0 为例,当 C/0 时,多路开关接通振荡脉冲的 12 分频输出,13 位计数器以此进行计数,这就是定时工作方式。

当 C/1 时,多路开关接通计数引脚(T0),外部计数脉冲由引脚 T0 输入,当计数脉冲发生负跳变时,计数器加 1,这就是计数工作方式。

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

MCS-51单片机内部定时器计数器
•MCS-51单片机内部定时器计数器
二、 方式1
方式 1(16位计数器)
•MCS-51单片机内部定时器计数器
方式1和方式0的工作原理基本相同,唯一 不同是T0和T1工作在方式1时是16位的计数/定 时器。
方式1时的计数长度M是2的16次方。16位 的初值直接拆成高低字节,分别送入TH和TL 即可。
•MCS-51单片机内部定时器计数器
M1 M0:四种工作方式的选择位 工作方式选择表
M1 M0 方式
说明
0 0 0 13 位定时器(TH的 8 位和TL的低 5 位)
0 1 1 16 位定时器/计数器
1 0 2 自动重装入初值的 8 位计数器 T0 分成两个独立的 8 位计数器,
1 1 3 T1 在方式 3 时停止工作
定时 1 ms的初值:
因为 机器周期=12÷6 MHz= 2 μs
所以 1 ms内T0 需要计数N次:
•MCS-51单片机内部定时器计数器
N= 1 ms÷2 μs = 500
由此可知: 使用方式 0 的 13 位计数器即可, T0 的初值X为 X=M-N=8 192-500=7 692=1E0CH 但是, 因为 13 位计数器中, 低 8 位 TL0 只使用了 5 位, 其 余码均计入高 8 位TH0 的初值, 则 T0
0。TF产生的中断申请是否被接受, 还需要由中断计数器T1、 T0 的运行控制位,
通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时
被清 0。
•MCS-51单片机内部定时器计数器
定时器的工作方式
一、 方式 0
方式 0(13位计数器)
•MCS-51单片机内部定时器计数器
•MCS-51单片机内部定时器计数器

单片机实验五_定时计数器应用

单片机实验五_定时计数器应用

单片机实验五_定时计数器应用实验五定时计数器应用一、实验目的:1、单片机系统中,可以用软件或硬件定时,当定时时间较长,定时准确率要求较高时,应采用硬件定时。

MCS—51系列单片机中有2个16位的可编程定时/计数器T0和T1,通过本实验要求掌握T0、T1的初始化编程和应用。

2、学会应用烧录软件XLISP和keil-uvision2集成调试软件进行实验。

掌握实验的步骤并能得到正确的实验结果。

二、实验内容1、定时计数器应用:8只LED呈流水灯显示,用定时计数器定时,使流水灯的间隔时间为1S。

用定时计数器0实现定时1S,采用软硬件结合方式:T0方式0,定时50ms,循环程序20次。

2、数码管显示:要求数码管显示0-9,间隔时间0.5S,采用定时计数器T1实现。

3、思考题:用定时计数器T0和T1级联定时3S。

三、实验步骤1、硬件连接(1)使用USB线(电源)和串口线(通信),将XL2000综合仿真仪与微型计算机连接起来; CPU选用AT89S51,采用程序直接写入方式;将JP17的开关(编程仿真模式)置为弹起状态,选择编程模式;(2)定时计数器应用:使用8P的连接线将CPU的P0口与JP32(8个发光二极管)相连。

(3)数码管显示:P1口接数码管(JP19)。

2、软件设计(1) Kiel软件操作同实验一:建立工程并存储、选择芯片89C51、新建文件输入程序并保存,将文件加入到工程中。

(2)修改属性:如右图,点击工程下拉菜单中的”目标’目标1’属性”; 单击”目标”,输入仿真器的频率12(MHz);选择“输出”菜单中的”生成HEX文件”,以便汇编后产生HEX代码,供编程器使用;3、将程序写入AT89C51:双击桌面XLISP启动程序,出现下面界面。

(1)选择操作/检测编程器点击。

在上图7窗口中出现编程器检测OK!说明系统已经连接完好,可以下一步实验,否则需要检查出错的原因并改正;(2)点击擦除图标,将CPU中的原有程序擦除;(3)点击打开图标,找到Kiel编译后需要执行的程序(HEX文件),点击;在XLISP的文件程序区可见到要执行的程序;(4)点击写入框,在程序写入结束后即可观察运行的结果。

单片机定时器-计数器实验总结

单片机定时器-计数器实验总结单片机定时器/计数器实验总结篇一:单片机实验之定时器计数器应用实验一一、实验目的1、掌握定时器/计数器定时功能的使用方法。

2、掌握定时器/计数器的中断、查询使用方法。

3、掌握Prteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二、设计要求1、用Prteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波,在P1.0口线上接示波器观察波形。

2、用Prteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,在P1.1口线上接示波器观察波形。

三、电路原理图六、实验总结通过这次实验,对定时器/计数器的查询工作方式有了比较深刻的理解,并能熟练运用。

掌握定时器/计数器的中断、查询使用方法。

对于思考题能够运用三种不同思路进行编程。

七、思考题1、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波。

答:程序见程序清单。

四、实验程序流程框图和程序清单1、以查询方式工作,在P1.0 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #02H MV TH0, #9CH MV TL0, #9CH SETB TR0 LP: JNB TF0, LP CLR TF0 CPL P1.0 AJMP LP END2、以中断方式工作,在P1.1 RG 0000H START: LJMP MAIN RG 000BH LJMP TTC0 RG 0100H MAIN: MV TMD, #02H MV TH0, #88H MV TL0, #88H SETB EA SETB ET0 SETB TR0 HERE: LJMP HERE RG 0200H TTC0: CPL P1.1 RETI END3、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波 RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F6H MV TL0, #14H LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 MV TH0, #0F6H MV TL0, #14H CLR TF0 CLR TR0 CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #20H MV TH1, #38H MV TL1, #38H MV TH0, #0F0H MV TL0, #0CH SETB TR0 LP1: SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CLR TR1 CPL P1.0 SETB TR0 LP3: JNB TF0, LP3 CLR TF0 MV TH0, #0F0H MV TL0, #0CH CPL P1.0 LJMP LP1 END RG 0000H START: LJMP MAIN RG 0100H MAIN: MV IE, #00H MV TMD, #00H LP1: MV TH1, #0F9H MV TL1, #18H SETB TR1 LP2: JNB TF1, LP2 CLR TF1 CPL P1.0 MV TH1, #0F6H MV TL1, #14H LP3: JNB TF1, LP3 CLR TF1 CPL P1.0 LJMP LP1 END五、实验结果(波形图)篇二:单片机实验-定时器计数器应用实验一定时器/计数器应用实验一一、实验目的和要求1、掌握定时器/计数器定时功能的使用方法。

单片机定时计数功能

12/13
下次讲解课题
课题八 AT89S51的串行口通信功能 ~完~
13/13
8/13
3.方式2
将TMOD中的M1 M0设置成10即可。 定时/计数将以8位长度进行工作,溢出后自动重装定时/计数初值。 低8位进行定时/计数,高8位存放自动重装的定时/计数初值。
4.方式3
将TMOD中的M1 M0设置成11即可。 T0定时器低8位TL0可工作在8位定时或计数模式,溢出后需要人工重
6/13
5.定时计数器初值的推算
根据定时器工作原理和算术运算来推算出计数初值; 当定时器工作在方式0时,定时时间 =(213-计数初值)× 晶振周期×12 当计数器工作在方式0时,计数次数 = 213-计数初值 当定时器工作在方式1时,定时时间 =(216-计数初值)× 晶振周期×12 当计数器工作在方式1时,计数次数 = 216-计数初值 当定时器工作在方式2、3时,定时时间 =(28-计数初值)× 晶振周期×12 当计数器工作在方式2、3时,计数次数 = 28-计数初值
2/13
一. AT89S51的定时/计数功能
1.AT89S51的定时/计数器
AT89S51单片机内部带有两个16位的定时/计数器T0/C0和T1/C1。 T0/C0由TH0(T0高8位)和TL0(T0低8位)拼装而成; T1/C1由TH1(T1高8位)和TL1(T1低8位)拼装而成; 注意,TH0、TL0、TH1、TL1都是8位的特殊功能寄存器。
GATE: 门控标志位,为0时与门引脚无关,为1时与门引脚有关; C/T^: 定时/计数模式选择标志,为0时是定时模式,为1时是计数模式; M1M0: 工作方式设置标志;00方式0,01方式1,10方式2,11方式3;
TMOD寄存器高4位用于设置T1,低4位用于设置T0,不可位寻址。

单片机定时器与计数器的工作原理及应用

单片机定时器与计数器的工作原理及应用摘要:单片机作为现代电子设备中广泛采用的一种集成电路,其内部包含了丰富的功能模块,其中定时器和计数器被广泛应用于各种领域。

本文将介绍单片机定时器和计数器的工作原理及应用,包括定时器的基本原理、工作模式和参数配置,以及计数器的工作原理和常见应用场景。

希望通过本文的阐述,读者能够深入了解单片机定时器和计数器的基本原理和应用,为电子系统设计提供参考。

引言:单片机作为嵌入式系统中的核心部件,承担着控制和处理各种信号的重要任务。

定时器和计数器作为单片机的重要功能模块,为实现各种实时控制任务提供了有效的工具。

定时器可以生成一定时间间隔的定时信号,而计数器则可以对外部事件的频率进行计数,实现时间测量和计数控制等功能。

一、定时器的工作原理单片机中的定时器通常为计数器加上一定逻辑控制电路构成。

定时器的基本工作原理是通过控制计数器的计数速度和计数值来实现不同时间间隔的输出信号。

当定时器触发时,计数器开始计数,当计数值达到预设值时,定时器产生一个输出信号,然后重新开始计数。

定时器通常由以下几个部分组成:1.计数器:定时器的核心部件是计数器,计数器可以通过内部振荡器或外部输入信号进行计数。

通常情况下,计数器是一个二进制计数器,它可以按照1、2、4、8等倍数进行计数。

2.预设值:定时器的预设值决定了定时器的时间间隔。

当计数器达到预设值时,定时器会产生一个输出脉冲。

3.控制逻辑电路:控制逻辑电路用于控制计数器的启动、停止和重置等操作。

通常情况下,控制逻辑电路由一系列的触发器和逻辑门组成。

二、定时器的工作模式定时器可以根据实际需求在不同的工作模式下运行,常见的工作模式有以下几种:1.定时工作模式:在定时工作模式下,定时器按照设定的时间间隔进行计数,并在计数值达到预设值时产生一个输出脉冲。

这种模式常用于周期性任务的触发和时间测量。

2.计数工作模式:在计数工作模式下,定时器通过外部输入信号进行计数,可以测量外部事件的频率。

51单片机实现LCD1602显示定时计数器(自己整理的)

每隔一分钟,蜂鸣器响一次,按键按一下,计数器清0。

从新开始、#include<>#include<>#define uchar unsigned char#define uint unsigned intsbit RS=P2^0;sbit RW=P2^1;sbit EN=P2^2;uchar code dis2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};uchar code p[]="-";//code 可以不加,加了之后就是固定了这个数组不能对其进行操作、、这个一定要注意。

uchar j,k,kk,miao,miao1,fen,fen1,shi,shi1;void delay_ms(int x)//延时程序,延时1ms{uint i;while(x--)for(i=0;i<120;i++);}uchar busy()//对LCD1602进行判断是否为忙{uchar status;RS=0;RW=1;EN=1;delay_ms(1);status=P1;EN=0;return status;}void write_cmd(uchar cmd)//写命令程序,首先对其进行判忙{while((busy()&0x80)==0x80);//对返回进行判断,如果为忙就进行等待RS=0;RW=0;EN=0;P1=cmd;EN=1;delay_ms(1);EN=0;}void write_data(uchar dat){while((busy()&0x80)==0x80);RS=1;RW=0;EN=0;P1=dat;EN=1;delay_ms(1);EN=0;}void canshu(){write_cmd(0x38);delay_ms(1);write_cmd(0x01);delay_ms(1);write_cmd(0x06);delay_ms(1);write_cmd(0x0c);delay_ms(1);}/*void xianshi(uchar x,uchar y,uchar *str){uint i=0;if(y==0)write_cmd(0x80|x);if(y==1)write_cmd(0xc0|x);for(i=0;i<16;i++){write_data(str[i]);if(p=='\0')break;}} */void aaa() interrupt 1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;if(++kk==18){miao++;if(miao==10){if(miao1++==5){if(fen++==10){if(fen1++==5){if(shi++==10){if(shi1++==1){shi1=0;shi=0;}shi=0;}fen1=0;}fen=0;}miao1=0;}miao=0;}kk=0;}}void main(){canshu();//xianshi(0,0,p);//xianshi(0,1,p+16);EA=1;ET0=1;TMOD=0x01;TH0=(65535-50000)/256;//如果不准可对其进行修改,比如4000可能更准确TL0=(65535-50000)%256;TR0=1;while(1){write_cmd(0x80|1);write_data(dis2[shi]);write_cmd(0x80|2);write_data(dis2[shi1]);write_cmd(0x80|3);write_data(p[0]);write_cmd(0x80|4);write_data(dis2[fen1]);write_cmd(0x80|5);write_data(dis2[fen]);write_cmd(0x80|6);write_data(p[0]);write_cmd(0x80|7);write_data(dis2[miao]);write_cmd(0x80|8);write_data(dis2[miao1]);}}。

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