(13)--7 STC计数器和定时器原理及实现.ppt
-
资源ID:96428735
资源大小:1.55MB
全文页数:63页
- 资源格式: PPT
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(13)--7 STC计数器和定时器原理及实现.ppt
第7章 STC单片机定时器/计数器原理及实现7.1 定时器/计数器的基本原理定时器的基本原理计数器的基本原理什么是计数?统计事件的发生次数事件:单片机外部引脚上的信号变化,比如高低电平的变化,脉冲等等 定时器/计数器核心部件就是一个做加法运算的计数器,其本质就是对脉冲进行计数。根据信号源的不同分别叫做定时器和计数器。定时器/计数器工作原理信号源定时器:内部系统时钟或者是系统时钟的12分频。计数器:外部引脚信号,脉冲的下降沿或者上升沿将触发计数。系统时钟脉冲外来信号脉冲加1计数器K计数器系统时钟脉冲外来信号脉冲加1计数器K定时器a:计数初值 n:计数器的位数计数初值溢出空间a2n计数初值定时器/计数器的初值a可以通过程序进行设定,设定不同的初值,就可以获得不同的计数次数或定时时间。定时器/计数器的位数n决定了最大的计数次数,即2n8位的定时器/计数器最大计数28=25616位的定时器/计数器最大计数216=65536计数器的计数次数N 1ms 12M/12=计数器的最大空间-计数初值=2n-aSTC单片机定时器/计数器概述5个16位定时器/计数器T0、T1、T2、T3、T4加1计数器15个8位相关控制寄存器TCON、TMOD、AUXR、AUXR2、TL0、TH0等管理定时器/计数器的运行5个外部引脚P3.4(T0)P3.5(T1)P3.1(T2)P0.5(T3)P0.7(T4)接入外部脉冲信号STC单片机定时器/计数器概述n定时器/计数器0有4种工作模式:p模式0(16位自动重新加载模式);p模式1(16位不可重加载模式);p模式2(8位自动重加载模式);p模式3(不可屏蔽中断的16位自动重加载模式)。n定时器/计数器1工作模式有模式0、1、2。n定时器/计数器2、3、4的工作模式固定为模式0p定时器/计数器1、2可以用作串口波特率发生器,工作在可重加载模式定时器/计数器工作模式7.2 STC单片机定时器/计数器的内部结构(以T0为例)SYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)T0定时器的结构与控制外部INT0参与定时器的启停管理TR0中断请求标志位上述控制关系中的各相关位在上述控制关系中的各相关位在TCON和和TMOD2个特殊功能寄存器中。个特殊功能寄存器中。12T0CLKOP3.5ToggleTH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0 GATE、INT0和TR0之间的关系GATEINT0TR0功能000不启动定时器001启动定时器010不启动定时器011启动定时器100不启动定时器101不启动定时器110不启动定时器111启动定时器SYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)T0定时器的结构与控制外部INT0参与定时器的启停管理TR0中断请求标志位上述控制关系中的相关位主要在上述控制关系中的相关位主要在TCON和和TMOD这两个特殊功能寄存器中。这两个特殊功能寄存器中。12T0CLKOP3.5ToggleTH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0SYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)TR0中断请求标志位12T0CLK0P3.5ToggleTH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0计数模式T0定时/计数器的模式0(16位自动重加载模式)RL_TH08bitsRL_TL08bitsSYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)TR0中断请求标志位12T0CLK0P3.5ToggleTH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0定时模式T0定时计数器的模式0(16位自动重加载模式)RL_TH08bitsRL_TL08bitsSYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)T0定时/计数器的模式1(16位不可重加载模式)注意 需要不断重装TH0、TL0的值TR0中断请求标志位12TH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0计数模式隐含的寄存器隐含的寄存器RL_TH0,RL_TL0,不能从,不能从P3.5SYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)TR0中断请求标志位12T0CLK0P3.5ToggleTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0计数模式T0定时/计数器的模式2(8位自动重加载模式)TH08bits=()/()=时的最大定时时间为 SYSclk1TF0中断/查询&1开关控制加1计数器T0(P3.4)C/T=0C/T=1GATEINT0(P3.2)TR0中断请求标志位12T0CLK0P3.5ToggleTH08bitsTL08bitsAUXR.7/T0 x12=1AUXR.7/T0 x12=0计数模式T0模式3(不可屏蔽中断的16位自动重加载模式)RL_TH08bitsRL_TL08bits定时/计数器控制相关寄存器组除了用于控制定时器/计数器T0和T1外,同时也可以设置外部请求中断源等。nSFR字节地址0 x88,复位为“00000000”比特比特B7B7B6B6B5B5B4B4B3B3B2B2B1B1B0B0名字名字TF1TF1TR1TR1TF0TF0TR0TR0IE1IE1IT1IT1IE0IE0IT0IT0定时器/计数器1的溢出中断标志定时器/计数器1运行控制位定时器/计数器0的溢出中断标志定时器/计数器0运行控制位INT1中断请求标志INT1中断源类型选择位INT0中断请求标志INT0中断源类型选择位定时器控制位外部中断控制位TRx=1,允允许计数数TRx=0,禁止禁止计数数定时器/计数器控制寄存器TCON定时器/计数器工作模式寄存器TMODTMOD比特比特B7B7B6B6B5B5B4B4B3B3B2B2B1B1B0B0名字名字GATEGATEC/TC/TM1M1M0M0GATEGATEC/TC/TM1M1M0M0该位用于控制定时器/计数器1该位用于控制定时器/计数器1的工作模式定时器/计数器1模式选择定时器/计数器1模式选择该位用于控制定时器/计数器0该位用于控制定时器/计数器0的工作模式定时器/计数器0模式选择定时器/计数器0模式选择T1T0C/TC/T=1,定定时模式模式C/TC/T=0,计数模式数模式GATE=0,允许TRx直接启停计数器GATE=1,允许INTx参与启停计数器 定时器/计数器0模式选择M1M0工作模式0016位自动重新加载模式。当溢出时,将RL_TH0和RL_TL0的值自动重新加载到TH0和TL0中0116位不可自动重新加载模式。即:需要重新写TH0和TL0寄存器108位自动重新加载模式。当溢出时,将TH0的值自动重新加载到TL0中11不可屏蔽中断的16位自动重装定时器M1M0工作模式0016位自动重新加载模式。当溢出时,将RL_TH1和RL_TL1的值自动重新加载到TH1和TL1中0116位不可自动重新加载模式。即:需要重新写TH1和TL1寄存器108位自动重新加载模式。当溢出时,将TH1的值自动重新加载到TL1中11无效,停止计数定时器/计数器1模式选择定时器初值高8位初值低8位T0TH0(0 x8C)TL0(0 x8A)T1TH1(0 x8D)TL1(0 x8B)T2TH2(0 xD6)TL2(0 xD7)T3TH3(0 xD4)TL3(0 xD5)T4TH4(0 xD2)TL4(0 xD3)定时器/计数器初值寄存器SFR字节地址0 x8E,复位为“00000001”辅助寄存器AUXR比特B7B6B5B4B3B2B1B0名字T0 x12T1x12UART_M0 x6T2RT2_C/TT2x12EXTRAMS1ST2T0、T1速度控制位T2允许控制位T2模式选择位T2速度控制位TXx12=1,系统时钟驱动定时器TXx12=0,系统时钟的12分频可编程时钟输出功能STC15单片机提供了可编程时钟输出功能,分别由5个定时/计数器控制在5个不同引脚输出可编程方波信号。使用可编程时钟输出功能,需要定时/计数器工作在自动重加载模式。可编程时钟输出输出引脚定时器工作方式CLKOUT0P3.5T0方式0方式2方式3CLKOUT1P3.4T1方式0方式2CLKOUT2P3.0T2方式0CLKOUT3P0.4T3方式0CLKOUT4P0.6T4方式0INT_CLKO(AUXR2)比特B7B6B5B4B3B2B1B0名字-EX4EX3EX2-T2CLKOT1CLKOT0CLKO外部中断允许位T2时钟输出控制位T1时钟输出控制位T0时钟输出控制位SFR字节地址0 x8F,复位为“x000 x000”TxCLKO=1,允许时钟输出TxCLKO=0,禁止时钟输出该寄存器用于控制定时器/计数器3和4的工作模式T4和T3控制寄存器T4T3M比特B7B6B5B4B3B2B1B0名字T4RT4_C/TT4x12T4CLKOT3RT3_C/TT3x12T3CLKOT4允许控制位T4的工作模式T4速度控制位T4时钟输出控制位T3允许控制位T3的工作模式T3速度控制位T3时钟输出控制位SFR字节地址0 xD1,复位为“00000000”TxCLKO=1,允许时钟输出TxCLKO=0,禁止时钟输出TxR=1,允许定时器x运行TxR=0,禁止定时器x运行Tx_C/T=1,计数器Tx_C/T=0,定时器Txx12=1,不分频Txx12=0,12分频可编程时钟输出频率的计算以T0为例可编程时钟输出频率为定时/计数器溢出率的二分频信号。ttT:输出方波周期F:输出方波的频率t:定时器的定时时间f:定时器的溢出率模式输出频率模式0定时器01TSYSclk/(65536初值)/212T(SYSclk/12)/(65536初值)/2计数器0T0引脚输入时钟频率/(65536初值)/2模式2定时器01TSYSclk/(256初值)/212T(SYSclk/12)/(256初值)/2计数器0T0引脚输入时钟频率/(256初值)/2T0CLKO输出时钟频率=T0溢出率/2。T0和T1中断允许控制寄存器IE比特B7B6B5B4B3B2B1B0名字EAELVDEADCESET1EX1ET0EX0总中断允许位T1溢出中断允许位T0溢出中断允许位。SFR字节地址0 xA8,复位为“00000000”T2、T3和T4的中断控制寄存器IE2比特B7B6B5B4B3B2B1B0名字-ET4ET3ES4ES3ET2ESP1ES2T4中断允许位T3中断允许位T2中断允许位SFR字节地址0 xAF,复位为“00000000”T0和T1中断优先级控制寄存器IP比特B7B6B5B4B3B2B1B0名字PPCAPLVDPADCPSPT1PX1PT0PX0T1中断优先级控制位。T0中断优先级控制位。SFR字节地址0 xB8,复位为“00000000”7.3定时器/计数器的应用举例定时器/计数器的编程步骤(1)定时计数器初始化设置TMODT0或Tl的工作方式;设置AUXR 确定定时脉冲的分频系数,默认为12分频,与传统8051单片机兼容;计算初值 将其写入TH0、TL0或TH1、TL1;(2)如果定时器采用中断方式,需要对IE赋值,开放中断,必要时,还需对IP操作,确定各中断源的优先等级;(3)设置TCON,置位TR0或TR1,启动T0和Tl开始定时或计数;(4)进行定时或计数结束后的具体工作;(5)为下次定时/计数做准备 清TFx标志位;重装计数初值;若是中断方法,则无需软件清TFx标志位;若是查询方法,需要软件清除TFx标志位;如果定时/计数器工作在自动重装载初值的模式下,则不需要重装计数初值。若是查询方法采用条件判断语句while(!TFx);/x=0或1 TFx=0;若是中断方法中断初始化设置和中断服务程序ETx=1;/开定时x中断,x=0或1EA=1;/开总中断tx_srv()interrupt n /n=1或3 例1:设单片机的fosc=12MHz,通过定时器T1定时方式1在P4.7引脚上生成一个周期2ms的方波信号。IAP15W4K58S4P4.7R1 100VCC【分析】周期为2ms的方波由2个半周期1ms的正负脉冲组成方波输出方法:定时1ms后将端口输出电平取反1ms1ms2ms定时计数器的工作方式1(16位不可重加载模式)1ms定时的计数初值应为:a=216-1000 x 12/12=64536=0 xfc18装入SFR的计数初值:TH1=0 xfc;TL1=0 x18查询方法比特B7B6B5B4B3B2B1B0名字GATEC/TM1M0GATEC/TM1M0作用域与定时器1有关与定时器0有关#include sbit P4_7=P47;main()TMOD=0 x10;/设置T1定时方式1(0001 0000B)TH1=0 xfc;/装载计数初值 TL1=0 x18;TR1=1;/启动T0 while(1)while(!TF1);/等待TF1溢出 P4_7=!P4_7;/定时时间到P4.7取反 TF1=0;/TF1标志清0 TH1=0 xfc;/重装计数初值 TL1=0 x18;中断方法#include sbit P4_7=P47;main()TMOD=0 x10;/T1定时方式1TH1=0 xfc;/装载计数初值TL1=0 x18;EA=1;/开总中断ET1=1;/开T1中断TR1=1;/启动T1while(1);timer0()interrupt 3 /T1中断函数P4_7=!P4_7;/P4.7取反TH1=0 xfc;/重装计数初值TL1=0 x18;#include sbit P4_7=P47;main()TMOD=0 x10;/设置T1定时方式1(0001 0000B)TH1=0 xfc;/装载计数初值 TL1=0 x18;TR1=1;/启动T0 while(1)while(!TF1);/等待TF1溢出 P4_7=!P4_7;/定时时间到P4.7取反 TF1=0;/TF1标志清0 TH1=0 xfc;/重装计数初值 TL1=0 x18;#include sbit P4_7=P47;timer0()interrupt 3 /T1中断函数 P4_7=!P4_7;/P4.7取反 TH1=0 xfc;/重装计数初值 TL1=0 x18;main()TMOD=0 x10;/T1定时方式1 INT1 TH1=0 xfc;/装载计数初值 TL1=0 x18;EA=1;/开总中断 ET1=1;/开T1中断 TR1=1;/启动T1 while(1);中断方法查询方法IAP15W4K58S4P4.7R1 100VCCGNDINT1 P3.3SYSclk1TF1中断/查询&1开关控制加1计数器T1(P3.5)C/T=0C/T=1GATEINT1(P3.3)TR1中断请求标志位12T1CLKOT1CLKOToggleTH18bitsTL18bitsAUXR.7/T1x12=1AUXR.7/T1x12=0计数模式T1定时器的模式0(16位自动重加载模式)RL_TH18bitsRL_TL18bits#include sbit P4_7=P47;timer1()interrupt 3 /T1中断函数 P4_7=!P4_7;/P4.7取反 TH1=0 xfc;/重装计数初值 TL1=0 x18;main()TMOD=0 x90;/T1定时方式1,INT1 TH1=0 xfc;/装载计数初值 TL1=0 x18;EA=1;/开总中断 ET1=1;/开T1中断 TR1=1;/启动T1 while(1);例2:连续输入5个单次脉冲使单片机控制的LED灯状态翻转一次。要求用单片机定时/计数器的计数功能实现。采用T1 方式2 的计数方式,初始值设置为FBH,当输入5 个脉冲时,即溢出标志TF1;通过查询TF1 或中断方式判断TF1 标志位,进而对P1.6 连接的LED 灯进行控制。IAP15W4K58S4VCCGNDP3.5R1 1KR2 10KR3 330P1.6中断方式实现#include#define uchar unsigned char#define uint unsigned char sbit LED=P10;/*.T1初始化子函数.*/void Timer1_init(void)TMOD=0 x60;/设定定时器1模式2,计数功能 TH1=0 xfb;/设置计数器初值(计满溢出值-5)TL1=0 xfb;ET1=1;EA=1 TR1=1;/启动计数 /*T1中断服务子函数*/void Timer1_int(void)interrupt 3 using LED=LED;/*主函数*/void main(void)Timer1_init();/定时T1初始化 while(1);7.4 定时器/计数器的应用举例例3:设单片机的主时钟频率为12MHz,请编写程序,通过定时器T2实现在P4.6引脚输出一周期为3s的矩形波,要求占空比为1:3,观察灯LED10的变化。(在一个周期内,高电平所占的时间叫占空。)3s1s例4:设计定时器T0工作在16位自动重装状态,设计程序使LED7每400ms翻转一次状态,LED8每200ms翻转一次状态,LED9每100ms翻转一次状态,LED10每50ms翻转一次状态。LED10LED9LED8LED7100ms100ms200ms400ms思路:T0定时1ms,溢出时判断溢出的次数,如果溢出次数是400的倍数,LED7翻转,如果溢出次数是200的倍数,LED8翻转,如果溢出次数是100的倍数,LED9翻转,如果溢出次数是50的倍数,LED10翻转