51单片机定时器/计数器
定时(定时控制、测量、延时。。。)和计数(对外部事件统计数目)。
软件定时|数字电路定时|可编程定时/计数器
它们都是怎么实现的呢?
额! 你猜
。。。
软件定时
机器执行一个程序,这个程序没有其他用处,只是为了延时!以达到定时的目的。
数字电路硬件定时
555之类的器件,完成定时
可编程定时/计数器
硬件定时,但是是可编程的,可以通过软件初始化设置定时的要求。
1.结构
定时/计数器实质上是一个加一计数器,可以工作在两种方式里,实际上都是对脉冲计数,只是说脉冲的来源不一样而已!
1. 定时
1. 加一计数。
2. 脉冲来自振荡器的12分频后的脉冲(Fosc/12),简单的说就是对机器周期计数。
3. 需要预设定时初值(TH、TL)。
4. 初值设置需要是补码,加一计数(补码的加,原值的减)加到溢出(原值减到0了)则发生溢出中断。
2. 计数
1. 加一计数。
2. 需要预设计数初值(TH、TL)。
2. 脉冲来源于T0或T1引脚。
2. 上图的控制开关合上(控制=1)计数器对外部脉冲产生的下降沿开始计数
3. 知道计满,初始值变为0,产生溢出中断。
4. 计数脉冲的最高频率不可超过Fosc/24
2.定时计数器有关寄存器
中断我们需要考虑几个方面
中断打开没
怎么触发中断
中断的启停
多个中断触发后如何响应
(1)TMOD 定时计数方式寄存器(地址89h)
GATE:
1. 门控信号 ,GATE=0,TRx=1 自启动的方式
2. GATE=1,TRx=1,INTx=1 启动定时/计数器工作(一种以INTx作为外界启动条件的方式)
C/-T:
定时、计数选择 —– 1定时0计数
M1M0:
定时计数器的四种工作方式选择
(2)TCON 中断的请求与外部中断的选择(地址88h)
3.定时计数器工作方式
方式0:
定时器/计数器T0工作在方式0时,16位计数器只用了13位,即TH0的高8位和TL0的低5位,组成一个13位定时器/计数器(最大计数值8192)。
方式1:
定时器T0工作方式1与工作方式0类同,差别在于其中的计数器的位数。工作方式0以13位计数器参与计数,工作方式1则以16位计数器参与计数(最大计数值65536)。
工作方式1是16位计数器。这是工作方式1与工作方式0在计数方式时唯一差别。
方式2:
自动再装入预置数的工作方式。此时M1M0=10。
自动重装THx存放初值(预置数) ,TLx用于计数,计数完毕则自动将THx的值赋给TLx。(除了重装初值和最大计数值以外,其他同方式0)
方式3:(只适用于T0)
这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及、溢出标记了,从何而来呢?TL0还是用原来的T0的标记,而TH0则借用T1的标记。
一般情况下,只有在T1以工作方式2运行(当波特率发生器用)时,才让T0工作于方式3。
3.定时计数器计数初值和初始化
计数初值的计算:
计数方式:初值C = 模 - X(要计算的脉冲个数)
定时方式:初值C = [t /MC]补 = 模 - [t /MC](t定时的时间、MC机器周期,MC = 12/fosc)
计数初值示例:
方式0:初值C = (64H)补 = 2000H - 64H = 1F9CH
方式1: 初值C = (64H)补 = 10000H - 64H = FF9CH
方式2: 初值C = (64H)补 = 100H - 64H = 9CH
初始化:
计算初值
TMOD设置
写入计数初值THx、TLx
启动定时器,TRx = 1
EA = 1(打开中断总开关)
ETx = 1 允许中断
编写中断子程序
#include unsigned char i=0; int0() interrupt 1//定时器0 中断函数 { i++;//计算中断次数 } main()//主函数 { //计算初值 TMOD = 0x01;//TMOD设置 TH0 = 0x3c; TL0 = 0xb0;//初值 TR0 = 1//启动定时器,TRx = 1 EA=1;//中断总开关 ET0=1//定时器0 允许中断 } ORG 0000H AJMP MAIN ORG 000bH ;中断子程序入口 AJMP COUNTING ;中断函数名 ORG 0030H MAIN: MOV TMOD,#01H ;TMOD设置 MOV TH0 ,#3cH; TL0 = #0b0H; ;初值 SETB TR0 ;启动定时器,TRx = 1 SETB EA ;中断总开关 SETB ET0 ;定时器0 允许中断 HERE:AJMP HERE COUNTING: INC A ;a++ RETI END
上一篇:C51单片机中断实验
下一篇:C51单片机————中断系统
推荐阅读最新更新时间:2024-11-13 10:56
推荐帖子
- 信号、系统和变换 原书第5版
- 本书清晰而全面地叙述了关于信号、系统和变换的理论与应用,介绍了信号与系统的数学背景,主要包括:傅里叶变换、傅里叶级数、拉普拉斯变换、离散时间傅里叶变换与离散傅里叶变换,z变换。本版在课程体系的组织上为读者不同的侧重需求提供了极大的灵活性。MATLAB示例贯穿于书中各章,同时也将MATLAB学生版本的先进特征体现于例题和习题的应用之中。https://download.eeworld.com.cn/detail/sigma/613133信号、系统和变换原书第5版这书不错啊!感谢楼主
- arui1999 下载中心专版
- HelperA64核心板设计之第一版
- 我的核心板设计思想包括以下几大原则:1、高速集成,难度大一点的必备电路要放在核心板上(比如:DDR)2、极好的稳定性和抗干扰性能3、接口定义合理,使底板极易走线4、布局美观,整板发热均匀5、PCB设计合理,生产、维修容易HelperA64第一版接口定义如下图:此图是我花比较大的价钱聘请的高级硬件工程师设计的,最后因为做出这样的核心板接口,被我给开了。仔细看各线序定义,根本就不是按通用外设的需求定义的,比如,hdmi,线序与标准的hdmi接口彻底相反,这样底板走两层板出来的hdmi
- spacexplorer 嵌入式系统
- 【SensorTile】使用软件I2C驱动传感器
- 前一段时间,已经成功移植MicroPython到了SensorTile上,各种指令可以正常使用了,然后就开始研究驱动传感器的问题。但是遇到一个比较严重的问题,就是MicroPython不支持3-wire(半双工)模式的SPI,而SensorTile上就是使用了这种方式,这样就不能直接使用硬件SPI接口了。开始设想先设置标准SPI接口,然后利用stm库,通过设置SPI2的寄存器,将SPI切换到3-wire模式。但是经过一周左右的实验,发现这种方法目前行不通,SPI上无法读取到任何数据。看来最
- dcexpert MEMS传感器
- 提高PLC 控制系统的可靠性
- :从硬件电路、外围器件及软件编程等方面详细论述了提高注聚装置控制系统可靠性、稳定性、安全性的几种解决措施和实现方法,对PLC控制系统具有推广应用价值。提高PLC控制系统的可靠性
- frozenviolet 工控电子
- FPGA处理音频问题
- 本人最近用FPGA对UDA1341进行AD采样,请问有人用过UDA1341吗,该芯片的AD和DA可以同时使用吗,另外芯片的L3接口对控制AD和DA采样应该没什么作用吧,AD和DA只要对其sysclk,bclk,ws,的时序操作对了就可以了吧?FPGA处理音频问题怎么没用钱了呢?也在研究中
- kready EE_FPGA学习乐园
- 液晶经典故障修复全程纪实
- 本帖最后由jameswangsynnex于2015-3-320:02编辑液晶显示器越来越受到用户的欢迎,全球几大显示器生产厂商也将战略眼球转向了液晶显示器,但是和CRT显示器一样,液晶显示器的故障率照样也是存在的。很多用户并没有了解液晶显示器的内部结构,一出现问题只能求助于售后服务公司,如果是过了保修期的话还得付上一笔不小的维修费用。下面的一篇文章是液晶显示器中比较经典的一个故障,希望在为大家解决这类故障之余,也能给大家普及一下液晶显示器的内部结构知识。 TCLML-5
- ruijia 移动便携
设计资源 培训 开发板 精华推荐
- LT6656ACS6-2.048、2.048V 微控制器电压基准和稳压器的典型应用
- USB Type-C 和 USB PD 控制器电源开关/高速多路复用器参考设计
- ESP8266_无线遥控笔电源端 3.0V
- NV890201MWTXGEVB:高频降压转换器评估板
- DC052A,使用 LTC1410、12 位、高速、1.25 Msps 模数转换器的演示板
- 使用 Diodes Incorporated 的 PAM2321BNFADJ 的参考设计
- LT3663IMS8E-5、3.3V 降压转换器的典型应用
- 电动螺丝刀1.1
- ip6505 多路快充 模块
- 102990824, Wio Tracker - GPS, BT3.0, GSM, Arduino 兼容开发板