镇江市住房和城乡建设局网站,常州建设网站,做一个网站的建设流程,安徽专业建网站中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明#xff08;1#xff09;时钟#xff08;2#xff09;工作模式 2. 寄存器#xff08;1#xff09;控制寄存器 T2CON#xff08;2#xff09;定时器2模式控制寄存器 T2MOD … 中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明1时钟2工作模式 2. 寄存器1控制寄存器 T2CON2定时器2模式控制寄存器 T2MOD 3. 工作方式0116位捕获说明2代码实现 4. 工作方式1116位自动重载定时器说明当DCEN 0通过在T2CON中的EXEN2位选择两个选项。设置DCEN位允许定时器2递增计数或递减计数。当DCEN 1时T2EX引脚控制计数的方向而EXEN2控制无效。 2代码实现 5. 工作方式2 可编程时钟输出1功能介绍2软件实现 三、其它定时器介绍1. 定时器32. 定时器4启用 TIMER4_OUT启用 TIMER4_EDGETRIG 3. 定时器5 一、SH79F9476定时器简介
1. 简介
SH79F9476芯片具有多个定时器模块包括定时器/计数器、PWM脉冲宽度调制定时器等定时器可以配置为在计时达到特定值时触发中断以便处理紧急事件或执行特定的任务。
2. 定时器运行模式
MODE0 16位捕捉模式MODE1 16位重载方式MODE2 可编程时钟输出模式上升沿多次触发模式
具体地看SH79F9476 有定时器 2定时器 3定时器 4 和定时器 5 四个定时器其中
定时器 2 可配置为 16 位捕捉功能、16 位重载方式或可编程时钟输出方式定时器 3 可配置为 16 位自动重载定时/计数器且可以工作在掉电模式定时器 4 可配置为 16 位自动重载定时器或带边沿触发的 16 位自动重载定时器两个数据寄存器TH4和TL4可作为一个16位寄存器来访问定时器 5 可配置为 16 位的自动重载定时器。
二、定时器2
1. 说明
定时器2有两个数据寄存器TH2和TL2可以作为一个16位寄存器来使用由寄存器T2CON和T2MOD控制 定时器2的中断使能位是 IEN0寄存器中的ET2位。
1时钟
C/T2选择系统时钟定时器或外部引脚 T2 计数器作为定时器时钟输入。通过所选的引脚设置TR2允许定时器2/计数器2数据寄存器计数。 可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
2工作模式
定时器2支持3种工作方式
捕获/重载带递增或递减计数器的自动重载方式可编程时钟输出
可以通过寄存器配置定时器2的工作方式
C/T2T2OEDCENTR2CP/RL2方式描述X0X11016位捕获X0010116位自动重载定时器X0110116位自动重载定时器01X1X2可编程时钟11X1X不推荐使用XXX0XX定时器2停止T2EX通路仍旧允许
2. 寄存器
1控制寄存器 T2CON
C8H第7 位第6 位第5 位第4 位第3 位第2 位第1 位第0 位T2CONTF2EXF2--EXEN2TR2C/T2CP/RL2读/ 写读/写读/写--读/写读/写读/写读/写复位值(POR/WDT/LVR/PIN)00--0000
位功能
位编号位符号说明7TF2定时器2 溢出标志位 0无溢出必须由软件清01溢出由硬件设16EXF2T2EX 引脚外部事件输入下降沿被检测到的标志位 0无外部事件输入必须由软件清01检测到外部输入如果EXEN2 1由硬件设13EXEN2T2EX 引脚上的外部事件输入下降沿用作重载/ 捕获触发器允许/ 禁止控制位0忽略T2EX引脚上的事件 1检测到T2EX引脚上一个下降沿产生一个捕获或重载2TR2定时器2 开始/ 停止控制位0停止定时器21开始定时器21C/T2定时器2 定时器/ 计数器方式选定位 0定时器方式T2引脚用作I/O端口1计数器方式内部上拉电阻被打开0CP/RL2捕获/ 重载方式选定位 016位带重载功能的定时器/计数器 116位带捕获功能的定时器/计数器
2定时器2模式控制寄存器 T2MOD
C9H76543210T2MODTCLKP2----T2OEDCEN读/写读/写读/写----读/写读/写复位值(POR/WDT/LVR/PIN)0-----00
位定义
位编号位符号说明7TCLKP2分频选择控制位 0选择系统时钟的1/12作为定时器2的时钟源 1系统时钟作为定时器2的时钟源1T2OE定时器2 输出允许位 0设置P1.3/T2作为时钟输入或I/O端口 1设置P1.3/T2作为时钟输出0DCEN递减计数允许位 0禁止定时器2作为递增/递减计数器定时器2仅作为递增计数器 1允许定时器2作为递增/递减计数器
3. 工作方式0
116位捕获说明
16位的捕获模式下T2CON按制寄存器的EXEN2位有两个选项
0定时器2作为16位定时器或计数器如果ET2被允许定时器2能设置TF2溢出产生一个中断1定时器操作与上相同另外在外部输入T2EX上的下降沿也能引起在TH2和TL2中的当前值分别被捕获到RCAP2H和RCAP2L中此外在T2EX上的下降沿也能引起在T2CON中的EXF2被设置 如果ET2被允许EXF2位也像TF2一样产生一个中断。
流程框图
2代码实现
下面的测试让TIMER2工作在16位捕获模式系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 124MHz 内部 RC 作为振荡器 2”如图所示 测试代码
#include SH79F9476.h
#include cpu.h
#include intrins.h
#include api_ext.hvoid main()
{// 时钟设置高速模式CLKCON 0x08;Delay();CLKCON | 0x04;// P0.0,P0.1设置为输出P0CR 0x03;P0 0x00;// TIMER2 16位捕获模式// 允许所有中断IEN0 | 0x80;// 打开定时器2中断IEN1 | 0x04;// 检测到T2EX 引脚上一个下降沿产生一个捕获或重载T2CON 0x08;// 设置定时器2工作在捕获模式T2CON | 0x01;// 设置系统时钟12分频作为定时器时钟源T2MOD 0x00;TL2 0x00;TH2 0x00;// BIT2 启动定时器T2CON | 0x04; while(1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9{_push_(INSCON);Select_Bank0();// 定时器溢出if(T2CON 0x80){// 溢出标志位清0T2CON 0x7F;// 翻转P0_0P0_0 ~P0_0;} // 检测到外部事件下降沿if(T2CON 0x40){// 1011 1111 T2EX引脚外部事件被检测到的标志位清0T2CON 0xBF;// 翻转P0_1P0_1 ~P0_1;}_pop_(INSCON);
}测试代码中启动 T2EXP1_1 下降沿捕捉功能全速运行后T2EXP1_1口灌 1kHz 座号观察
P1_1 的下降沿 P0_1 状态会发生改变频率为 500Hz。P0_0 频率1000/0xFFFF(即65535)约为15.259Hz。
输入信号
P0_1输出信号 P0_0输出信号
4. 工作方式1
116位自动重载定时器说明
在16位自动重载方式下定时器2可以被选为递增计数或递减计数。这个功能通过T2MOD中的DCEN位递减计数允许选择。
系统复位后DCEN位复位值为0定时器2默认递增计数。当设置DCEN时定时器2递增计数或递减计数取决于T2EX引脚上的电平。
当DCEN 0通过在T2CON中的EXEN2位选择两个选项。
如果EXEN2 0定时器2递增到0FFFFH在溢出后置起TF2位同时定时器自动将用户软件写好的寄存器RCAP2H和 RCAP2L的16位值装入TH2和TL2寄存器。如果EXEN2 1溢出或在外部输入T2EX上的下降沿都能触发一个16位重载置起EXF2位。如果ET2被使能TF2和EXF2 位都能产生一个中断。
设置DCEN位允许定时器2递增计数或递减计数。当DCEN 1时T2EX引脚控制计数的方向而EXEN2控制无效。
T2EX置1可使定时器2递增计数。定时器向0FFFFH溢出然后设置TF2位。溢出也能分别引起RCAP2H和RCAP2L上的16 位值重载入定时器寄存器。T2EX清0可使定时器2递减计数。当TH2和TL2的值等于RCAP2H和RCAP2L的值时定时器溢出。置起TF2位同时0FFFFH 重载入定时器寄存器。
无论定时器2溢出EXF2位都被用作结果的第17位。在此工作方式下EXF2不作为中断标志。
2代码实现
下面代码示例中系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 124MHz 内部 RC 作为振荡器 2”启动自动重载功能 程序启动后在P0_0引脚输出1k频率方波。 P0 端口翻转一次的时间为 t (0xFFFF-TH2TL2)1/24 us。 计算频率为 1/(t2) Hz
#include SH79F9476.h
#include cpu.h
#include intrins.h
#include api_ext.hvoid main()
{// 时钟设置高速模式CLKCON 0x08;Delay();CLKCON | 0x04;// P0.0,P0.1设置为输出P0CR 0x03;P0 0x00;// 允许所有中断IEN0 | 0x80;// 打开定时器2中断 IEN1 | 0x04;// 设置定时器工作在重载模式忽略T2EX引脚检测T2CON 0; // 选择定时器为递增定时器时钟源为系统时钟(未使用1/12分频)T2MOD 0x80; // 这里 0xD11F递增到0xFFFF溢出差值12000下面公式里24是频率24M// 定时12000*1/24500usTL2 0x1F; TH2 0xD1;// 重载计数器 ValueRCAP2L 0x1F; RCAP2H 0xD1;// 启动定时器T2CON | 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON 0x80){// 溢出标志位清0T2CON 0x7F;// 翻转P0_0P0_0 ~P0_0;}// 检测到外部事件下降沿if (T2CON 0x40){// 1011 1111 T2EX引脚外部事件被检测到的标志位清0T2CON 0xBF;// 翻转P0_1P0_1 ~P0_1;}_pop_(INSCON);
}5. 工作方式2 可编程时钟输出
1功能介绍
T2端口可以编程输出50%的占空比时钟周期。清C/T2位和置T2OE位使定时器2作为时钟发生器。TR2位启动和中止定时器。
时钟频率为 F 1 2 ∗ 2 ∗ f S Y S 65536 − [ R C A P 2 H , R C A P 2 L ] F \frac{1}{2*2} * \frac{f_{SYS}}{65536-[RCAP2H,RCAP2L]} F2∗21∗65536−[RCAP2H,RCAP2L]fSYS
定时器2溢出不产生中断所以定时器2可以作时钟输出。
功能框图
2软件实现
下面示例中系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 124MHz 内部 RC 作为振荡器 2”。
#include SH79F9476.h
#include cpu.h
#include intrins.h
#include api_ext.hvoid main()
{// 时钟设置高速模式CLKCON 0x08;Delay();CLKCON | 0x04;// P0.0,P0.1设置为输出P0CR 0x03;P0 0x00;// 关闭定时器2中断IEN1 0xFB; T2CON 0;// P13作为T2输出T2MOD 0x82; // 系统时钟为24M,可产生100Hz的时钟 f(1/4)*(Fsys/(65536-[RCAP2H,RCAP2L]))RCAP2L 0xA0; RCAP2H 0x15;TL2 0xA0;TH2 0x15;// 启动定时器T2CON | 0x04; while (1);
}
// TIMER2的中断
void INT_TIMER2(void) interrupt 9
{_push_(INSCON);Select_Bank0();// 定时器溢出if (T2CON 0x80){// 溢出标志位清0T2CON 0x7F;// 翻转P0_0P0_0 ~P0_0;}// 检测到外部事件下降沿if (T2CON 0x40){// 1011 1111 T2EX引脚外部事件被检测到的标志位清0T2CON 0xBF;// 翻转P0_1P0_1 ~P0_1;}_pop_(INSCON);
}程序运行后T2 输出口P1_3输出 100Hz 频率时钟。 输出波形如下图所示
三、其它定时器介绍
1. 定时器3
定时器3是16位自动重载定时器通过两个数据寄存器TH3和TL3访问由T3CON寄存器控制。IEN0寄存器的ET3位置1允许定时器3中断。
定时器3只有一种工作方式 16位自动重载计数器/定时器。 代码示例 IEN0 | 0xA0; //打开定时器3中断_push_(INSCON);Select_Bank1();T3CON 0x02; //外部32.768kHz/128kHz为时钟源1分频//配置定时器的初值为0xfffe,溢出时间为2个128kHz时钟TL3 0xfe; TH3 0xff;T3CON |0x04; //启动定时器3_pop_(INSCON);void INT_TIMER3(void) interrupt 5
{ _push_(INSCON);Select_Bank0();P0_0 ~P0_0;_pop_(INSCON);
}系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 124MHz内部 RC 作为振荡器 2”全速运行后T3 时钟为低频 128k 时钟P0_0 引脚输出 32k 频率方波。
2. 定时器4
定时器4是16位自动重载定时器。通过两个数据寄存器TH4和TL4访问由T4CON寄存器控制。IEN1寄存器的ET4位置1允许定时器4中断。
定时器4有2种工作方式 16位自动重载定时器和有T4边沿触发的16位自动重载定时器。
官方代码示例
void init_timer4()
{IEN0 | 0x84; //EA,ET4,中断使能_push_(INSCON);Select_Bank1();#ifdef TIMER4_OUTT4CON 0x40; //T4引脚输出//配置定时器的初值为0x8000,T4引脚输出周期为2*0x8000个系统时钟的方波TL4 0x00; TH4 0x80;#endif#ifdef TIMER4_EDGETRIGT4CON 0x48; //T4上升沿触发且可以多次触发TL4 0x00;TH4 0x00;#endifT4CON |0x02; //启动定时器4Select_Bank0();_pop_(INSCON);
}void INT_TIMER4(void) interrupt 2
{ _push_(INSCON);Select_Bank0();P0_0 ~P0_0;_pop_(INSCON);
}启用 TIMER4_OUT
系统时钟 Option 选择“内部 128kHz RC振荡器作为振荡器124MHz内部RC作为振荡器2”全速运行后时钟为系统时钟T4引脚P1_1输出周期为 2.7302ms 方波。
启用 TIMER4_EDGETRIG
系统时钟 Option 选择“内部 128kHzRC 振荡器作为振荡器 124MHz 内部 RC 作为振荡器 2”全速运行后: 向 T4P1_1输入一个上升沿P0.0状态翻转一次向T4 P1_1输入周期性的上升沿若周期小于T4定时时间2.7302ms T4 将一直处于重新计时状态P0.0 将无波形输出若周期大于 T4 定时时间2.7302msP0.0输出方波。
3. 定时器5
定时器5是16位自动重载定时器。通过两个数据寄存器TH5和TL5访问由T5CON寄存器控制。IEN0寄存器的ET5位置1允许定时器5中断。
定时器5有一种工作方式16位自动重载定时器。
官方代码示例
void init_timer5()
{IEN0 | 0x88; //EA, ET5_push_(INSCON);Select_Bank1();//配置定时器的初值为0xD120,溢出时间为0x2EE0个系统时钟TL5 0x20; TH5 0xD1;T5CON |0x02; //启动定时器5_pop_(INSCON);
}void INT_TIMER5(void) interrupt 3
{ _push_(INSCON);Select_Bank0();P0_0 ~P0_0;_pop_(INSCON);
}系统时钟 Option 选择“内部 128kHz RC 振荡器作为振荡器 124MHz 内部 RC 作为振荡器 2”运行后时钟为系统时钟P0_0 引脚输出 1kHz 频率方波。
本文学习资源来自中颖官网芯片文档 本文代码开源地址 https://gitee.com/xundh/learn-sinowealth-51