中断函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
总结:
WGM1=4时, 最大值由OCR1A设定,TOP时 产生OCF1A比较匹配中断 WGM1=12时,最大值由ICR1设定, TOP时产 生ICF1输入捕捉中断
计算公式:fOCn=fclk_IO/(2*N*(1+TOP)) 变量N 代表预分频因子(1、8、32,64、256,1024)。
快速PWM
第4步:定时器中断标志寄存器:TIFR
第5步:编写中断服务程序 #pragma interrupt_handler 函数名:向量号(int0:2) 中断函数 int0(){}
普通模式
和51单片机的定时计数器类似,根据设定 的时钟频率,每过一个时钟,计数寄存器数值 加1。 用到的寄存器: 1、T/C1控制寄存器B
MCUCSR寄存器
ICS2
说明
0
1
INT2 的下降沿激活中断
INT2 的上升沿激活中断
GICR寄存器
INTx 1 0 2
说明
当INT1 =1, SREG 的I标志置位;使能外部中断请求1 当INT1 =1, SREG 的I标志置位;使能外部中断请求0 当INT1 =1, SREG 的I标志置位;使能外部中断请求2
GICR SREG
MCU控制寄存器 INT2
通用中断控制寄存器 使能全局中断
MCUCR寄存器
ICSx1 0 0 1 1
ICSx0 0 1 0 1
说明 INTx为低电平时产生中断请求 INTx 引脚上任意逻辑电平变化都将引发中断 INTx的下降沿产生异步中断请求 INTx的上升沿产生异步中断请求
输入捕获模式
T/C 的输入捕捉单元可用来捕获外部事件, 并为其赋予时间标记以说明此时间的发生时刻。 外部事件发生的触发信号由引脚ICP1 输 入,也可通过模拟比较器单元来实现。 时间标记可用来计算频率、占空比及信号 的其它特征,以及为事件创建日志。
第七讲 中断、定时器
I/O端口的第二功能
内容:
外部中断T0 T1 T2
M16的外部中断
Baidu Nhomakorabea
M16具有3个外部中断 INT0、INT1: 支持4种触发模式,同步触发 INT2 支持2种触发模式,异步触发
M16外部中断有关寄存器
MCUCR
MCU控制寄存器 INT0、INT1
MCUCSR
相位修正PWM
用到的寄存器:
1、T/C1控制寄存器A
2、T/C1控制寄存器B
3、输出比较寄存器1A-OCR1A
4、输出比较寄存器1B-OCR1B
总结:
双斜波计数,用于输出高精度的,相位准确的,对称的PWM 信号 都有TOV1溢出中断,但发生在BOOTOM时 比较匹配后可以产生OCF1x比较匹配中断. WGM1=1时, 最大值为0x00FF, 8位分辨率 WGM1=2时, 最大值为0x01FF, 9位分辨率 WGM1=3时, 最大值为0x03FF,10位分辨率 WGM1=10时,最大值由ICF1设定, TOP时产生ICF1输入捕捉 中断 (单缓冲) WGM1=11时,最大值由OCR1A设定,TOP时产生OCF1A比较 匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) 改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数 值可以输出0%~100%占空比的PWM信号 计算公式:fPWM=fclk_IO/(2*N*TOP)
1、T/C1控制寄存器A
2、T/C1控制寄存器B
3、输出比较寄存器1A-OCR1A
4、输出比较寄存器1B-OCR1B
总结:
单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率) 都有TOV1溢出中断,发生于TOP时 比较匹配后可以产生OCF1x比较匹配中断 WGM1=5时, 最大值为0x00FF, 8位分辨率 WGM1=6时, 最大值为0x01FF, 9位分辨率 WGM1=7时, 最大值为0x03FF,10位分辨率 WGM1=14时,最大值由ICR1设定, TOP时产生ICF1输入捕捉中断 (单缓冲) WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配 中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) 改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值 注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期 的窄脉冲,而不是一直为低电平 计算公式:fPWM=fclk_IO/(N*(1+TOP))
定时/计数器1(16位)
普通模式 CTC模式 快速PWM模式 相位修正PWM模式 相位频率修正PWM模式 输入捕获模式
外部中断使用步骤
第1步:设置T/C控制寄存器 控制寄存器:TCCR0、TCCR1A、TCCR1B 计数单元的初值:TCNT0 比较输出寄存器:OCR0 第2步:定时器中断屏蔽寄存器:TIMSK 第3步:使能全局中断 SREG=0x80;或者是SEI();
2、计数寄存器
3、T/C1中断屏蔽寄存器
注:使用中断时必须先开启总中断SREG|=BIT(7)
CTC模式
用于输出50%占空比的方波信号 用于产生准确的连续定时信号
用到的寄存器:
1、T/C1控制寄存器A
2、T/C1控制寄存器B
3、输出比较寄存器1A-OCR1A
4、输出比较寄存器1B-OCR1B
SERG寄存器
说明
BIT7 全局中断使能
注:使用中断时必须先开启总中断SREG|=BIT(7)
外部中断使用步骤
第1步:设置中断触发方式 任意逻辑电平变化: MCUCR |= (1 << ISC00); 下降沿触发:MCUCR |= (1 << ISC01)|(0<< ISC00); 上升沿触发:MCUCR |= (1 << ISC01)|(1<< ISC00); 第2步:使能响应相应外部中断 GICR |= (1 << INT0); 第3步:使能全局中断 SREG=0x80;或者是SEI(); 第4步:编写中断服务程序 #pragma interrupt_handler 函数名:向量号(int0:2) 中断函数 int0(){}