找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2192|回復: 7
收起左側

單片機中斷執(zhí)行不了,求大神解答

[復制鏈接]
ID:417505 發(fā)表于 2018-10-29 20:01 | 顯示全部樓層 |閱讀模式
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uint count;
sbit LED1 = P1^0;
void q(uchar a)
{
    uchar x,y;
    for(x = a; x > 0;x--)
    {
        for(y = 114;y > 0;y--);
    }   
}
void init()
{
    TMOD=0x01;
    TH0=0x4b;
    TL0=0xfd;
    TR0=1;
    ET0=1;
    EA = 1;//開總中斷
}
void main()
{   
    init();
    while(1)
    {               
    P1 = 0;
    }
}
void timer() interrupt 1
{
    LED1 = ~LED1;
    TH0=0x4b;
    TL0=0xfd;
    count++;
    if(count == 8)
    {
        P1 = 0xff;
        q(10);
        count = 0;
    }
}
回復

使用道具 舉報

ID:41713 發(fā)表于 2018-10-30 08:52 | 顯示全部樓層
你的While循環(huán),把P1限制為低電平了,中斷剛生效,While就馬上把電平拉低,你的燈應該一直亮。While循環(huán)里,放點別的語句,只要不是對P1的改動就行。
回復

使用道具 舉報

ID:164602 發(fā)表于 2018-10-30 08:57 | 顯示全部樓層
誰說中斷沒有執(zhí)行?燈在閃啊
程序有點小問題,我已經(jīng)修改了,在我的板子了運行通過
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uint count;
sbit LED1 = P1^0;
void q(uchar a)
{
    uchar x,y;
    for(x = a; x > 0;x--)
    {
        for(y = 114;y > 0;y--);
    }   
}
void init()
{
    TMOD=0x01;
    TH0=0x4b;
    TL0=0xfd;
    TR0=1;
    ET0=1;
    EA = 1;//開總中斷
}
void main()
{   
    init();
    while(1)
    {               
    }
}
void timer() interrupt 1
{
    LED1 = ~LED1;
    TH0=0x4b;
    TL0=0xfd;
    count++;
    if(count == 8)
    {
        q(10);
        count = 0;
    }
}
不知道你為什么要將P1置0或ff,我把它們?nèi)サ,就可以看到燈閃了。如果不去掉,燈就以PWM方式亮,亮度很暗。
回復

使用道具 舉報

ID:153397 發(fā)表于 2018-10-30 10:48 | 顯示全部樓層
膜拜樓上大神
回復

使用道具 舉報

ID:417934 發(fā)表于 2018-10-30 14:56 | 顯示全部樓層
誰說中斷沒有執(zhí)行?燈在閃啊
程序有點小問題,我已經(jīng)修改了,在我的板子了運行通過
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uint count;
sbit LED1 = P1^0;
void q(uchar a)
{
    uchar x,y;
    for(x = a; x > 0;x--)
    {
        for(y = 114;y > 0;y--);
    }   
}
void init()
{
    TMOD=0x01;
    TH0=0x4b;
    TL0=0xfd;
    TR0=1;
    ET0=1;
    EA = 1;//開總中斷
}
void main()
{   
    init();
    while(1)
    {               
    }
}
void timer() interrupt 1
{
    LED1 = ~LED1;
    TH0=0x4b;
    TL0=0xfd;
    count++;
    if(count == 8)
    {
        q(10);
        count = 0;
    }
}
回復

使用道具 舉報

ID:44335 發(fā)表于 2018-10-30 15:43 | 顯示全部樓層
你的While循環(huán),把P1限制為低電平了,中斷剛生效,While就馬上把電平拉低,你的燈應該一直亮。While循環(huán)里,放點別的語句,只要不是對P1的改動就行。
回復

使用道具 舉報

ID:410942 發(fā)表于 2018-10-30 17:11 | 顯示全部樓層
不要while 里面的P1=0;如果要它的初值是0的話可以直接放在while上面。你這樣寫的確跟定時器中斷有沖突。
回復

使用道具 舉報

ID:418093 發(fā)表于 2018-10-30 18:56 | 顯示全部樓層
修改一下循環(huán)語句
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表