K60的计时器/定时器的简单介绍

本文详细介绍了微控制器中常见的定时器模块(如PIT、低功耗定时模块LPTMR、定时器FTM、载波调制发生器CMT)及其实时时钟RTC的功能、特点和应用场景,旨在帮助开发者深入了解这些核心组件的工作原理及如何在实际项目中高效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一. 可编辑延迟模块(PDB)

PDB的基本知识:

1)用途:可以为编辑间隔ADC模块的硬件触发时间,也可以编辑DAC模块间隔触发的可控时延,提供转换精准时间。

2)资源:15中输入触发源;分别有8路的配置ADC和DAC触发通道;8路的脉冲输出。

二.定时器FTM

1)用途:支持输入捕捉,输出比较,产生可以用来控制电机的PWM信号,和电源管理应用的通道计时。

2)资源:可选的时钟原有内部时钟、固定频率、外部时钟源;具有1、2、4、8、16、32、64、128预分频;一个可以进行无符号或者有符计数的16位计数器,为FYM定时提供参考;每一个通道可以配置输入捕捉,输出比较或者边缘对齐的PWM信号;每个通道的极性也是可以配置的,并产生报告溢出中断、通道中断、故障中断等中断。

三.PIT模块

1)用途:是一组用于产生中断与DMA触发的定时器,所有的中断都是可以屏蔽的,每个定时器都有独立的溢出周期,另外周期中断都没有外部引脚。

四.低功耗定时模块LPTMR

1)用途:可以被配置成可选预分频因子的的定时器计数器,也可以被配置成可选的干扰滤波器脉冲计数器。绝大多数的系统复位都不会影响其继续使用,可以用作天数计数器。

五.载波调制发生器CMT

1)用途:载波调制发射器CMT(Carrier Modulator Transmitter)模块为多种编码方案提供了协议时序和载波信号产生的手段。

六.实时时钟RTC

1)用途:实时时钟RTC(Real Time Clock)模块是一个独立供电的模块,在芯片掉电时由备用电源(VBAT)供电,确保RTC计时器正常运行,保持RTC寄存器状态。

有两种工作模式,系统上电与系统供电。


#define TX_PIN P37 // 红外发射引脚 #define SYNC_HIGH 12 // 6ms高电平(12 * 0.5ms) #define BIT1_LOW 1 // 数据1低电平时长0.5ms #define BIT1_HIGH 3 // 数据1高电平时长1.5ms #define BIT0_LOW 3 // 数据0低电平时长1.5ms #define BIT0_HIGH 1 // 数据0高电平时长0.5ms #define END_DELAY 40 // 帧间隔20ms(40 * 0.5ms) // 定时器2初始化(0.5ms基准) void Timer2_Init() { T2L = 0x66; // 定时器2低字节 T2H = 0xEA; // 定时器2高字节(重载值EA66) AUXR |= 0x04; // 定时器2为1T模式 AUXR |= 0x10; // 启动定时器2 } // 如果T2IF定义有问题,可以使用寄存器操作: void delay_0_5ms(unsigned int count) { while(count--) { while(!(AUXR2 & 0x01)); // 等待T2IF置位 AUXR2 &= ~0x01; // 清除T2IF标志位 } } // 发送单比特数据 void send_bit(unsigned char bit_val) { if(bit_val) { // 发送"1" TX_PIN = 0; delay_0_5ms(BIT1_LOW); TX_PIN = 1; delay_0_5ms(BIT1_HIGH); } else { // 发送"0" TX_PIN = 0; delay_0_5ms(BIT0_LOW); TX_PIN = 1; delay_0_5ms(BIT0_HIGH); } } // 发送单字节数据(从最低位开始) void send_byte(unsigned char dat) { unsigned char i for( = 0; i < 8; i++) { send_bit(dat & 0x01); // 先发送最低位 dat >>= 1; // 右移准备下一位 } } // 发送完整数据帧 void send_frame(unsigned char dat) { // 发送同步头 TX_PIN = 1; delay_0_5ms(SYNC_HIGH); // 发送数据字节 send_byte(dat); // 恢复低电平并延时帧间隔 TX_PIN = 0; delay_0_5ms(END_DELAY); // 串口监控(波特率9600) // SBUF = dat; // while(!TI); // TI = 0; } // 串口初始化 void UART_Init() { SCON = 0x50; // 8位数据,可变波特率 AUXR |= 0x40; // 定时器1为1T模式 AUXR &= 0xFE; // 定时器1作串口波特率发生器 TMOD &= 0x0F; // 清除定时器1模式位 TMOD |= 0x20; // 定时器1模式2 TH1 = 0xFD; // 波特率9600(11.0592MHz) TR1 = 1; // 启动定时器1 ES = 0; // 关闭串口中断(仅查询发送) } void main() { P3M0 = 0x00; // 配置P3.7为准双向口 P3M1 = 0x00; TX_PIN = 0; // 初始低电平 Timer2_Init(); // 初始化定时器2 UART_Init(); // 初始化串口 while(1) { send_frame(0xFC); // 示例发送0xFC // 实际应用中可在此添加其他数据发送逻辑 } } 报错App.c(27): error C202: 'AUXR2': undefined identifier
最新发布
07-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值