一、引言
单片机作为嵌入式系统的微控制器,已经不是新鲜的事情,作为单片机的定时/计数器的使用可以说没有什么难度,但对于需要多个独立计时的事件,单片机的两个时钟显得有点不能满足要求,其实不然,合理的运用内存和标志位可以实现一个定时器充当多个计时时钟的效果,本文以51系列单片机为例,实现一个时钟控制8个独立马达的运行过程中,时间分别统计方法。
二、单片机计数/定时器的基本原理简介
本文以51系列单片机为例介绍定时器的用法,定时/计数器的原理可以分为定时和计数两部分,定时器的原理是通过设定8位或16位的定时器单元,通过给定定时器单元的初值,然后启动定时器,于是定时器开始从初值开始累计,每增加一个数需要特定的时间,这个特定的时间是累加指令的机器周期,是由MCU的晶振的频率决定。对于51系列的单片机机器周期是时钟周期的1/12,也就是晶振频率的12分频。单片机的定时器原理上相当于一个16位的内存单元,通过TMOD可以设定定时/计数器的工作方式。计数值从初值计到全“1”,如果是16位方式则计数单元变成FF,此时并不产生中断,当下一个计数指令加1,导致存储单元溢出,在中断控制寄存器允许的情况下产生中断,通过中断服务程序执行特定的任务。计数器的原理不同之处在于,不是单纯的加指令,而是对外部的脉冲计数,常用来测量脉冲的宽度。
三、时钟对多事件分别计数的具体途径
对于实时性要求不是很高的时间可以通过如下方式实现。在完成基本的定时器工作方式设定以后,也就是设定定时器的计数方式,比如16位或8位,以及计数的初始值,以及启动中断的方式,建议使“SETB TR0”的方式。并且允许中断。在中断服务程序中,开辟存储单元,以8个事件为例,每个事件不一定同时发生,每个事件发生以后以相同的时间延迟,再进行下一步的任务,为了完成定时延时,事件发生的时刻记作A1,A2,A3。。。。。。A10,中段服务程序中首先检查有无这些既定的事件发生,没有则不做任何处理,恢复计数初值后退出中断,相反,假如检测到AX(X=1、2、3。。。。。。)事件发生则给预先选定的对应的内存单元增加1,也就是执行累加运算,比如,
A1~50H; 表示A1对应的存储单元是50h
A2~51H; 表示A2对应的存储单元是51h
A3~52H;
。 。
。 。
。 。
A7 57H; 表示A7对应的存储单元是57h
假如A3事件发生,则对52H内存表示的地址单元增加1,使用的指令是“INC 52H”,可以预先计算事件延时时间与计数单元数值的关系,当对应的数值到了预先设定的值时,执行下一任务。比如开关操作等等,并且恢复初始值以便继续循环控制。这样可以分别对A1到A7,8个任务分别计时,时间可以相同也可以不同,具体的情况可以根据中断程序中寄存器累计的实际值与根据需要所设定的预定值比较而实现。
四、典型应用
也许大家都看到过繁华街道上的拼图式广告牌吧,有十几个或者几十个三棱柱,通过旋转,构成不同的画面,在每幅画面都停留一段时间,这正好是上面介绍的情况,当一个棱柱的某个画面转到特定的角度,比如正对马路的方向,该画面必须停留,等所有与此画面相连接而能拼成完整画面的其他柱面到来,也就是从柱面开始启动到下一次停下来需要所有画面经过相同的时间,然而所有的主面不可能同时启动,可能为了形成某种观赏效果,有意依次启动,或由中间开始启动,逐渐向两边延伸,等等,所有这些事件的转动控制实质就是定时控制,先启动,先停止。最终保证所有的画面构成一幅完整的画面,而且必须是一个平面,我通过这种方法成功地完成了8组和15组转动马达的起停控制,实践证明这种方法简单可行。部分原程序如下所示。基本流程和部分程序代码如下。


