0x00

0x00,第1张

0x00 “0x00”是什么意思?0x00什么意思windows 无法连接到打印机。 *** 作失败,错误为0x0000011b?单片机P2=0x00是什么意思,P2是哪个口51单片机定时器初值为0x00,计数时0x00计算在内吗?

没理解你的问题,看来你对定时器的工作还有一些疑惑,用STC89C52单片机来说,它有3个定时器,分别是T0,T1和T2。

其中T2有捕捉功能。

举例如定时器配置为 16 位定时器/计数器(模式1), TL0 的 8 位和 TH0 的 8 位所构成16位计数器(就是2位数16位,转换为10进制就是0到65535),当它溢出是将置位TCON的TF0位。

如果开了T0中断,将进入T0中断程序(一定要有,哪怕是空的),硬件将自动清除中断标志。

初值的意义就是从这个数字开始到65536溢出,这个差值乘以计数周期就是定时的时间。

如果初值为0,就是最长定时周期,如果为65535,就是来一个计数周期,就会溢出,产生中断。

用一段程序来说明。

要使用定时器,需要设置TMOD定时器寄存器,指定工作模式,设置定时器初值。

开定时器,开中断。

如果不开,就需要程序中手动判断TF0标志位,进行处理。

void T0_init() { TMOD&=0xF0; TMOD|=0x01; TH0=0xEE; TL0=0x00; TR0=1; //开定时器 ET0=1; //开中断} void Timer0() interrupt 1 //中断程序,需要重新赋初值{ static unsigned char cnt=0; TH0=0xEE; TL0=0x00;cnt++; //200次中断,产生1秒标志位 if(cnt>=200) { cnt=0; flag1s=1; LED=~LED; //1sLED指示 } P0 = 0xFF; //消隐 switch(i) //动态切换P0口,显示LED值{ case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=(LedBuff[1]&0x7F);break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i=0; P0=LedBuff[2];break; default:break; }} 附图是T0模式1的结构,89C52可以选择6T(速度快1倍))或12T模式。

定时器计数器模式选择。

是否与外部中断0一起控制启动计数器(脉宽测量)。

来一个计数脉冲TH0TL0加1,到65536,溢出置位标志TF0,产生中断。

题主你好!单片机中0x00作为定时器的初值,在计数时0x00不计算在内,但参与了计数。

为何这样说,从以下分析便可清楚。

1:51单片机的定时器/计数器是加计数器。

工作时该单片机有0至3四种工作方式,每种方式的定时/计数最大值都不一样;2:设定某种方式后,都是定时/计数到该方式最大值后才会溢出,产生中断信号给单片机中CPU。

溢出启动中断后须对中断位清零,重新对定时器高低赋值。

3:假设设定定时工作方式为0方式,此时单片机定时/计数最大值为8192,若设定初值为0x00,启动定时器后,定时器便会以0x00为基数开始加1,直至数满溢出,产生中断。

具体过程参看下图便明白。

从上面波形图可以看出:①:定时初值赋为0x00时,定时从0到1每加一次,都由一个由高(低)到低(高)的高低两个电平组成;②赋初值为零(0x00)时,定时启动后,无论0x00处是高或低电平开始,都竖到1(0x01)才为加1。

故而讲,0x00计数时不计算在内,但参与了计数!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/3639653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-13
下一篇 2022-10-13

发表评论

登录后才能评论

评论列表(0条)

保存