新手提问有关寄存器TMOD的问题
时间:10-02
整理:3721RD
点击:
本人是初学者,想问以下请问各位大神,以下是对TMOD寄存器的两种不同的赋值方法,请问效果是一样的么?
第一种:TMOD=0x20;
第二种:
#define TMOD7_CLR (1<<7)
#define TMOD6_CLR (1<<6)
#define TMOD5_SET (1<<5)
#define TMOD4_CLR (1<<4)
#define TMOD3_CLR (1<<3)
#define TMOD2_CLR (1<<2)
#define TMOD1_CLR (1<<1)
#define TMOD0_SET 1
TMOD=0x00;
TMOD&=~TMOD7_CLR; //GATE=0;
TMOD&=~TMOD6_CLR; //C/T=0; as timer Not counter
TMOD|=TMOD5_SET; //M1=1;
TMOD&=~TMOD4_CLR; //M0=0; Time1 Mode: 10 8bit auto
TMOD&= TMOD3_CLR; //GATE=0;
TMOD&=~TMOD2_CLR; // C/T=0; as timer
TMOD&=~TMOD1_CLR; // M1=0;
TMOD&=~TMOD0_CLR; // M0=0; Time0 Mode : 00 13bit
第一种:TMOD=0x20;
第二种:
#define TMOD7_CLR (1<<7)
#define TMOD6_CLR (1<<6)
#define TMOD5_SET (1<<5)
#define TMOD4_CLR (1<<4)
#define TMOD3_CLR (1<<3)
#define TMOD2_CLR (1<<2)
#define TMOD1_CLR (1<<1)
#define TMOD0_SET 1
TMOD=0x00;
TMOD&=~TMOD7_CLR; //GATE=0;
TMOD&=~TMOD6_CLR; //C/T=0; as timer Not counter
TMOD|=TMOD5_SET; //M1=1;
TMOD&=~TMOD4_CLR; //M0=0; Time1 Mode: 10 8bit auto
TMOD&= TMOD3_CLR; //GATE=0;
TMOD&=~TMOD2_CLR; // C/T=0; as timer
TMOD&=~TMOD1_CLR; // M1=0;
TMOD&=~TMOD0_CLR; // M0=0; Time0 Mode : 00 13bit
效果是一样的,第二种就更清楚了
其实第二种方法才算正确,第一种方法会改变tmod里的所有位,而第二种方法每句话只改变tmod的某一位