定时器计数器(TC)简介以及例子说明
更新时间:2023-05-02 14:52:01 阅读量: 实用文档 文档下载
- 定时器计数器实验报告推荐度:
- 相关推荐
定时器/计数器(T/C)简介
一、定时器/计数器有关的特殊功能寄存器
1. 计数数寄存器TH和TL
计数器寄存器是16位的,计数寄存器由TH高8位和TL低8 位构成。在特殊功能寄存器(SFR)中,对应T/C0为TH0和TL0,对应T/C1为TH1和TL1。定时器/计数器的初始值通过TH1/TH0和TL1/TL0设置。
2. 定时器/计数器控制寄存器TCON
TR0,TR1:T/C0,1启动控制位。
1——启动计数0——停止计数
TCON复位后清“0”,T/C需受到软件控制才能启动计数,当计数寄存器计满时,产生向高位的进位TF,即溢出中断请求标志。
3. T/C的方式控制寄存器TMOD
T/C1 T/C0 C/T :计数器或定时器选择位。
1——为计数器0——为定时器
GATE:门控信号
1——T/C的启动受到双重控制,即要求TR0/TR1和INT0/INT1
同时为高。
M1和M0:工作方式选择位。(四种工作方式)
4.定时器/计数器2(T/C2)控制寄存器
TF2:T/C2益出标志——必须由软件清除
EXF2:T/C2外部标志。当EXEN2=1,且T2EX引脚上出现负跳变而引起捕获或重装载时置位,EXF2要靠软件来清除。
RCLK:接收时钟标志1——用定时器2 溢出脉冲作为串行口的接收时钟0——用定时器1的溢出脉冲做接收时钟。
TCLK:发送时钟标志。
1——用定时器2 溢出脉冲作为串行口的发送时钟
0——用定时器1的溢出脉冲作发送时钟
EXEN2:T/C2外部允许标志。1——若定时器2未用作串行口
的波特率发生器,T2EX端的负跳变引起T/C2的捕获或重装载。
0——T2EX端的外部信号不起作用。
TR2:T/C2运行控制位
1——T/C2启动0——T/C2停止
C/T2:计数器或定时器选择位
1——计数器0——定时器
CP/RL:捕获/重载标志。
1——若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作。
0——若定时器2溢出,或在EXEN2=1条件下T2EX端信号负跳变,都会造成自动重装载操作。
二、定时器/计数器的工作方式
1.方式0
当TMOD中M1M0=00,T/C工作在方式0。
方式0为13位的T/C,由TH提供高8位,TL提供低5位的计数值,满计数值213,但启动前可以预置计数初值。
当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启动受到双重控制。
T/C启动后立即加1计数,当13位计数满时,TH向高位进位,此进位将中断溢出标志TF置1,产生中断请求,表示定时时间到或
计数次数到。若T/C开中断(ET=1)且CPU开中断(恩爱)则当CPU转向中断服务程序时,TF自动清0。
2.方式1
当TMOD
例子
一.输入捕捉(IC)编程步骤:
初始化函数
TIOS---选择工作方式为IC
TCTLx---设置对应位输入捕捉的方式(x=3、4,高位是3,低位是4)
TSCRx---控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预分频
TIE---中断使能
中断函数
清除标志位---TFLG1
处理函数
//---------------------------------------------------------------------------//
//功能说明:利用PP3通道产生40Hz,占空比为50%的方波
// 利用PT0采集方波的个数,并在PB口显示
//程序设计:电子设计吧
//设计时间:2010.01.13
//---------------------------------------------------------------------------//
#include
#include
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
unsigned int Input_Num;
//----------------------时钟初始化------------------------------//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80;
}
//--------------------通道0输入捕捉初始化-------------------//
void ECT0_Init(void)
{
TSCR2=0x06; //禁止溢出中断,分频系数64(24/64MHz) TIOS_IOS0=0; //通道0为输入捕捉
TCTL4=0x01; //捕捉上升沿
TIE_C0I=1; //通道0输入捕捉中断允许
TSCR1=0x80; //使能定时器
}
//---------------------PWM通道3初始化程序-------------------//
void PWM_Init(void)
{
PWME_PWME3=0x00; // PWW is disabled 禁止PWMPRCLK=0x33; // 0b0011 0011 A=B=24M/8=3M 时钟预分频寄存器设置
PWMSCLA=150; // SA=A/2/150=10k 时钟设置PWMSCLB=150; // SB=B/2/15 =10k 时钟设置PWMCTL=0x00; // no concatenation 控制寄存器设置PWMCLK_PCLK3=1; // PWM3-----SB 时钟源的选择PWMPOL_PPOL3=1; // Duty=High Time 极性设置PWMCAE_CAE3=0; // left-aligned 对齐方式设置PWMPER3=250; // Frequency=SB/250=40 周期寄存器设置
PWMDTY3=125; // Duty cycle = 50% 占空比寄存器设置
PWME_PWME3=1; // enable 使能
}
//----------------------主函数-------------------------//
void main(void)
{
PLL_Init();
PWM_Init();
ECT0_Init();
DDRB=0XFF;
PORTB=0X00;
EnableInterrupts;
for(;;)
{
} /* wait forever */
/* please make sure that you never leave this function */
}
//--------------------转速计算:-------------------------------//
//
//智能车转速子函数
//
//----------------------------------------------------------------//
#pragma CODE_SEG NON_BANKED //定时器通道0输入捕捉中断
void interrupt 8 Timer0_Onput(void)
{
TFLG1_C0F=1; //清中断标志位
Input_Num++;
PORTB=Input_Num;
if(Input_Num>=255)
{
Input_Num=0;
}
}
二、输出比较(OC)编程步骤:
初始化函数
TIOS---选择工作方式为OC
TCx---通道x的OC寄存器赋初值,经过N秒后进入第一次中断
TCTLx---设置对应位输入捕捉的方式(x=1、2,高四位是1,低四位是2)TSCRx---控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预分频
TIE---中断使能
中断函数
清除标志位---TFLG1
重新赋初值TCx
//---------------------------------------------------------------------------//
//功能说明:利用PT0的输出比较功能,定时进入中断
// 利用PORTB显示定时的时间
//程序设计:电子设计吧
//设计时间:2010.01.15
//---------------------------------------------------------------------------//
#include
#include
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
//利用定时器输出比较功能产生定时中断
//----------------------变量定义----------------------//
static unsigned int waittime = 0;
//---------------------时钟初始化-------------------//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80;
}
//--------------------定时器初始化------------------//
void ECT0_Init(void)
{
TIOS=0x01; //定时器通道0设置为输出比较
TC0=0x00ee; //赋初值,当TCNT从0计数到此值时第一次进入中断TCTL2=0x02; //其他七路与定时器断开执行的动作时:0通道输出清零TSCR2=0x86 //溢出中断禁止24M/64=2.67微秒,计一个数用2.67微秒TSCR1=0x80; //使能定时器
TIE=0x01; //通道0输出比较中断允许
}
//-----------------------主函数------------------------//
void main(void)
{
PLL_Init();
ECT0_Init();
DisableInterrupts;
DDRB=0xff;
PORTB=0x00;
for(;;)
{
EnableInterrupts;
}
}
//-----------------------中断函数处理-------------------//
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_ISR(void) //8为定时器通道0的中断标号
{
unsigned int m;
TFLG1_C0F=1;//清中断标志位
DisableInterrupts;
m=TCNT;
TC0=m+37500; //37500*2.67us=10ms定时时间waittime++;
if(waittime>=255)
{
waittime=0;
}
PORTB=waittime;
正在阅读:
定时器计数器(TC)简介以及例子说明05-02
华南理工大学网络教育《管理学原理》 随堂练习及参考答案01-21
狐狸和乌鸦续写350字06-21
商业银行业务管理05-31
“第二十五届国际科学与和平周全国中小学生(江苏地区)金钥匙科技竞赛”常州赛区获奖名单(小学组)05-31
短时记忆的信息提取实验报告01-16
装饰装修公司的管理运营模式07-22
真正的高手从不急于达成交易08-02
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 定时器
- 计数器
- 例子
- 以及
- 说明
- 简介
- TC
- 北京市顺义区届高三(一模)3月第一次统练物理试题Word版含解析
- 九年级体育理论考试综合复习提纲答案纲修订版
- 地牢围攻2支线任务全攻略
- 2011年口腔执业助理医师考试试题精选
- 了解少儿编程,首先要记住这4点!
- 有效的英语单词记忆方法
- 2021年小学语文教研工作计划
- 年政协统战工作总结
- 农村公路技术标准表
- 影子银行与中国经济的发展
- 2017年重庆交通大学土木建筑学院809建筑历史与理论之中国建筑史考研题库
- 办公区空调清洗 保养方案
- 2020年福清市事业单位招聘考试《综合基础知识及综合应用能力》试题及答案
- 2016-2021年吸波材料行业深度调查及发展前景研究报告
- 北宋帝陵石像生研究
- 高考英语完型技巧_考点_高频词汇2013年秒杀秘术
- 平行四边形活动课《折纸中的数学》课例研究
- 机关效能建设八项制度
- 安全学原理考试试题及答案
- 粉末车间包装岗位操作规程简易版