以下是定时中断服务程序的全部代码,可以完成对8个事件的时间统计,并在时间满足条件时,调用子程序OUT01,是对外部开关的控制指令。通过这段程序,成功实现了一个定时器对多个事件的自动运行控制(以下程序仅供参考)。
TIME0: CLR TR0
PUSH PSW
PUSH ACC
MOV TL0,#22H;定时100ms重新启动定时器0
MOV TH0,#1CH
LINSHI: MOV A,2AH
CJNE A,#0FFH,DEA
SETB TR0
POP ACC
POP PSW
RETI
DEA: MOV A,2AH
CJNE A,#00H,DE1
MOV A,2CH
CJNE A,#00H,DE1
;SETB TR0
POP ACC
POP PSW
RETI
DE1: JNB 2AH.0,DEAL1
DE2: JNB 2AH.1,DEAL2
DE3: JNB 2AH.2,DEAL3
DE4: JNB 2AH.3,DEAL4I
DE5: JNB 2AH.4,DEAL5I
DE6: JNB 2AH.5,DEAL6I
DE7: JNB 2AH.6,DEAL7I
DE8: JNB 2AH.7,DEAL8I
LJMP FINISH
DEAL4I: LJMP DEAL4
DEAL5I: LJMP DEAL5
DEAL6I: LJMP DEAL6
DEAL7I: LJMP DEAL7
DEAL8I: LJMP DEAL8
DEAL1: JNB 2CH.0,DE2
INC 50H
MOV A,50H
CJNE A,#20,DE2
CLR 2CH.0
LCALL OUT01
mov 50h,#00h
LJMP DE2
DEAL2: JNB 2CH.1,DE3
INC 51H
MOV A,51H
CJNE A,#20,DE3
CLR 2CH.1
LCALL OUT01
MOV 51H,#00H
LJMP DE3
DEAL3: JNB 2CH.2,DE4
INC 52H
MOV A,52H
CJNE A,#20,DE4
CLR 2CH.2
LCALL OUT01
MOV 52H,#00H
LJMP DE4
DEAL4: JNB 2CH.3,DE5I
INC 53H
MOV A,53H
CJNE A,#20,DE5I
CLR 2CH.3
LCALL OUT01
MOV 53H,#00H
DE5I: LJMP DE5
DEAL5: JNB 2CH.4,DE6I
INC 54H
MOV A,54H
CJNE A,#20,DE6I
CLR 2CH.4
MOV 54H,#00H
LCALL OUT01
DE6I: LJMP DE6
DEAL6: JNB 2CH.5,DE7I
INC 55H
MOV A,55H
CJNE A,#20,DE7I
CLR 2CH.5
LCALL OUT01
MOV 55H,#00H
DE7I: LJMP DE7
DEAL7: JNB 2CH.6,DE8I
INC 56H
MOV A,56H
CJNE A,#20,DE8I
CLR 2CH.6
LCALL OUT01
MOV 56H,#00H
DE8I: LJMP DE8
DEAL8: JNB 2CH.7,FINISH
INC 57H
MOV A,57H
CJNE A,#20,FINISH
CLR 2CH.7
LCALL OUT01
MOV 57H,#00H
FINISH: MOV A,2CH
CJNE A,#00H,TUI
SETB TR0;SETB TR0
POP ACC
POP PSW
RETI
TUI: SETB TR0;开定时器
POP ACC
POP PSW
RETI
OUT01: MOV A,2CH
MOV P2,A
CLR G0
LCALL DELAY
CLR CLOCK
LCALL DELAY
SETB CLOCK
NOP
CLR CLOCK
SETB G0
LCALL DELAY
RET
- 单时钟完(5376)
- 现和应用(5145)
相关推荐
实时时钟芯片应用设计时必须要考虑的事项
5224
单端时钟输入未在Virtex 7器件中布线
多点有线语音通信系统
完成倒计时时钟的设计资料分享
计时功能设置系统时钟定时器
CCS5.2 debug 下的clock计时按钮的计时时钟是多少?
IWDG的计时时钟
i.MX6UL基于嵌入式QT实现电容屏多点触控的方法
labview2015,一点对多点已经会了,如何实现多点交互TCP通信啊???求指导
vivado route_design完成,计时失败
使用40K的内部时钟发现计时异常的解决方案
在FPGA内部中使用单时钟FIOF
基于IXP425和DM642的会议电视多点控制单元硬件设计原理和实现方法介绍
基于单片机的时钟计时器系统设计与制作 精选资料分享
如何利用单片机AT89C51完成篮球计时器的计时功能?
如何去完成一个数字电子时钟的设计
如何去实现一种计时十字路***通信号灯及公共时钟的设计
如何去实现一种基于单片机的倒计时牌控制系统设计
差分时钟转单端
干货|多点铠装热电偶在炼化装置温度测量中的应用
怎利用DS1820实现多点测温的技术?
怎样通过专用的硬件时钟芯片来实现硬时钟设计呢
求。怎样实现LABVIEW对plc实时多点采集控制等
用89c51设计时钟控制系统设计
郭天祥 AT24C02计时断点问题
高精度计算机控制多点位移检测系统的实现
10采用半导体传感器的多点温度仪的制作
55FPGA大型设计应用的多时钟设计策略
1100
基于VSTO技术的Office计时器插件的设计与实现
851单片机数字时钟功能需求及设计实现(带闹钟)
127ClkReset—复位一个用来计时的时钟
10095大屏多点触控互动技术你知道多少
5384基于单片机和DS12C887芯片实现高精度倒计时牌的设计
1685
如何利用PIC单片机实现计时秒表功能
5352使用51单片机设计时钟的程序免费下载
0Hisan无缝激光投影 大屏多点触控互动
2042倒计时时钟的设计的设计要求和Protues仿真电路图资料概述
6873
使用51单片机实现时钟计时显示的基本方法详细说明
12如何实现RTC产品的高精度?
5122使用FPGA实现大型设计时的设计策略详细说明
11基于AT89C52单片机和卫星定位技术实现高精度倒计时牌的应用方案
2621
虚拟主参考计时时钟(vPRTC)
6基于FPGA的数字电子时钟设计
42剖析具有挑战性的设计时钟方案
1528
课程设计题九: 倒计时时钟设计
38[HAL] STM32F407ZG HAL库配置过程 时钟系统
3如何去实现一种基于psoc6的时钟系统设计?
562
嵌入式单片机开发的“时钟”是如何实现的?
555
电子发烧友App





评论