要求计数器1工作在方式2,计数输入时钟的频率为1MHz,输出msp430f149脉冲计数器的频率为2KHz,采用BCD码计数。

浏览:2774次
评论:0条 &时间:
S7-200PLC在铁路供水系统中的应用[摘要]本文介绍了以S7-200PLC为现场终端的无线供水调..查看: 3273|回复: 0
ATmega16定时器/计数器1的要点介绍
ATmega16的T/C1为16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC应用外(可以利用溢出中断和比较匹配中断作定时功能)
BOTTOM 计数器计到0x0000 时即达到BOTTOM
MAX& &&&计数器计到0xFFFF ( 十进制的65535) 时即达到MAX
TOP& &&&计数器计到计数序列的最大值时即达到TOP。
& && &&&TOP 值可以为固定值0x00FF、0x01FF或 0x03FF,或是存储于寄存器 OCR1A或ICR1里的数值,具体有赖于工作模式
------注意MAX和TOP是不同的,在表格[波形产生模式的位描述]可以看到它们的作用
& &分5种工作类型
& &1& &普通模式 WGM1=0
& &&&跟51的普通模式差不多,有TOV1溢出中断标志,发生于MAX(0xFFFF)时
& &&&1 采用内部计数时钟& && &用于 ICP捕捉输入场合---测量脉宽/红外解码
& && && &(捕捉输入功能可以工作在多种模式下,而不单单只是普通模式)
& &&&2 采用外部计数脉冲输入& &用于 计数,测频
& &&&其他的应用,采用其他模式更为方便,不需要像51般费神
& &2 CTC模式 [比较匹配时清零定时器模式] WGM1=4,12
& && &跟51的自动重载模式差不多
& && &1 用于输出50%占空比的方波信号
& && &2 用于产生准确的连续定时信号
& && &WGM1=4时, 最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断标志
& && &WGM1=12时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断标志
& && && && &------如果TOP=MAX,TOP时也会产生TOV1溢出中断标志
& && &注:WGM=15时,也能实现从OC1A输出方波,而且具备双缓冲功能
& && &计算公式: fOCn=fclk_IO/(2*N*(1+TOP))
& && && && && && &&&变量N 代表预分频因子(1、8、64、256、1024),T2多了(32、128)两级。& && &
& &3 快速PWM模式 WGM1=5,6,7,14,15& &
& &&&单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率)
& &&&都有TOV1溢出中断,发生于TOP时[不是MAX,跟普通模式,CTC模式不一样]
& &&&比较匹配后可以产生OCF1x比较匹配中断.
& && & WGM1=5时, 最大值为0x00FF, 8位分辨率
& && & WGM1=6时, 最大值为0x01FF, 9位分辨率
& && & WGM1=7时, 最大值为0x03FF,10位分辨率& &
& && &WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)
& && &WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)
& && &改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值
& &&&注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平
& &&&计算公式:fPWM=fclk_IO/(N*(1+TOP))
& &4 相位修正PWM模式 WGM1=1,2,3,10,11& &
& &&&双斜波计数,用于输出高精度的,相位准确的,对称的PWM信号
& &&&都有TOV1溢出中断,但发生在BOOTOM时
& &&&比较匹配后可以产生OCF1x比较匹配中断.
& && & WGM1=1时, 最大值为0x00FF, 8位分辨率
& && & WGM1=2时, 最大值为0x01FF, 9位分辨率
& && & WGM1=3时, 最大值为0x03FF,10位分辨率& &
& && &WGM1=10时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)
& && &WGM1=11时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)
& &&&改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值
& &&&可以输出0%~100%占空比的PWM信号
& &&&若要在T/C 运行时改变TOP 值,最好用相位与频率修正模式代替相位修正模式。若TOP保持不变,那么这两种工作模式实际没有区别
& &&&计算公式:fPWM=fclk_IO/(2*N*TOP)
& &5 相位与频率修正PWM模式 WGM1=8,9& &
& &&&双斜波计数,用于输出高精度的、相位与频率都准确的PWM波形
& &&&都有TOV1溢出中断,但发生在BOOTOM时
& &&&比较匹配后可以产生OCF1x比较匹配中断.
& && &WGM1=8时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲)
& && &WGM1=9时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波)
& &&&相频修正修正PWM 模式与相位修正PWM 模式的主要区别在于OCR1x 寄存器的更新时间
& &&&改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值
& &&&可以输出0%~100%占空比的PWM信号
& &&&使用固定TOP 值时最好使用ICR1 寄存器定义TOP。这样OCR1A 就可以用于在OC1A输出PWM 波。
& &&&但是,如果PWM 基频不断变化(通过改变TOP值), OCR1A的双缓冲特性使其更适合于这个应用。
& &&&计算公式:fPWM=fclk_IO/(2*N*TOP)&&
T/C 的时钟源
& & T/C 的时钟源可以有多种选择,由CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合
& & 一个16位定时器,在8MHz系统时钟驱动下,可以实现uS级的高速定时和长达8秒的超长定时,这可是标准51的弱点
& & CS12 CS11 CS10 说明
& && &&&0& &&&0& &&&0& &无时钟源& && &(T/C 停止)
& && &&&0& &&&0& &&&1& &clkIO/1& &&&( 无预分频)& &
& && &&&0& &&&1& &&&0& &clkIO/8& &&&( 来自预分频器)
& && &&&0& &&&1& &&&1& &clkIO/64& & ( 来自预分频器)
& && &&&1& &&&0& &&&0& &clkIO/256& &( 来自预分频器)& &
& && &&&1& &&&0& &&&1& &clkIO/1024 ( 来自预分频器)
& && &&&1& &&&1& &&&0& &外部T1 引脚,下降沿驱动
& && &&&1& &&&1& &&&1& &外部T1 引脚,上升沿驱动
& &分频器复位
& && && &在高预分频应用时,通过复位预分频器来同步T/C 与程序运行,可以减少误差。
& & 但是必须注意另一个T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的T/C。
& &外部时钟源
& & 由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于fclk_IO/2.5。
& & 外部时钟源不送入预分频器
& & 选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。
输入捕捉单元
& & T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。
& & 外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。
& & 时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。
& & 输入捕捉单元可以工作在多种工作模式下
& & (使用ICR1定义TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。)
& & 在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值
& & 当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:
& & 16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。
& & 如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。
& & 中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑&1” 清零。
& & 注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果
& & 除去使用ICR1定义TOP的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。
& & (其实就是永远使能??)
& & 使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟.
& & 噪声抑制器使用的是系统时钟,因而不受预分频器的影响
& & 使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器
& & 如果处理器在下一次事件出现之前没有读取ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。
& & 测量外部信号的占空比时要求每次捕捉后都要改变触发沿。
& & 因此读取ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写&1”)。
& & 若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。
输出比较单元
& & 16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。
& & 然后OCF1x 在下一个定时器时钟置位。
& & 如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。
& & (就是说输出比较可以工作在所有工作模式下,但PWM模式下更好用,功能更强)
& & 输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。
& & TOP 值还用来定义通过波形发生器产生的波形的周期。
& & 由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行
& & 这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。
& &强制输出比较(FOC)
& & 工作于非PWM 模式时,可以通过对强制输出比较位FOC1x 写”1” 的方式来产生比较匹配。
& & 强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器,
& & 但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。
比较匹配输出单元
& & 比较匹配模式控制位COM1x1:0 具有双重功能。
& & 1 波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态;
& & 2 COM1x1:0 还控制OC1x 引脚输出的来源。
& & 只要COM1x1:0 不全为零,波形发生器的输出比较功能就会重载OC1x 的通用I/O 口功能。
& & 但是OC1x 引脚的方向仍旧受控于数据方向寄存器 (DDR)。
& & 从OC1x 引脚输出有效信号之前必须通过数据方向寄存器的DDR_OC1x 将此引脚设置为输出。
& & 波形发生器利用COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下有所区别。
& & 对于所有的模式,设置COM1x1:0=0 表明比较匹配发生时波形发生器不会操作OC1x寄存器
访问16位寄存器
& & 写16 位寄存器时,应先写入该寄存器的高位字节.
& && & k=0x1234;
& && & TCNT1H=(unsigned char)(k&&8);
& && & TCNT1L=(unsigned char)
& & 而读16 位寄存器时应先读取该寄存器的低位字节.
& && &&&k=TCNT1L;
& && &&&k+=(unsigned int)(TCNT1H&&8);
& & 使用“C” 语言时,编译器会自动处理16位操作.
& && & k=0x1234;
& && & TCNT1=k;
& && & k=TCNT1;
这里举例 如何用16位定时器T1实现高精度1秒连续定时,精准度跟所用晶振一样
T1 CTC模式,8MHz外部晶振,定时1秒的话,选256分频,刚好整步距,非常准确TOP=.125*256)-1=A11。
作连续定时,必用CTC/PWM模式作,没有累积误差,稳定度跟时钟是一样,手动重装受中断影响是很难达到的。
不过定时步距和最长定时间取决于时钟,分频系数和模式。
对于非整步距的定时时间要求,就会存在小于一个步距的偏差。
例如 T1,CTC模式,8MHz
fOCn=fclk_IO/(2*N*(1+TOP))
定时时间 T= 0.125uS*N*(1+TOP)
分频系数& && &定时步距& &&&最长定时时间
& & 1(无分频)& & 0.125uS& && & 8192us& && &8毫秒
& & 8& && && && && & 1uS& && &65536us& &&&65毫秒
& &64& && && && && & 8uS& && &&&524ms& & 0.5秒
256& && && && && &32uS& && & 2097ms& && &3秒
1024& && && && &&&128uS& && & 8388ms& & 超8秒了
定时1秒的话,选256分频,刚好整步距,非常准确,TOP=.125*256)-1=A11。
-----------当然了,时钟必须是高精度的晶振之类,不要用内部RC振荡器来瞎搞。
由于精度取决于晶振的精度,配合软件做RTC实时时钟是完全可行的。
用+/-20PPM的晶振,跑一个月误差1分钟 [60*60*24*30=2592000秒*20ppm=52秒]。
作RTC用专门为32.768KHz时钟优化的T2定时器更合适,这里只是举例T1的实现方法
如果用+/-2.5PPM的DS32KHz(MAXIM的业界最准确的32.768KHz单片稳补时钟芯片TXCO)做时钟源,超准确
指标: -40~+85度全温度范围,年误差&4分钟,0~40度温度范围内+/-1PPM,年误差&1分钟
Powered by现在位置:
用定时器实现500HZ的方波信号 详细内容
用定时器实现500HZ的方波信号
&&& 在测量控制系统中,常常要求有一些实时时钟,以实现定时控制、定时测量或延时动作,也往往要求有计数器能对外部事件计数,如测电机转速、频率、工件个数等。广泛用于个人家庭、学校、工厂等场所,是人们日常生活、工作中不可缺少的必需品。
实现定时,有软件、数字电路和可编程定时器3种主要方法。可编程定时计数器是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又能很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时要求,因而在嵌入式系统的设计和应用中得到广泛的应用。
单片计算机即单片微型计算机,是集CPU、RAM、ROM、定时/计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产品和工业自动化。而51单片机是各单片机中最为典型和最有代表性的一种。
关键词:定时器,计数初值,中断,定时,溢出,方波信号
&&& 单片机的出现是计算机发展史上的一个重要里程碑,它以体积小、功能全、性价比高等诸多优点而独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。由于单片机功能的飞速发展,它的应用范围日益广泛,已远远超出了计算机科学的领域。小到玩具、信用卡,大到航天器、机器人,从实现数据采集、过程控制、模糊控制等智能系统到人类的日常生活,到处都离不开单片机。其应用领域也越来越广泛。
&&& 在测控系统中,单片机可以用于构成各种工业控制系统、自适应控制系统、数据采集系统等。例如,工业上的锅炉控制、电机控制、车辆检测系统、水闸自动控制、数控机床及军事上的雷达、导弹系统等。
&&& 在智能化仪器仪表中,单片机应用于仪器仪表设备中促使仪器仪表向数字化、智能化、多功能化和综合化等方向发展。单片机的软件编程技术使长期以来测量仪表中的误差修正、线性化的处理等难题迎刃而解。
&&& 在机电一体化中,单片机与传统的机械产品结合使传统的机械产品结构简化,控制走向智能化,构成新一代的机电一体化产品。这是机械工业发展的方向。
在智能接口中,计算机系统,特别是较大型的工业测控系统中采用单片机进行接口的控制管理,单片机与主机并行工作,可大大提高系统的运行速度。例如,在大型数据采集系统中,用单片机对模/数转换接口进行控制不仅可提高采集速度,还可以对数据进行预处理。如数字滤波、误差修正、线性化处理等。
&&& 在人类生活中,单片机由于其价格低廉、体积小巧,被广泛应用在人类生活的诸多场合,如洗衣机、电冰箱、空调器、电饭煲、视听音响设备、大屏幕显示系统、电子玩具、信用卡、楼宇防盗系统等。单片机将使人类的生活更加方便舒适,丰富多彩。
&&& 单片机的学习和研究是对微机系统学习和研究的简捷途径。
2 主要元件简介 2.1 AT89S52&
AT89S52主要性能 &&& 与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
AT89S52功能特性描述 & &&&At89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,AT89S52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash AT89S52。
AT89S52管脚图
图 2-1 &AT89S52管脚图
3 定时器 3.1 定时器的构成 3.1.1 定时方法
软件延时通过执行循环而获得延时,短时间延时;
硬件延时由硬件电路实现延时,长时间延时;
可编程定时通过对系统时钟脉冲的计数而获得延时。3.1.2 MCS-51单片机的定时器
16位定时器T0、T1,分别由4个8位计数器组成,均属SFR寄存器。
T0由TH0、TL0构成,字节地址为8CH、8AH;T1由TH1、TL1构成,字节地址为8DH、8BH。3.1.3 MCS-51单片机定时器的功能
单片机定时器的功能,归根结底是计数器。
(1)定时功能
对片内机器周期进行计数,即每个机器周期产生一个计数脉冲,计数加1。
(2)计数功能
对片外从T0(P3.4)、T1(P3.5)引脚输入的外部脉冲信号进行计数,下降沿计数加1。3.2 定时器的控制寄存器
与定时器有关的控制寄存器有3个:
(1)定时器控制寄存器TCON(88H)
SFR寄存器TCON既参与定时控制又参与中断控制,有关定时控制的有4位,
表示如下:
TF1/TF0:当T1/T0的计数器计数溢出时,该位置“1”。TR1/TR0:T1/T0运行控制位。软件将其置“1”时,启动T1/T0工作。
(2)设定定时器工作方式寄存器TMOD(89H)
SFR寄存器TMOD用于2个定时器/计数器T1/T0的工作方式设定,各位的含义表示如下:
&&&&&&&&&&&&&&&&&&&&&&
GATE:门控位,定义T1/T0的启动方式,逻辑如图:
C/ &:定时/计数功能选择位。为“0”,作定时器用;为“1”,作计数器用。
M1M0:工作方式选择位。
00&& 方式0& &&& 13位计数器&&& &&&
01&& 方式1&& && 16位计数器
10&& 方式2&&& & 初值自动重装8位计数器
11&& 方式3&&& &&2个8位计数器,仅适用于T0
(3)中断允许控制寄存器IE(A8H)
IE在特殊功能寄存器中,字节地址A8H,位地址分别是A8H~AFH。3.3 定时器的工作方式 3.3.1 工作方式0&&&&&
M1M0=00 ――13位计数器
由TH0的全部8位和TL0的低5位构成,如下页图。当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,TF0置“1”。
(2)TMOD值:
作定时器:TMOD= 00=00H
作计数器:TMOD= 00=04H
(3)计数初值
最大计数值为213=8192
△T=(213 ― 计数初值)× 机器周期(12/fosc)计数初值=213 ―欲计数脉冲数=213 ―△T/ 机器周期3.3.2 工作方式1
&&& M1M0=01――16位计数器,方式1时的电路逻辑结构如图所示作定时器,TMOD=01H;
作计数器,TMOD=05H;
△T=(216 ― 计数初值)× 机器周期(12/fosc),计数初值=216 ―欲计数脉冲数=216 ―△T/ 机器周期。
例如:定时500us,fosc=6MHz时,
初值=216―500/2=286=FF 06H那么:TH0=FFH,TL0=06H &3.3.3 工作方式2
&&& M1M0=10――自动复位的8位计数器
&&& 以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。逻辑结构,如图所示:
3.3.4 工作方式3
&& &M1M0=11――2个8 位计数器(仅限于T0)
在T0方式3下,T0、T1的设置和使用是不同的。
(1)T0方式3
TL0:使用T0原有控制资源,功能与方式0、1相同。
TH0:借用T1的TR1、TF1,只能对片内机器周期脉冲计数,作8位定时器。
T0方式3时的T0、T1电路逻辑结构,如图所示
T0方式3时的T0初值计算完全同方式 2
(2)T0方式3下的T1
T0方式3时 ,T1仍然可工作于方式0至方式2,如上页图所示。C/ 控制位仍可使T1工作在定时器或计数器方式,只是由于其TR1、TF1被T0的TH0占用,因而没有计数溢出标志可供使用,计数溢出时只能将输出结果送至串行口,即用作串行口波特率发生器。
T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更为合适。3.4 定时器的编程举例 3.4.1 定时器初值的计算
在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的公式:
T=(M-TC)T计数
&上式也可写成:TC=M-T/ T计数,式中,M为模值,和定时器的工作方式有关;T计数是单片机振荡周期TCLK的12倍;TC为定时器的定时初值。 3.4.2 定时器的除数举例
设置T1为定时工作方式,定时50ms,选操作模式1,允许中断,软启动;T0为计数方式,对外部脉冲进行计数10次,硬启动,禁止中断,选操作模式2。编写其初始化程序,设fosc=6MHz。
T0设为计数方式模式2,硬启动,故计数初值X0为:X0=256-10=246=F6H
T1设为定时方式,定时50ms,模式1,软启动,其计数初值X1为:
X1=65536-(6×50×103)/12
TMOD: 0& 0& 0& 1& 1& 1& 1& 0&&& 即1EH
初始化程序如下:
MOV& TMOD,#1EH &;写工作模式字
MOV& TH0,#0F6H&& &;定时器0计数初值
MOV& TL0,#0F6H
MOV& TH1,#9EH &&&&&;定时器1计数初值
MOV& TL1,#58H
MOV& IE,#B;CPU、T1开中断
SETB& TR0;启动T0,但要等到待 =1时方
&&&&&&&&&&& 可真正启动
SETB& TR1;启动T13.4.3 定时器的应用举例
(1)模式0的应用
模式0是13位定时器操作模式。16位的寄存器只用了高8位(THi)和低5位(TLi的D4~D0位),TLi的高3位未用。
例: 选用T0操作模式0,用于定时,由P1.2输出周期为1ms的方波,设晶振fosc=6MHz。采用查询方式编程。
P1.2输出周期为1ms宽的方波,只要每隔500μs取反一次即可得到1ms宽的方波。因此,可以选用T0定时500μs。设X为时间初值
X=213-fosc×t/12=0/12=H
由于作13位计数器使用,TL0的高3位未用,应填0,TH0占高8位,所以13位的二进制表示值应为:
X0=0110B,TL0=06H,只用到5位,TH0=F8H
根据题意设置模式控制字TMOD:H
由于上电复位后,TMOD各位均为0,所以此字可以不用写入。
源程序如下:
&&& &ORG& 8000H
&&& &MOV& TL0,#06H &&&;T0的计数初值X0
&&& &MOV& TH0,#0F8H
&&&& SETB& TR0;启动T0
LP1:JBC& TF0,LP2&&&&&& ;查询T0计数溢出否,同时清除TF0
AJMP& LP1& &&&&&&&&;没有溢出等待
LP2: MOV& TL0,#06H&& ;溢出重置计数初值
MOV& TH0,#0F8H
CPL& P1.2& &&&&&&&&&;输出取反
SJMP& LP1& &&&&&&&&;重复循环
(2)模式1的应用
操作模式1是16位定时/计数器,其结构和工作过程几乎与模式0完全相同,唯一的区别是计数器的长度为16位。
其定时时间t为:t=(216-X) ×12/fosc
其计数初值X为:X=216-t×fosc/12
例6-4 用定时器1产生一个50Hz的方波,由P1.2输出,仍用程序查询方式,fosc=12MHz。
解:方波周期T=1/50=0.02s=20ms,用T1定10ms,计数初值X1:
X1=216-12×10×536-1=D8F0H
源程序如下:
&& &MOV& TMOD,#10H &&&;T1模式1,定时
&& &SETB& TR1 &&&&&&&&&&&&&;启动T1
LOOP:MOV& TH1,#0D8H &;T1计数初值
&& &&MOV& TL1,#0F0H
&&&& JNB& TF1,$& &&&&&&&&;T1没有溢出等待
&&& &CLR& TF1& &&&&&&&&&&&&;产生溢出清标志位
&& &&CPL& P1.2 &&&&&&&&&&&&&&&&&&&&;P1.2取反输出
&&& &SJMP& LOOP &&&&&&&&&&;循环
(3)模式2的应用
当模式0、模式1用于循环重复定时计数时,每次计数满溢出,寄存器全部为0,第二次计数还得重新装入计数初值。这样编程麻烦,而且影响定时时间精度,而模式2解决了这种缺陷。
模式2是能自动重装计数初值的8位计数器。模式2中把16位的计数器拆成两个8位计数器,低8位作计数器用,高8位用以保存计数初值。当低8位计数产生溢出时,将TF0或TF1位置1,同时又将保存在高8位的计数初值重新自动装入低8位计数器中,又继续计数,循环往复不止。
其计数初值X为:X=28-计数值=28-t×fosc/12
式中t为定时时间。初始化编程时,THi和Tli(i=0,1)都装入此X值。
例:用定时器1,模式2计数,要求每计满100次,将P1.2端取反。
解:T1工作于计数方式,外部计数脉冲由T1(P3.5)引脚引入,每来一个由1至0的跳变,计数器加1,由程序查询TF1的状态。
计数初值 &X1=28-100=156=9CH
TH1=TL1=9CH,TMOD=60H(计数方式,模式2)
源程序如下:
&& &MOV& TMOD,#60H&& &&&&&&;T1模式2,计数方式
&&& MOV& TH1,#9CH&& &&&&&&&&;T1计数初值
&&& MOV& TL1,#9CH
&&& SETB& TR1&&&& &&&&&&&&&&&&&&;启动T1
LOOP:JBC& TF1,REP&&&& &&&&&&&;TF1=1转
& &&SJMP& LOOP& &&&&&&&&&&&&&&&&;否则等待
REP:CPL& P1.2& &&&&&&&&&&&&&&&&&; P1.2取反输出
& &&&&SJMP& LOOP
本例中若要求计数值较大时(>256),还可以用定时器/计数器T2的自动重装载工作方式。此时方式控制字T2CON 中置RCLK=0、TCLK=0、CP/RL2=0、C/T2=1、TR2=1,加法计数器对T2(P1.0)引脚上的外部脉冲数。相关程序与上述程序相似,读者可自行练习。
(4)模式3的应用
例:某用户系统中已使用了2个外部中断,并置定时器T1工作于模式2,作串行口波特率发生器用。现要求再增加一个外部中断源并由P1.2输出一个5kHz的方波。fosc=12MHz。
解:为了不增加其它硬件开销,可设置T0工作于模式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚由1至0的负跳变时,TL0立即产生溢出,申请中断,相当于边沿触发的外部中断源。
T0模式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.0输出的5kHz方波信号。
TL0的计数初值为FFH;TH0的计数初值X为:
因为P1.0的方波频率为5kHz,故周期T=1/5kHz=0.2ms=200μs
所以用TH0定时100μs,X=256-100×12/12=156
程序如下:
MOV& TMOD ,#27H& &&&&&&;T0模式3,计数;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& T1模式2,定时
MOV& TL0,#0FFH&&&&&&&&& ;TL0计数初值
MOV& TH0,#156 &&&&&&&&&&&;TH0计数初值
MOV& TH1,#data&&& &&&&&&&&;data是根据波特率要求设置的常数
MOV&& TL1,#data
MOV& TCON,#55H &&&&&&&&&;外部中断0、1边沿触发,启动T0、T1
MOV& IE,#9FH&&& &&&&&&&&&;开放全部中断
TL0溢出中断服务程序(由00BH转来);
TL0INT:MOV& TH0,#156&&& ;TH0重赋初值
CPL& P1.2& &&&&&&&&&;P1.2取反输出
4 方案设计
计算89S52定时器0初值
要输出500HZ方波信号,其周期为2ms,所以每1毫秒取反。采用定时器方式1,计算得出初值为FC18。
(1)设计方案流程图为:
图4-1 程序流程图
(2)设计方案源程序代码为:
MAIN:MOV TMOD,#01H&&&& ;T0工作于定时方式1
MOV TH0,#0FCH
MOV TL0,#18H&&&&&&&&&&&& ;定时1ms
SETB TR0&& &&&&&&&&&&&&&&&;启动T0工作
NEXT:JBC TF0,AGAI&&&&&&& ;1ms到即TF0=1转AGAI,并清TF0
SJMP NEXT&&&&&&&&&&&&&&& ;未到1ms再查TF0
AGAI:CPL P1.0&&&&&&&&&&&& ;取反P1.0
(3)输出500HZ方波信号电路图
图4-2 500HZ方波信号电路图
(4)500HZ方波信号图
图4-3 500HZ方波信号图
5 系统调试和脱机运行
&&& 完成了硬件设计、制作和软件编写之后,必须进行系统调试。系统调试包括硬件调试和软件调试两个部分。不过作为一个计算机系统,其运行时软硬件相结合的,也就是软件和硬件是分不开的,硬件的调试常常需要利用调试软件,而软件的调试也可能需要通过对硬件的控制和测试来进行。
硬件调试:硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。用万用表逐步按照电路原理图检查电路板中所有元件的各个引脚,尤其是各器件电源的连接是否正确。检查数据总线、地址总线和控制总线连接是否存在、应该短路而断路或者应该断路而短路等不正确的现象。检查各个开关按键是否能正常开关,是否连接正确,各限流电阻是否短路等。检查示波器连接线路。
软件调试:软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现一些硬件故障。程序的调试应该一个模块一个模块的进行,否则程序太长根本无法找出程序无法运行的原因。首先应单独调试各个功能子程序,检查程序是否能够实现预期的目的,接口电路的控制是否正常等,最后逐步将各个子程序连接起来总调。联调需要注意的是,各模块间能否正确传递参数,特别要注意各个子程序的现场保护和恢复。6 心得体会
&& 单片机课程设计过程曲折可谓一语难尽。在此期间我曾一度热情高涨,我也曾失落过。从开始时满盛激情到退缩,再到努力,再到成功的复杂心情,点点滴滴无不令我回味无穷。&&& 生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过课设,我才真正领略到“艰苦奋斗”这一词的真正含义。我想说,课设确实有些辛苦,特别是单片机课设。但苦中也有乐,而且此次单片机课设虽说是一次个人任务,但在不理解和不会的问题多靠老师、同学帮忙才得以解决。我们相互帮助,大学里几年的相处还赶不上这几天的配合,我感觉我和同学们之间的距离更加近了。复杂的线路设计,复杂的连线,复杂的焊接,复杂的文字叙述,让我一次又一次头痛,一次又一次想放弃。是老师和同学的帮助,让我更有信心和毅力继续做下去,特别是在武汉的高温酷暑下。我认为无论干什么,只要人生活的有意义就可以。社会需要我们,我们也可以为社会而工作。
我这次的课设题目是用定时器实现一个500HZ的方波信号,这是一个极其有乐趣和意义的课题。其乐趣在于定时器和示波器本身对我们有一种吸引力,而它的意义便在其中体现出来了,我们从理论走到了实践。不再是看着电视里或者讲台上的演示了,这次是我们自己做出成果,其中的感觉不言而喻。对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!
感谢曾刚老师和陈德军老师,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。
感谢夏显成和王涛等同学对我的帮助和指点。没有他们的帮助和提供资料,对于我一个对理论知识不牢的人来说要想在短短的几天时间里学习到并完成课程设计是几乎不可能的事情。
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!感谢所有教育过我的老师!你们传授给我的专业知识是我不断成长的源泉,也是完成本论文的基础。
[1]李群芳,张士军 单片微型计算机与接口技术 北京:电子工业出版社,2005
[2]谢瑞和 串行技术大全 北京:清华大学出版社,2003
[3]高峰 单片微机应用系统设计及实用技术 北京:机械工业出版社,2004
[4]谢自美 电子线路设计实验测试 武汉:华中科技大学出版社,2000
[5]孙育才 MCS-51系列单片微型计算机及应用 南京:东南大学出版社,1997&
没有相关文章
推 荐 阅 读
阅 读 排 行
专 题 列 表
Corporation </small Inc. 网站备案号:鄂ICP备号-2 
基于架构  

我要回帖

更多关于 单片机脉冲计数器 的文章

 

随机推荐