TMOD初始化为什么采用TMOD |= 0x01或0x10的形式?
时间: 2023-10-20 19:53:13 浏览: 127
TMOD 是定时器/计数器模式寄存器,用于配置定时器/计数器的工作方式。在进行 TMOD 的初始化时,采用 TMOD |= 0x01 或 0x10 的形式是为了设置相应的位,而不影响其他位的值。
"|=" 运算符是按位或赋值运算符,它将右侧操作数的位与左侧操作数的对应位进行按位或操作,并将结果赋值给左侧操作数。因此,TMOD |= 0x01 表示将 TMOD 寄存器的低字节的最低位设置为 1,而保持其他位的值不变。同样地,TMOD |= 0x10 表示将 TMOD 寄存器的高字节的最低位设置为 1,而保持其他位的值不变。
这种形式的初始化可以方便地设置 TMOD 的相应位,而不需要关心其他位的值。通过按位或操作,可以将需要设置为 1 的位置为 1,而不影响其他位置的值。这样可以确保在初始化 TMOD 时,只修改了需要修改的位,而不影响其他配置。
相关问题
void InterruptInit() { TMOD &= 0xf0; TMOD |= 0x02; TH0 = 0x9c; TL0 = 0x9c; ET0 = 1; EA = 1; TR0 = 1; }
这是一个初始化定时器中断的函数。首先通过修改TMOD寄存器的值来设定计时器0的工作模式为模式2。然后分别将TH0和TL0寄存器的值设为0x9c,这样定时器0的计数初值就为65536-100=65436,即每隔100个机器周期(约为1ms)就会产生一次中断。接着将ET0和EA寄存器的相应位设置为1,使能定时器0中断和总中断。最后将TR0寄存器的值设为1,启动定时器0。这样,当计时器0溢出时,就会自动产生中断,进入中断服务函数。
void Timer0_Init(void) //1??@11.0592MHz { AUXR |= 0x80; //?????1T?? TMOD &= 0xF0; //??????? TL0 = 0x00; //??????? TH0 = 0x28; //??????? TF0 = 0; //??TF0?? TR0 = 1; //???0???? ET0 = 1; EA = 1; }
这是一段用于初始化定时器0的代码,该定时器是在11.0592MHz下运行的。其中AUXR |= 0x80;是设置定时器0为1T模式,TMOD &= 0xF0;是清零定时器0的控制寄存器,TL0和TH0分别设置定时器0的初值和重载值,TF0是定时器0的溢出标志位,TR0是定时器0的启动位,ET0是定时器0中断允许位,EA是总中断允许位。整个代码的功能是初始化定时器0,并开启定时器0中断。
阅读全文