初学者为什么不能用T0中断切换LED点灯数呢!(问题解决)

2019-07-15 19:04发布

本帖最后由 colin_lyq 于 2014-7-27 13:41 编辑

初学者疑问,为什么不能用T0中断切换LED点灯数呢!

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar T0_namber;
uint num;
uchar code namber[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void init(void);
//--------------
void main()
{
        init();
        while(1)
        {
                P0=namber[num];
        }

}
///////////////////

void init(void)
{
        TMOD=0x01;
        TH0=(65536-15536)/256;
        TL0=(65536-15536)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
////////////////////

void T0_time()interrupt 1
{
        TH0=(65536-15536)/256;
        TL0=(65536-15536)%256;
        T0_namber++;
        if(T0_namber==50)
        {
                T0_namber=0;
                num++;
        }

}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
稀影人
1楼-- · 2019-07-16 18:00
num要设置范围 否则程序运行会出错
colin_lyq
2楼-- · 2019-07-16 22:56
本帖最后由 colin_lyq 于 2014-7-26 18:31 编辑

按上面的提示做了些修改,但是还不行!各位再看一下,谢了!


#include<reg51.h>#define uchar unsigned char
#define uint unsigned int
uchar code dx516[3] _at_ 0x003b;//仿真语句
sbit led=P0^0;
uchar T0_number,num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void init();
//--------------
void main()
{
        init();
        while(1)
        {
                if(num==9)
                {
                        num=0;
                }
                P0=table[num];
        }

}
///////////////////

void init()
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        T0_number=0;//初始0
        num=0;//初始0
}
////////////////////

void T0_time()interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        T0_number++;
        if(T0_number==20)
        {
                T0_number=0;
                num++;
                led=~led;//1S闪烁
        }

}

colin_lyq
3楼-- · 2019-07-17 03:34
运行的结果是卡在P0=0X3f这个状态,LED灯高2位长亮!
colin_lyq
4楼-- · 2019-07-17 07:11
 精彩回答 2  元偷偷看……
colin_lyq
5楼-- · 2019-07-17 08:31
colin_lyq 发表于 2014-7-25 16:25
刚在keil 51软件上仿真,是可以运行的,是不是用89C516硬件仿真出问题了,写一片IC试一下! ...


烧写OK了,试了一下,程序达到要求了,看来是硬件仿真出的问题!
xuyi123
6楼-- · 2019-07-17 13:01
呵呵 同时新手 学习了

一周热门 更多>