中断问题--新概念51单片机书上的一道编程

2019-07-15 22:45发布

使用发光管1秒亮灭
#include<reg52.h>
#define uchar        unsigned char
#define        uint        unsignef int
sbit L1=P1^0;
uchar num;
void main()
{
        TMOD=0x01;
        TH0=(65536-45872)/256;
        TH0=(65536-45872)%256;
        TF0=0;
        L1=0;
        ET0=1;
        TR0=1;
        EA=1;
        while(1);
}
void to_time() interrupt 1
{
        TH0=(65536-45872)/256;
        TH0=(65536-45872)%256;
        num++;
        if(num==20)                //此处应该是20,可才是280ms,只有是71时才是1s变化一次
        {
                num=0;
                L1=~L1;
        }
       
}

希望能告诉我原因
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
paddylee2011
1楼-- · 2019-07-16 02:17
你是怎么知道才280ms的呢?晶振频率是多少呢?
lzm123321
2楼-- · 2019-07-16 06:50
对啊  晶振频率多少啊??                                                      
powenlei
3楼-- · 2019-07-16 08:35
你给TH0赋值了两次哦,会以第二次赋值为准
天爱随风
4楼-- · 2019-07-16 14:32
 精彩回答 2  元偷偷看……
121361061
5楼-- · 2019-07-16 20:13
这个我以前也写过。。。
121361061
6楼-- · 2019-07-16 20:48
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1 =P1^1;
uchar num;
void main()
{
num=0;
TMOD = 0x01;
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器
while(1)
{
if(num==20)
        {
                num=0;
                led1=~led1;
        }
}

}
void T0_time() interrupt 1
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
num++;

}

一周热门 更多>