STC89C52单片机定时器2的使用讲解学习
STC89C52单片机定时器2详细整理
STC89C52单片机定时器2详细整理51单片机是我自学的第一款单片机,那时正好是过春节,想起那个寒假,外面下着大雪,有时还会传来一两声爆竹的炸响,而我一个人在房间里摆弄单片机开发板,反复调试程序的时光,真是难忘!我自认为这款单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。
定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。
所以掌握好定时器2还是非常有必要的。
以下是在我完全搞明白它的原理和用法的基础上整理的一篇小文章。
读起来,好像Datasheet一样!请原谅,希望没有辜负你的点击!定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位可将其设置为定时器或是计数器;通过设置T2CON中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获、自动重新装载(递增或是递减计数)和波特率发生器。
知识点一、定时器2的控制寄存器T2CON(可按位寻址)*D7位--TF2:定时器2溢出标志位。
用于请求中断(必须由软件清0)D6位--EXF2:定时器外部标志位。
当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0)D5位--RCLK:接受时钟标志位。
默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供。
D4位--TCLK:发送时钟标志位。
原理同上D3位--EXEN2:定时器2的外部使能标志位。
定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装D2位--TR2:定时器2启动/停止控制位。
D1位--C/T2:定时器2的定时器/计数器选择位(在reg52头文件中定义为了C_T2,请注意,下面相同)D0位--CP/RL2:捕获/重装标志位。
知识点二定时器2的模式控制寄存器T2MOD(不可按位寻址)该寄存器在单片机的头文件reg2.h中可能没有被定义,自己定义吧!D1位—T2OE:定时器2输出使能位D0位—DCEN:向下计数使能位知识点三:定时器2的三种模式**1、捕获模式*在'CP/RL2=1'&&'TR2=1'时进入捕获模式。
STC89S52单片机定时器T2捕获
/****************************************************************************** ***************说明:定时器2捕获功能的使用。
由于只有三个三个数码管,帮只显示捕获的低八位,经验证,当P1.1(T2EX)用定时器0控制发出一个下降沿,用T2的P1^1;引脚进行捕获,从而得到高电平时间用以测量波形的宽度跳变时,数据被捕获/****************************************************************************** ***************//****************************************************************************** ****************/#include<reg52.h> //常用的头文件,52单片机包含定时器2#include <intrins.h> //51基本运算(包括_nop_空函数)#define uchar unsigned char#define ulong unsigned long#define uint unsigned intsbit STC_WR=P3^6;sbit IC138_C=P2^7;sbit IC138_B=P2^6;sbit IC138_A=P2^5;sbit p10=P1^0; //有定时器0控制从P2.0口输出一个信号bit flag=0;#define Port_Data P0uint tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar count=0; //注,使用扩展RAM时一定要注意初始化uchar temp[]={0,0,0,0,0,0,0,0}; //用于赋捕获值/****************************************************************************** ****************/void delay(uint z) //ms级延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/****************************************************************************** ****************/void BUZZ_Y5C(){STC_WR=0;IC138_C=1;IC138_B=0;IC138_A=1;}void we_Y6C(){STC_WR=0;IC138_C=1;IC138_B=1;IC138_A=0;}void du_Y7C(){STC_WR=0;IC138_C=1;IC138_B=1;IC138_A=1;}void up_we_Y6C(){STC_WR=1;IC138_C=1;IC138_B=1;IC138_A=0;}void up_du_Y7C(){STC_WR=1;IC138_C=1;IC138_B=1;IC138_A=1;}void display() //显示程序{du_Y7C();Port_Data=tab[temp[0]];up_du_Y7C();we_Y6C();Port_Data=0x01;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[1]]; up_du_Y7C();we_Y6C();Port_Data=0x02;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[2]]; up_du_Y7C();we_Y6C();Port_Data=0x04;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[3]]; up_du_Y7C();we_Y6C();Port_Data=0x08;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[4]]; up_du_Y7C();we_Y6C();Port_Data=0x10;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[5]];up_du_Y7C();we_Y6C();Port_Data=0x20;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[6]];up_du_Y7C();we_Y6C();Port_Data=0x40;up_we_Y6C();delay(1);du_Y7C();Port_Data=tab[temp[7]];up_du_Y7C();we_Y6C();Port_Data=0x80;up_we_Y6C();delay(1);}void gaibian(){uint x;x=RCAP2H*256+RCAP2L;temp[7]=x%10;x=x/10;temp[6]=x%10;x=x/10;temp[5]=x%10;x=x/10;temp[4]=x%10;x=x/10;temp[3]=x%10;x=x/10;temp[2]=x%10;x=x/10;temp[1]=x%10;temp[0]=x/10;RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;flag=0;}/****************************************************************************** ****************/void time2_init(void) //捕获模式,当EXEN2=1,外部T2EX为负跳变时,则将定时器中的值捕获到RCAP2L和RCAP2H{TH2=0; //初值为0,不断自加,当溢出时中断,或者外部T2EX由1到0时产生中断TL2=0;RCAP2L=0;RCAP2H=0; // 允许T2定时器中断T2CON=0x09; //必须将T2CON.7位置1才能进行外部捕获/或者外部T2EX由1到0时产生中断}void time_init(){TMOD=0X12;TH0=256-12;TL0=256-12;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;ET2=1;TR0=1;TR1=1;TR2=1;}/****************************************************************************** ****************/void main(){time2_init();time_init();BUZZ_Y5C();Port_Data=0X00;while(1){if(flag==1)gaibian();display(); //只用来显示低八位}}void timer2(void) interrupt 5{if(TF2){TF2=0; //若定时器溢出则产生中断清0RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;}else{TR0=0;TR2=0;flag=1;EXF2=0; //若外部负跳变时产生中断清0}}void timer0() interrupt 1{p10=~p10;}void timer1() interrupt 3{static uchar x=0;TH1=(65536-50000)/256;TL1=(65536-50000)%256;x++;if(x==20){TR2=1;TR0=1;x=0;RCAP2H=0;RCAP2L=0;TH2=0;TL2=0;}}。
STC89C52RC单片机用户手册(20210304163300)
STC89C52RC单片机用户手册(20210304163300)*****2R单片机介绍*****2R单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2. 工作电压:5.5V?3.3V (5V单片机)/3.8V?2.0V (3V单片机)3. 工作频率范围:0?40MHz相当于普通8051的0?80MHz实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O 口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP (在系统可编程)/IAP (在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1 )直接下载用户程序,数秒即可完成一片8. 具有EEPRO功能9. 具有看门狗功能10. 共3个16位定时器/计数器。
即定时器T0、T1、T211. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12. 通用异步串行口(UART,还可用定时器软件实现多个UART13. 工作温度范围:-40?+85C(工业级)/0?75C(商业级)14. PDIP封装*****2R单片机的工作模式掉电模式:典型功耗<0.1卩A,可由外部中断唤醒,中断返回后,继续执行原程序空闲模式:典型功耗2mA 正常工作模式:典型功耗4Mr 7mA掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备*****2R 引脚图*****2RC 脚功能说明VCC (40弓I 脚):电源电压VSS (20弓I 脚):接地P0端口(P0.0?P0.7, 39?32引脚):P0 口是一个漏极开路的8位双向I/O 口。
STC89C52单片机定时器2的使用
STC89C52单片机定时器2的使用实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。
软件定时:执行一个循环程序进行时间延迟。
定时准确,不需要外加硬件电路,但会增加CPU 开销。
专用硬件电路定时:可以实现请精确的定时和计数,但参数调节不方波。
可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方式和其他参数,使用方便。
以下说明仅试用宏晶的STC89C52!!定时器2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址)000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。
定时器2 可配制成向上/向下计数器。
0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址)TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会置位。
EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。
定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。
EXF2 位必须用软件清零。
在递增/递减计数器模式(DCEN=1)中,EXF2 位不会引起中断。
RCLK:5 接收时钟标志。
RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。
RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。
TCLK:4 发送时钟标志位。
TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。
TCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 发送时钟。
EXEN2:3 定时器2 外部使能标志。
STC89C52单片机定时器2的使用知识讲解
52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8HTF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
STC89C52单片机用户手册
STC89C52单片机用户手册一、概述STC89C52 单片机是一款高性能、低功耗的 8 位微控制器,具有丰富的片内资源和强大的功能,广泛应用于各种电子设备和控制系统中。
二、主要特点1、增强型 8051 内核,指令代码完全兼容传统 8051 单片机。
2、工作电压范围宽,可在 38V 55V 之间正常工作。
3、片内集成 8K 字节的 Flash 程序存储器,可反复擦写 1000 次以上。
4、 512 字节的片内数据存储器(RAM)。
5、拥有 32 个可编程的 I/O 口,方便连接外部设备。
6、 3 个 16 位定时器/计数器,可用于定时、计数和脉冲宽度测量等功能。
7、 8 个中断源,包括 2 个外部中断、3 个定时器中断和 2 个串行口中断,具有两级中断优先级。
8、全双工串行通信接口(UART),可方便地与其他设备进行通信。
三、引脚功能1、 VCC:电源正极,接+5V 电源。
2、 GND:电源地。
3、 P0 口:8 位漏极开路双向 I/O 口,作为地址/数据总线分时复用口。
4、 P1 口:8 位准双向 I/O 口,具有内部上拉电阻。
5、 P2 口:8 位准双向 I/O 口,作为高 8 位地址总线。
6、 P3 口:8 位准双向 I/O 口,具有第二功能。
例如,P30 为串行输入口(RXD),P31 为串行输出口(TXD)等。
四、存储结构1、程序存储器STC89C52 单片机的程序存储器空间为 8K 字节,地址范围为0000H 1FFFH。
用于存放用户编写的程序代码。
2、数据存储器数据存储器分为内部数据存储器和外部数据存储器。
内部数据存储器包括低 128 字节的 RAM(地址范围为 00H 7FH)和高 128 字节的特殊功能寄存器(SFR,地址范围为 80H FFH)。
外部数据存储器最大可扩展至 64K 字节。
五、时钟与复位1、时钟电路STC89C52 单片机可以使用内部时钟和外部时钟。
内部时钟通过在XTAL1 和 XTAL2 引脚之间连接晶振和电容来产生时钟信号。
STC89C52单片机用户手册讲解学习
STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:∙增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.∙工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)∙工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz∙用户应用程序空间为8K字节∙片上集成512字节RAM∙通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
∙ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片∙具有EEPROM功能∙具有看门狗功能∙共3个16位定时器/计数器。
即定时器T0、T1、T2∙外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒∙通用异步串行口(UART),还可用定时器软件实现多个UART∙工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)∙PDIP封装STC89C52RC单片机的工作模式∙掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序∙空闲模式:典型功耗2mA∙正常工作模式:典型功耗4Ma~7mA∙掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。
80C52、AT89C52的定时计数器2
∙80C52、AT89C52的定时/计数器2∙作者:佚名发布时间:2009-10-30 阅读次数:543 字体大小: 【小】【中】【大】80C52、AT89C52、80C51FA/FB等单片机增加了一个16位定时/计数器T2,可用于定时或外部事件计数。
它有三种工作方式:16位自动重装初值的定时/计数器、捕捉事件、串行口波特率发生器。
与T2有关的外部引脚是:P1。
0-外部计数脉冲输入端T2,P1。
1-外部控制端T2EX。
8052、AT89C52、80C51FA/FB等单片机增加了一个16位定时/计数器T2,可用于定时或外部事件计数。
它有三种工作方式:16位自动重装初值的定时/计数器、捕捉事件、串行口波特率发生器。
与T2有关的外部引脚是:P1。
0-外部计数脉冲输入端T2,P1。
1-外部控制端T2EX。
1、T2的特殊功能寄存器1)控制寄存器T2CON(C8H)位:TF2 EXF2 RCLK TCLK EXEN2 TR2 C//T2 CP//RL2TF2:T2溢出中断标志,在捕捉方式和自动重装初值方式中计数溢出时置1,对应中断入口002BH,但中断响应后,必须由软件清0。
在串行口波特率发生器方式中TF2不会置1。
EXF2:T2外部中断标志。
当EXEN2=1(T2外部中断允许)时,引脚T2EX(P1。
1)的负跳变使EXF2=1,CPU响应中断,入口地址002BH;EXF2也必须由软件清0。
EXEN2:T2外部中断允许标志。
使EXEN2=1,当T2工作在捕捉方式时,引脚T2EX上出现的负跳变使EXF2=1,申请中断,同时TH2、TL2的当前值自动送入RCAP2H、RCAP2L寄存器;如果T2工作在重载初值方式,那么T2EX的负跳变将RCAP2H和RCAP2L的内容自动装入TH2、TL2,同时EXF2=1,申请中断。
EXEN2=0时,T2EX引脚上的变化对T2工作无影响。
RCLK、TCLK:选择串行口波特率发生器方式。
STC89C52RC单片机手册
STC89C52单片机用户手册[键入作者姓名][选取日期]STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8.具有EEPROM功能9.具有看门狗功能10.共3个16位定时器/计数器。
即定时器T0、T1、T211.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12.通用异步串行口(UART),还可用定时器软件实现多个UART13.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)14.PDIP封装STC89C52RC单片机的工作模式掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序●空闲模式:典型功耗2mA●正常工作模式:典型功耗4Ma~7mA●掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O 口。
单片机定时器2的使用
/*-----------------------------------------------定时器初始化子程序
------------------------------------------------*/
/*----------------------------------------------名称:定时器 2 内容:通过定时让 LED 灯闪烁,数据口为: P0 口 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
//自动重装,无需再次赋初值! TF2=0;//!!!注意!!! 定时器 2 必须由软件对溢出标志位清零,硬件不能清零,这里与定 时器 0 和定时器 1 不60000)/256;//晶振 12M 60ms 16bit 自动重载
RCAP2L = (65536-6000)%256;
ET2=1;
//打开定时器中断
EA=1;
//打开总中断
TR2=1;
//打开定时器开关
}
/*-----------------------------------------------主程序
------------------------------------------------*/
main()
{
T2_init();
while(1);
}
/*-----------------------------------------------定时器中断子程序
STC89C52RC单片机手册
STC89C52单片机用户手册[键入作者姓名][选取日期]STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8.具有EEPROM功能9.具有看门狗功能10.共3个16位定时器/计数器。
即定时器T0、T1、T211.外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12.通用异步串行口(UART),还可用定时器软件实现多个UART13.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)14.PDIP封装STC89C52RC单片机的工作模式掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序●空闲模式:典型功耗2mA●正常工作模式:典型功耗4Ma~7mA●掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O 口。
STC89C52单片机定时器2的使用知识讲解
52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8HTF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
89C52数码管静态显示及定时器和中断应用
动态显示
动态显示的特点是将所有位数码管的段选线
并联在一起,由位选线控制是哪一位数码管有效。 选亮数码管采用动态扫描显示。所谓动态扫描显
示即轮流向各位数码管送出字形码和相应的位选,
利用发光管的余辉和人眼视觉暂留作用,使人的
感觉好像各位数码管同时都在显示。动态显示的
亮度比静态显示要差一些,所以在选择限流电阻 时应略小于静态显示电路中的。
TCON
IT0 1 0 IE0 1 ET0 1 TF0 IT1 1 0 IE1 1 ET1 1 TF1 EX0 1
IE
EA 1
IP
PX0 1 0 PT0 1 0 1
硬件查询
自 然 优 先 级 中断源 高 级
INT0 T0 INT1 T1 RX TX
中断入口
EX1 1
PX1 1 0 PT1 1 0 0 自 然 优 先 级 中断源
R 1K
11
7 4 2 1 10
89C52
DPY a f e g d b c
a b c d e f a f e g d
C2
5 3
P00 P01 P02 P03 P04 P05 P06 P07
P00 P01 P02 P03 P04 P05 P06 P07
1 2 3 4 5 6 7 8
g dp a a b c dp f e g d b c dp DPY 4-L E D
硬件查询
自 然 优 先 级 中断源 高 级
INT0 T0 INT1 T1 RX TX
中断入口
EX1 1
PX1 1 0 PT1 1 0 0 自 然 优 先 级 中断源
低 级
RI TI
ES 1 ≥1
PS 1 0
STC89C52定时器2应用
#define LSB_reload_value 0x36 /* lsb reload value exemple 低位重载值*/
//sfr T2MOD=0xC9; /*定时器2控制寄存器地址。可位寻址,复位值=XXXX XX00B 应该加在reg52.h文件中。*/
void it_timer2(void) interrupt 5 /* interrupt address is 0x002b 定时器2中断向量入口*/
{
P1_2 = ~P1_2; /* P1.2 toggle when interrupt. 中断时取反*/
TF2 = 0; /* reset interrupt flag 复位中断标志位*/
TCLK=0;RCLK=0; /* disable baud rate generator 不用于波特率发生器*/
EXEN2=0; /* ignore events on T2EX 视T2EX(P1.1)端信号无效*/
TH2=MSB_reload_value; /* Init msb_vaTL2组成
* The EXF2 bit toggles when timer2 overflow or underflow occurs.
* 当timer2向上/下溢出时,置位EXF2位
* EXF2 does not generate interrupt. This bit can be used to provide 17-bit resolution
{
system_init();
STC89C52定时器使用方法介绍
定时器/计数器0 和定时器/计数器1 都可以在方式0、方式1、方式2 工作,而方式3 只有前者才能工作。
1. 方式 0当TMOD 中M1、M0 都为0 时,T/C 工作在方式0。
方式0 为13 位的T/C,由TH 提供高8 位,TL 提供低5 位,注意TL 的高3 位是无效的,计数溢出值为2 的13 次方=8192,启动该计数器需要设置好计数初值。
当C/-- T该位为0 时,T/C 为定时器,振荡源12 分频的信号作为计数脉冲;当C/-- T该位为1 时,T/C为计数器,对外部脉冲输入端的T0 或T1 引脚进行脉冲计数。
计数脉冲能否加到计数器上,受启动信号的控制。
当GATE=0 时,只要TR=1,则T/C 启动;当GATE=1时,启动信号受到TR 与INT 的双重控制。
T/C 启动后立即加1 计数,当13 位计数满时,TH 向高位进位。
此进位将中断溢出标志TF 置位即TF=1,产生中断请求,表示定时时间或计数次数到达。
若T/C 开中断(ET=1)且CPU 开中断(EA=1),则当CPU 自动转向中断服务函数时,TF 自动清零,不需要人工软件清零。
2. 方式 1当TMOD 中M1、M0 为0、1 时,T/C 工作在方式1。
方式1 与方式0 基本相同,唯一不同的是方式0 是13 位计数方式,方式1 是16 位计数方式,TH 和TL 都同时提供8 位(方式0 时TL 只提供低5 位,高3 位无效),计数溢出值为2 的16 次方=65536。
3. 方式 2当TMOD 中M1、M0 为1、0 时,T/C 工作在方式2。
方式2 是8 位的可自动重装载的T/C,满计数值为2 的8 次方=256。
在方式0 和方式1 中,当计数满后,若要进行下一次定时/计数,必须通过软件向TH 和TL 重新装载预置计数值。
方式2 中TH 和TL 被当作两个8 位计数器。
技术过程中,TH 寄存8 位初值并保持不变,由TL 进行8 位计数。
51单片机(STC89C52)的中断和定时器
51单⽚机(STC89C52)的中断和定时器STC89C51/STC89C52 Timer内部不带振荡源, 必须外接晶振采⽤11.0592MHz,或22.1184MHz,可⽅便得到串⼝通讯的标准时钟.STC89和STC90系列为12T, STC11/STC12系列为1T, 也就是⼀个指令⼀个机器周期, 这些都需要外置晶振; STC15系列有内置晶振.中断中断允许控制寄存器 IE字节地址A8H, CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的D7D6D5D4D3D2D1D0EA—ET2ES ET1EX1ET0EX0EA (IE.7): 整体中断允许位, 1:允许ET2(IE.5): T2中断允许位, 1:允许(for C52)ES (IE.4): 串⼝中断允许位, 1:允许ET1(IE.3): T1中断允许位, 1:允许EX1(IE.2): 外部中断INT1允许位, 1:允许ET0(IE.1): T0中断允许位, 1:允许EX0(IE.0): 外部中断INT0允许位, 1:允许52单⽚机⼀共有6个中断源, 它们的符号, 名称以及各产⽣的条件分别如下1. INT0 - 外部中断0, 由P3.2端⼝线引⼊, 低电平或下降沿引起2. INT1 - 外部中断1, 由P3.3端⼝线引⼊, 低电平或下降沿引起3. T0 - 定时器/计数器0中断, 由T0计数器计满回零引起4. T1 - 定时器/计数器1中断, 由T1计数器计满回零引起5. T2 - 定时器/计数器2中断, 由T2计数器计满回零引起 <--这个是52特有的6. TI/RI - 串⾏⼝中断, 串⾏端⼝完成⼀帧字符发送/接收后引起定时器中断51单⽚机内部共有两个16位可编程的定时器,即定时器T0和定时器T1, 52单⽚机内部多⼀个T2定时器. 它们既有定时功能,也有计数功能。
可通过设置与它们相关的特殊功能寄存器选择启⽤定时功能还是计数功能. 这个定时器系统是单⽚机内部⼀个独⽴的硬件部分,它与CPU和晶振通过内部某些控制线连接并相互作⽤,CPU⼀旦设置开启定时功能后,定时器便在晶振的作⽤下⾃动开始计时,但定时器的计数器计满后,会产⽣中断。
STC89C52RC单片机存储以及引脚应用和定时器2及看门狗定时
表 4 定时器 2 工作方式
RCLK+TCLK 0 0 1 X 1、捕获模式Βιβλιοθήκη CP/RL2 0 1 X X
TR2 1 1 1 0
模式 16 位自动重装 16 位捕获 波特率发生器 (关闭)
在捕获模式中,通过 T2CON 中的 EXEN2 设置 2 个选项。如果 EXEN2=0, 定时 器 2 作为一个 16 位定时器或计数器(由 T2CON 中的 C/������2位选择) ,溢出时置位 TF2(定时器 2 溢出标志位) 。该位可用于产生中断(通过使能 IE 寄存器中的定 时器 2 中断使能位) 。如果 EXEN2=1,与以上描述相同,但增加了一个特性,即 外部输入 T2EX 由 1 变 0 时, 将定时器 2 中 TL2 和 TH2 的当前值各自捕获到 RCAP2L 和 RACP2H。另外,T2EX 的负跳变使 T2CON 中的 EXF2 置位,EXF2 也像 TF2 一样 能够产生中断 (其向量与定时器 2 溢出中断地址相同,定时器 2 中断服务程序通 过查询 TF2 和 EXF2 来确定引起中断的事件) , 捕获模式如图 X 所示。 在该模式中, TL2 和 TH2 勿重新装载值,甚至当 T2EX 产生捕获时间时,计数器仍以 T2EX 的负 跳变或振荡频率的 1/2(12 时钟模式)或 1/6(6 时钟模式)计数。
定时器 2 是一个 16 位定时/计数器。通过设置特殊功能寄存器 T2CON 中的 C/T2 位,可将其作为定时器或计数器(特殊功能寄存器 T2CON 的描述如表 2 所 列) 。定时器 2 有 3 种操作模式:捕获、自动重新装载(递增或递减计数)和波 特率发生器,这 3 种模式由 T2CON 中的位进行选择(如表 2 所列) 表1 STC89C52RC 的特殊功能寄存器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:
0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:
TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器
TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器
EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部
时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获
或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2
C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P1.0)出现负跳变
(EXEN2=1时),将会引起T2重装载;CP/RT2=1时,选择捕获方式,这时若T2EX 引脚(P1.0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。
但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。
对应郭天祥老师的52单片机板子!
/***********************************
程序编著院校南昌航空大学
晶振11.0592MHZ
T2CON(0XC8)的说明定时器2可以产生两个中断TF2和EXF2,这两个中断通过逻辑或共享一个端口
定时器2溢出时TF2置位如果定时器工作在重装模式RCAP2H和RCAP2L的值会自动装入TH2和TL2 TR2启动
TF2和TL2必须软件清零
T2MOD 必须定义sfr T2MOD= 0xC9;
扩展RCLK TCLK其中一个为高电平定时器2做波特率发生器
***********************************/
#include<reg52.h>
#include<intrins.h> // _nop_();
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD = 0xC9;
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^7;
uchar timer2_ctr,num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//11.0592MHZ延时函数
void delay(uint ms)
{
uint x;
while(ms--)
{
for(x=125;x>0;x--);
}
}
//初始化主函数
void init()
{
dula=wela=0; //关闭数码管显示
RCAP2H=(0XFFFF-50000)/256;
RCAP2L=(0XFFFF-50000)%256;
//TH2=RCAP2H; //会自动重装
//TL2=RCAP2L;
T2CON=0;
T2MOD=0;
IE=0XA0; //开总中断和定时器2中断TR2=1; //启动
}
void display(uchar num)
{
uchar gw,sw,bw;
bw=num/100;
sw=num%100/10;
gw=num%10;
P0=0xfe;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[bw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfd;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[sw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3);
P0=0xfb;
wela=1;
_nop_();_nop_();
wela=0;
P0=table[gw];
dula=1;
_nop_();_nop_();
dula=0;
delay(3); //显示个十百
}
void main()
{
init();
while(1)
{
display(num);
}
}
void timer2() interrupt 5
{
TF2=0; //注意!定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
timer2_ctr++;
if(timer2_ctr>=20) //定时50ms×20=1000ms即1秒钟,这里模拟一个60秒秒表
{
timer2_ctr=0;
led=~led;
num++;
if(num>=256)
{
num=0;
}
}
}
现象是:数码管显示0-256,
程序很简单!朋友们可以自己试试!
不明白问我739141300!
祝你学成!。