我正在初始化Atmega328中溢出中断的寄存器。

我首先从以下初始化开始,但没有成功。

TCCR1B |= 0x05;
TIMSK1 |= 0x01;


然后我尝试了以下代码:

TCCR1B = (TCCR1B & B11111000) | 0x05;
TIMSK1 = (TIMSK1 & B11111110) | 0x01;


前两行代码未调用ISR,但后两行代码已调用!
怎么样?它是否必须与“读取”,“修改”,“写入”等相关联?

最佳答案

这两段代码不相等。假设TCCR1B的初始值为0xFF

TCCR1B |= 0x05; // this will result in a value of `0xFF`.

TCCR1B = (TCCR1B & B11111000) | 0x05;  // This will result in a value of '0xFD'

10-01 07:30