单片机编程中TMOD |= 0x10;TMOD &= 0xdf;是什么意思??

这有一个初始化定时器1的函数:
void timer1_init()
{
TMOD |= 0x10;
TMOD &= 0xdf;
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;
}

不理解TMOD |= 0x10;TMOD &= 0xdf; 为什么要这样写?
TMOD |= 0x10;差不多可以理解,可是TMOD &= 0xdf;是什么意思呢??

TMOD:定时器/计数器模式控制寄存器

GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   

当INT0引脚为高电平时TR0置位,启动定时器T0;   

当INT1引脚为高电平时TR1置位,启动定时器T1。   

GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。   

Ⅱ,C/T——功能选择位   C/T=0时为定时功能,C/T=1时为计数功能。   置位时选择计数功能,清零时选择定时功能。   

Ⅲ,M0、M1——方式选择功能   由于有2位,因此有4种工作方式   ================================================================   

M1M0 工作方式 计数器模式 TMOD(设置定时器模式)   

0 0 方式0 13位计数器 TMOD=0x00   

0 1 方式1 16位计数器 TMOD=0x01   

1 0 方式2 自动重装8位计数器 TMOD=0x02   

1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 

void timer1_init()   //这里是定时器1初始化函数

{

 TMOD |= 0x10;          //TMOD   里 MO 置1

 TMOD &= 0xdf;        //TOOD 里  M1 清零     定时器选择为 16位定时模式

 TH1   = 0xFC;          //下面2句是 定时器的初值 也就是你定时器需要定时的时间

 TL1   = 0x67;

 TR1   = 1;               //启动定时器。

}

如果不懂 可以去我百度空间留言 。。。希望以上对你有帮助。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-03
TMOD |= 0x10 特殊寄存器TMOD第五位置1,其它不变!
TMOD &= 0xdf特殊寄存器TMOD第六位置0,其它不变!
这两条都是在设置单片机定时器的参数!本回答被提问者采纳
第2个回答  2011-02-17
TMOD |= 0x10;详单于TMOD=TMOD|0x10
如果有定时器0打开这样写就不影响定时器0了,如果你写成TMOD=0x10;而前面定时器0也是打开的,这么写前面的定时器就关闭了受到了影响
第3个回答  2011-02-17
特殊写法Al=B是AB相或,结果写到A,与A=AlB等价,A&=B,与A=A&B等价

单片机编程中TMOD |= 0x10;TMOD &= 0xdf;是什么意思??
TMOD |= 0x10; \/\/TMOD 里 MO 置1 TMOD &= 0xdf; \/\/TOOD 里 M1 清零 定时器选择为 16位定时模式 TH1 = 0xFC; \/\/下面2句是 定时器的初值 也就是你定时器需要定时的时间 TL1 = 0x67;TR1 = 1; \/\/启动定时器。} 如果不懂 可以去我百度空间留言 。。。...

什么叫16位单片机
0x10、0x00、0x70、0xdf 是8位的16进制数据 TL1、TR1、TMOD是单片机的特殊寄存器 这是几个是用来控制计数\/中断器的 16位单片就是可以并行输出16位数据的

TMOD的控制
TMOD |= 0x10;\/\/ TMOD = TMOD | 0x10; 这句话你在仔细想想,他实际达到的效果是指将那一位置一,别的位没有变,没有清零 例如TMOD=1100 1100然后运算TMOD |= 0x10;结果为1101 1100 希望可以帮到你,谢谢

用单片机C语言控制6位密码锁。要求有一个清除键和确认键,密码输错了...
0XBF,\/\/字符-的共阳极段码 }; \/\/定义LED位码控制码uchar code BITCODE[]={0Xfe,0Xfd,0Xfb,0Xf7,0Xef,0Xdf,0Xbf,0X7f}; uchar DispBuf[6]; \/\/保存显示的字符bit DispNormal; \/\/控制显示时,是正常显示还是闪烁显示。uchar DispCnt; \/\/控制闪烁显示时的频率。#define SHORT_TIME 10 \/\/蜂鸣器响200ms...

用51单片机控制八个发光二极管
TMOD=0x10;TH1=(65535-50000)\/256; \/\/ 50ms一次 TL1=(65535-50000)%256;EA=1;ET1=1;\/\/开定时器1中断 TR1=1;\/\/启动定时器1 t=0;i=0;while(1){ } } void timer1() interrupt 3 { TH1=(65535-50000)\/256; \/\/ 50ms一次 TL1=(65535-50000)%256;t++;if(t==20){ t=0;P...

单片机设计简易正弦波发生器
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上...

单片机动态数码管显示的余晖问题
导致的原因一般是:选下一位的时候没有关掉上一次的数据,导致上一次的数据被带到下一位;所以一般都会在显示结束后关掉数码管,下次扫描的时候给数据就不会被黏在一起。我也经常遇到,不过遇到多了就知道解决的方法和原因,希望能帮助到你~

单片机频率计原理程序代码
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};\/\/***数码管段代码表(P2口,共阴且高位接a,低位接h笔段)***\/\/ unsigned char code dispcode[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00}...

单片机数码管动态显示
TMOD=0x01;TL0=0x10;TH0=0xf0;} \/\/\/***1ms延时程序 void delay_1ms(unsigned char i){ unsigned char j;for(i=0;i<144;i++)for(j=0;j<144;j++);} \/\/***主程序 void main(void){ TMOD=0x01;TL0=0x10;TH0=0xf0;while(1){ dispbitcnt=0;P1=0x00;\/\/开段码 P2=0x00;\/...

51单片机里TMOD设置问题
led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};main(){ unsigned char counter,i;TMOD=0x01;TL0=-50000%256;TH0=-50000\/256;TR0=1;while(1){ while(TF0){ TF0 = 0;TL0=15536%256;TH0=15536\/256;counter++;if(counter==20){ P3=led[i++];counter=0;if(i==8){ i=...

相似回答