/* * T1_T2_T3_2023_1.c * * Created: 2023/5/30 22:49:53 * Author : XY */ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> void device_init(void) { DDRD |= 0xf0; PORTD &= 0x0f; DDRB |= (_BV(PB4)|_BV(PB6)); DDRE |= _BV(PE7); } void timer1_init(void) { TCCR1B = 0x00; //stop OCR1AH = 0x3D; //TOP of T1 OCR1AL = 0x08; OCR1BH = 0x3D; OCR1BL = 0x08; TCCR1A = 0x10; TCCR1C = 0x00; TCCR1B = 0x0B; //start Timer } void timer2_init(void) { TCCR2B = 0x00; //stop ASSR = 0x20; //set async mode OCR2A = 0x80; TCCR2A = 0x42; TCCR2B = 0x06; //start } void timer3_init(void) { TCCR3B = 0x00; //stop OCR3AH = 0x3D; OCR3AL = 0x08; TCCR3A = 0x00; TCCR3C = 0x00; TCCR3B = 0x0B; //start Timer } ISR(TIMER3_COMPA_vect) { PORTE ^= _BV(PE7); } int main(void) { device_init(); timer1_init(); timer2_init(); timer3_init(); TIMSK3 = 0x02; sei(); while (1) { SMCR |= (0x00<<SM0); sleep_mode(); } }在SMCR |= (0x00<<SM0),SMCR |= (0x00<<SM0),SMCR |= (0x02<<SM0)三种情况下的运行结果
时间: 2024-03-19 14:40:11 浏览: 61
BDI3000 QorIQ QorIQ P3/P4/P5/T1/T2/T4 用户手册
在 SMCR |= (0x00<<SM0)的情况下,MCU 进入 Power-save 模式,此时所有定时器正常工作,LED 灯的亮灭由程序控制。由于程序中没有设定 LED 灯的状态,因此 LED 灯可能会一直亮着或熄灭,具体状态不确定。
在 SMCR |= (0x00<<SM0)的情况下,MCU 仍然进入 Power-save 模式,定时器 T1 和 T3 仍然正常工作,LED 灯的亮灭由定时器控制。定时器 T2 停止工作,LED 灯将保持上一次的状态。由于程序中没有设定 LED 灯的初始状态,因此 LED 灯可能会一直亮着或熄灭,具体状态不确定。
在 SMCR |= (0x02<<SM0)的情况下,MCU 进入 Idle 模式,定时器 T1 和 T3 仍然正常工作,LED 灯的亮灭由定时器控制。定时器 T2 停止工作,LED 灯将保持上一次的状态。由于 MCU 进入 Idle 模式,处理器将停止工作,直到下一个中断出现。因此程序中的 while(1) 循环将不再执行,程序将停留在 sleep_mode() 语句处,直到下一个中断出现。在该模式下,MCU 的功耗比 Power-save 模式低,但是定时器 T2 停止工作,可能会影响系统的实时性能。
阅读全文