在本文中,我们对51单片机的定时器2的功能进行测试。包含两个实验,一个是定时器2递增计数功能的测试,另一个是定时器2递减计数功能的测试。
实验1:递增计数
这个实验使用了定时器2的16位自动重装模式的递增计数功能。RCAP2H和RCAP2L寄存器内的值是重新加载的值。当TH2和TL2的计数值溢出时,将RCAP2H和RCAP2L寄存器内的值装载到TH2和TL2中重新计数。定时器2的初始化代码如下所示
void init_T2(void)
{
T2MOD= 0x00; //定时器2递增计数,禁止输出
CP_RL2=0; //16位自动重装模式
RCAP2H=(65536-50000)/256; //给RCAP2H和RCAP2L赋初值,
//计数器由15536开始计数,到65535溢出
RCAP2L=(65536-50000)%256; //外部晶振为12MHz,对应的延时时间为50ms
EA=1; //总中断打开
ET2=1; //定时器中断打开
TR2=1; //定时器开关打开
}
计时周期为50000个周期,每个周期为1us,所以溢出周期为50ms,中断处理函数如下所示。
void T2_ISR(void) interrupt 5
{
TF2=0; //清除标志位
i+=1;
if(i>=10) //计时10次改变一次灯的状态,灯闪的频率为1Hz
{
i=0;
LED=~LED; //LED的值取反,改变灯的状态。
}
}
在中断中,清除TF2中断标志位,并使用i来计数,每10次中断改变一次LED状态。
将程序烧写到单片机中,看到实验现象,LED1以1秒一次的频率闪烁。
实验2:递减计数
这个实验使用了定时器2的16位自动重装模式的递减计数功能。定时器2的T2EX引脚与P1.1引脚复用。将T2MOD寄存器中的DCEN位置1,并且将T2EX引脚接地,则定时器2为递减计数功能。定时器2由0xffff计数,当与计数器TH2和TL2与RCAP2H和RCAP2L的值相同是,产生中断。定时器2初始化代码如下所示
void init_T2(void)
{
T2MOD= 0x01; //定时器2递减计数,禁止输出
CP_RL2=0; //16位自动重装模式
RCAP2H=(65535-50000)/256; //给RCAP2H和RCAP2L赋初值,
//计数器由65535开始递减计数,到15535产生中断
RCAP2L=(65535-50000)%256; //外部晶振为12MHz,对应的延时时间为50ms
EA=1; //总中断打开
ET2=1; //定时器中断打开
TR2=1; //定时器开关打开
}
中断处理代码与实验1是相同的,将程序烧写到单片机中,看到实验现象,LED1以1秒一次的频率闪烁。
关键字:51单片机 定时器2 功能测试
引用地址:
51单片机(二十二)—— 定时器2功能测试
推荐阅读最新更新时间:2024-11-19 16:36
51单片机读写RC522卡参考例程及上位机调试软件源码
原理图: 单片机源程序如下: #include reg52.h #include main.h #include mfrc522.h #include string.h //M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令 //4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反 unsigned char code data2 = {0x12,0,0,0}; unsigned char code DefaultKey = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; unsigned char g_u
[单片机]
基于8051单片机DPTR扩展设计介绍
单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MCU架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据存储器和I/O接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统8051的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文
[单片机]
51单片机之LED流水灯
数据类型 在写流水灯程序之前,我们了解一下数据类型。 使用对应数据时,应该注意溢出问题,若溢出编译器也有可能编译通过,但是执行结果是错误的。 流水灯 操作LED前必须先了解LED是什么电平点亮,LED连接在什么引脚上,通常需要查找原理图。此处我的8个LED连接在P2口,为低电平点亮(因为灌电流比拉电流能力强)。 1、函数式循环流水灯: #include reg52.h #include intrins.h //函数头文件 #define led P2 //对整个LED的P2端口进行定义 /* 延时函数 */ void delay(unsigned int del) //10ms * del { uns
[单片机]
从零开始51单片机教程 —— 定时器/计数器的方式控制字
从上一节我们已经得知,单片机中的定时/计数器都能有多种用途,那么我怎样才能让它们工作于我所需要的用途呢?这就要通过定时/计数器的方式控制字来设置。 定时/计数器共有四种工作方式 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。 TMOD结构 从图1中我们能看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。 TCON结构 从图2中我们能看出,TCON也
[单片机]
MAX517与51单片机的I2C总线数据通信
1 I2C总线的特点及基本通信协议
I2C总线是Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线?串行数据线和串行时钟线?即可使连接于总线上的器件之间实现信息传送,同时可通过对器件进行软件寻址,而不是对硬件进行片选寻址的方式来节约通信线数目,从而减少了硬件所占空间。因为总线已集成在片内,所以大大缩短了设计时间,此外,在从系统中移去或增加集成电路芯片时,对总线上的其它集成芯片没有影响。
1.1 I2C总线的主要特点
I2C总线通常由两根线构成:串行数据线(SDA)和串行时钟线(SCL);总线上所有的器件都可以通过软件寻址,并保持简单的主从关系,其中主器件既可以作为发送器,又可以作为接收器;
[单片机]
关于51单片机串口数据丢失问题
关于51单片机的串口通讯程序 丢失数据的问题,用串口调试工具发现,100个数据包里面有10个左右有丢失第一个或者第二个数据的现象,调试多次情况一样,用实验板将接受到的数据显示出来,没有发现丢失数据的现象,关键就是在发送阶段,后来发现,有一个关键的细节,在串口初始化中用到定时器T1,并且打开了定时器使能,这样一旦有溢出就发生中断。并且优先级高于串口,所以既有可能丢失数据。一次分析,关掉T0定时器的溢出中断。也可以将串口优先级至最高,PS=1;于此同时,每次发送数据都要清零发送标志位 while(!TI); TI=0; init_serial_A() //方式3,SCON=0xd8;ren=1;允许接受串口中断TMOD=0
[单片机]
一种简单串行鼠标控制的51单片机实现
鼠标是一种快速定位器,通过移动鼠标可以快速定位屏幕上的对象,是计算机图形界面交互的必用外部设备。通常,鼠标通过微机中的串口或PS/2鼠标插口与主机连接。当在平面上移动鼠标时,通过机械或光学的方法把鼠标滚轮移动的距离和方向转换成脉冲信号传送给计算机,计算机鼠标驱动程序将脉冲个数转换成鼠标的水平方向和垂直方向的位移量,从而控制显示屏上光标箭头随鼠标的移动而移动。根据此原理,我们可利用鼠标的上位机驱动程序来设计测控系统中的编码器读取软件。 1 串行鼠标的原理及数据协议
鼠标一般划分为以下功能模块:微控制器、 按键检测、位置移动检测、RS232信号产生、5V电源产生器。串行鼠标的功能框图如图1所示。
微软公司与Mouse S
[单片机]
51单片机ADC0809电压表(12864显示,程序 + 仿真)
51单片机ADC0809电压表(12864显示,程序 + 仿真)并口;0~5V先上图正常工作图 上图:最大电压值 上图渐变电压值(最大到最小) 这是仿真图,可以进行仿真 #include reg51.h #include LCD12864.h sbit OE=P3^6; sbit EOC=P3^7; sbit CLOCK=P3^0; sbit ST=P3^3; void Lcd12864_Display(); unsigned char dat = 0.000V ; unsigned int tmp; unsigned char adc; void main() { EA=1; ET0=1; T
[单片机]