历史上的今天
今天是:2025年01月15日(星期三)
2019年01月15日 | C51/C52的定时器计数器与中断
2019-01-15 来源:eefocus
一、定时器/计数器简介
设置等待时间,到达等待时间之后执行指定的硬件操作。
定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,如果将定时器和IO结合起来就可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以产生PWM方波,定时器产生PWM控制电机状态是工业控制的普通。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
二、定时器/计数器相关寄存器介绍
1、计数寄存器TH和HL
T/C是16位的,计数寄存器由TH高8位和TL低8位构成
对应T/C0为TH0和TL0, 对应T/C1为TH1和TL1,定时器/计数器的初始值通过TH0/TL0和TH1/TL1设置
2、定时器/计数器控制寄存器TCON
3、T/C的方式控制寄存器TMOD
------------------------------------------------------------------------------------------------------------------------------------------------------------
三、定时器的计数初始值计算

---------------------------------------------------------------------------------------------------------------------------------------------------------------
四、中断源及中断信号

-------------------------------------------------------------------------------------------------------------------------------------------------------
五、参考代码
/**************************************************************************************
功能描述:
LED会循环点亮1秒,熄灭1秒。使用单片机内部定时器可实现准确延时
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^0; //定义P20口是led
void Timer0Init()
{
TMOD|=0X01; //选择为定时器0模式,工作方式1(16位),仅用TR0打开启动
TH0=0XFC; //给定时器赋初值,定时1ms 高8位
TL0=0X18; // 低8位(可用软件计算,公司参考上面)
ET0=1; //允许定时器0中断
EA=1; //打开总中断
TR0=1; //打开定时器0,启动T/C0运行
}
void main()
{
Timer0Init();
while(1);
}
void Timer0() interrupt 1 //1是中断号
{
static u16 i;
TH0=0XFC; //计数器寄存高8位重新载入
TL0=0X18; //计数器寄存低8位重新载入
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
史海拾趣
|
上海华安新科技人才培训中心08年1月IC版图设计师(员)培训班开班,现热招中~有兴趣的可以咨询021-63171717 刘老师. 上海户籍的朋友可以享受全额或半额的政府补贴, 机会莫失喔~~… 查看全部问答> |
|
兼职MCU,DSP,ARM,FPGA,CPLD芯片程序的破解 本人擅长于MCU,DSP,ARM,FPGA,CPLD程序的破解和电路板的抄板,原理图和PCB的绘制,破解的成功率非常高。同时还承担单片机系统以及中央空调等方面的开发。如有需要请联系我。sale.jiemi@gmail.com … 查看全部问答> |
|
各位eeworldD的大侠们。小弟初学嵌入式。用s3c2410的定时器0产生PWM信号。但是当我结束应用程序后,驱动产生的PWM波还在。这是怎么回事啊?望各位大侠不吝赐教。 我的驱动程序如下: #include #include #include #include #include #include #inc ...… 查看全部问答> |
|
硬件工程师高级职业教育项目组(http://test.pche.com.cn/pche/seign/default.asp)直属于信息产业部电子教育考试培训中心,为了提高从业人员硬件设计水平和职业技能,开发出了一系列硬件设计工程师培训课程: 1、PCB设计工程师初级班   ...… 查看全部问答> |
|
驱动HX8352a 做完板子上一些基本的资源后,我们很快就能发现原理图中的这一部分 这部分外扩端口是专为LCD准备的。可以看出是专门为某款屏设计的。这里先讲解如何驱动这块屏。 1、 首先是对屏的控制线及数据线 ...… 查看全部问答> |
|
富士通工控板DIY之CAN总线双板连接成功 看图: 具体情况是: 1,使用双板连接,发送命令点亮对方的LED。 2,具体位速率等没更改。 3,和其他的CAN板的测试以后再试。 4,连接CANRX腿的两个电阻没用。直接用了个0偶电阻和CPU连接了。具体是 ...… 查看全部问答> |







