这有一个初始化定时器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; //启动定时器。
}
如果不懂 可以去我百度空间留言 。。。希望以上对你有帮助。
单片机编程中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=...