微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求指教80c52,2个定时器,灯闪烁时间不同

求指教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;
}
}

这个是我昨天回答的一个问题,没想到今天依然有用,让我这个老菜鸟给你回答吧,与或非你知道是啥意思了吧?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   

嗯嗯  明白了 谢谢  

嗯嗯    谢谢  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top