求指教80c52,2个定时器,灯闪烁时间不同
时间:10-02
整理:3721RD
点击:
求指教 2个定时器设置一样 但是闪烁时间明显不同
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
sbit d2=P1^1;
void delayms(unsigned int);unsigned char num,num1,num2;
void main()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
while(1);
}
void dingshi1() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2==20)
{
num2=0;
d2=~d2;
}
}
void dingshi0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
d1=~d1;
}
}
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
sbit d2=P1^1;
void delayms(unsigned int);unsigned char num,num1,num2;
void main()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
while(1);
}
void dingshi1() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2==20)
{
num2=0;
d2=~d2;
}
}
void dingshi0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
d1=~d1;
}
}
这个是我昨天回答的一个问题,没想到今天依然有用,让我这个老菜鸟给你回答吧,与或非你知道是啥意思了吧?PO = 0XFE;也就是二进制的1111 1110,对不对?0x01取反等价于~0X01也就是0XFE,&是什么作用呢?让某一位清零,也就是最低位清零,而其他位保持不变,|呢?让某一位置1,其他保持不变,但是为什么要这样用呢?以后如果你有机会同时用到了两个定时器(特指51),比如说TMOD这个寄存器,他是不能进行单独的位操作的,一次必须操作整个8位数据,如果你只用到了定时器0或者是定时器1,那么你设置TMOD = 0X01;也对,但是已经影响到了定时器1的设置了,定时器1不用还好,如果用的话,就容易出错,所以你应该这样写TMOD &= 0XF0;即低四位清零,高四位不变,TMOD |= 0X01;最低位置1,高7位不改变,这就达到了互不干扰的目的,明白了吗?不明白,加QQ597627977,详聊
你的TMOD设置错了 你的T1方式设置错误,应该是方式1,不是方式0 你的T0是用了方式1,T1是用了方式0 所以时间不同 所以正确的是TMOD=0x11
嗯嗯 明白了 谢谢
嗯嗯 谢谢