找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2564|回復: 18
收起左側

為什么D2燈不亮呢?附單片機程序電路圖

[復制鏈接]
ID:1055511 發(fā)表于 2022-12-11 02:51 | 顯示全部樓層 |閱讀模式
下載.png

單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>               

#define uc unsigned char
#define ui unsigned int

sbit GM=P1^0;        
sbit RT=P1^5;        
sbit led=P3^5;      

uc sec=0;

void init()
{
        GM=0;
        RT=0;
        TMOD=0x01;         
        TH0=0x3c;
        TL0=0xb0;         
        ET0=1;         
        TR0=1;               
        EA=1;               
}



void main()
{
        init();
        while(1);
}
void T0_time() interrupt 1
{
        uc m;                                       
        TH0=0x3c;
        TL0=0xb0;                                
        m++;                                       
        if(m>=20)                              
        {
                m=0;                                
                if(RT==0||GM==0)               
                sec++;                                       
                if(RT==1&&GM==1&&sec<=5)
                {
                        sec=0;                                
                        led=0;                                
                }
                if((RT==0||GM==0)&&sec>5)
                {
                        sec=0;                              
                        led=1;                                
                }
        }
}

回復

使用道具 舉報

ID:1056573 發(fā)表于 2022-12-11 03:38 | 顯示全部樓層
void main()
{
        init();
        while(1);
}
主程序什么都沒有執(zhí)行啊,只是空運行了一下,沒有調用T0_time() interrupt 1函數。
改為:
void main()
{
        init();
        while(1)
        T0_time() interrupt 1;
}
試試。
回復

使用道具 舉報

ID:1056573 發(fā)表于 2022-12-11 03:43 | 顯示全部樓層
主程序main()空運行了一下,什么都沒有執(zhí)行啊,沒有調用T0_time() interrupt 1。將主程序改為下面的試試:
void main()
{
        init();
        while(1)
       {
            T0_time() interrupt 1;
       }  
}
回復

使用道具 舉報

ID:384109 發(fā)表于 2022-12-11 08:32 | 顯示全部樓層
定時器中斷的判斷邏輯有問題,sec永遠不會大于5
回復

使用道具 舉報

ID:88256 發(fā)表于 2022-12-11 09:45 | 顯示全部樓層
ytchfp163 發(fā)表于 2022-12-11 03:43
主程序main()空運行了一下,什么都沒有執(zhí)行啊,沒有調用T0_time() interrupt 1。將主程序改為下面的試試:
...

中斷程序不需要主程序調用的,滿足條件自己進入
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 15:26 | 顯示全部樓層
人中狼 發(fā)表于 2022-12-11 08:32
定時器中斷的判斷邏輯有問題,sec永遠不會大于5

如果這里邏輯錯誤的話那我的等應該是常亮不滅,但程序運行后燈不亮
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 15:27 | 顯示全部樓層
ytchfp163 發(fā)表于 2022-12-11 03:43
主程序main()空運行了一下,什么都沒有執(zhí)行啊,沒有調用T0_time() interrupt 1。將主程序改為下面的試試:
...

中斷程序自己就會運行的哈
回復

使用道具 舉報

ID:384109 發(fā)表于 2022-12-11 16:02 | 顯示全部樓層
sec大于還是小于5,只是邏輯判斷的其中一個條件而已,并不是唯一的
回復

使用道具 舉報

ID:94031 發(fā)表于 2022-12-11 17:17 | 顯示全部樓層
51單片機檢測端口電平前,端口要先置1,你程序沒有做到。
回復

使用道具 舉報

ID:142045 發(fā)表于 2022-12-11 17:28 | 顯示全部樓層
R5限流電阻太大了吧 1K就夠用了
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 19:57 | 顯示全部樓層
xuyaqi 發(fā)表于 2022-12-11 17:17
51單片機檢測端口電平前,端口要先置1,你程序沒有做到。

置1后通電就亮 不受控制
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 20:02 | 顯示全部樓層
還是說控制燈亮僅僅三極管不行嗎 一定要加繼電器?
回復

使用道具 舉報

ID:88256 發(fā)表于 2022-12-11 20:42 | 顯示全部樓層
招搖的狗子 發(fā)表于 2022-12-11 20:02
還是說控制燈亮僅僅三極管不行嗎 一定要加繼電器?

就一個發(fā)光二極管,不需要繼電器
回復

使用道具 舉報

ID:161164 發(fā)表于 2022-12-11 20:54 | 顯示全部樓層
定時中斷內的m是局部變量
每次離開函數后都會清零
請改為static uc m=0;
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 21:43 | 顯示全部樓層
lkc8210 發(fā)表于 2022-12-11 20:54
定時中斷內的m是局部變量
每次離開函數后都會清零
請改為static uc m=0;

修改之后并無變化

回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 21:45 | 顯示全部樓層
人中狼 發(fā)表于 2022-12-11 16:02
sec大于還是小于5,只是邏輯判斷的其中一個條件而已,并不是唯一的

這樣說我邏輯不嚴謹  要修改語句嗎?
回復

使用道具 舉報

ID:1055511 發(fā)表于 2022-12-11 21:46 | 顯示全部樓層
hhdsdy 發(fā)表于 2022-12-11 20:42
就一個發(fā)光二極管,不需要繼電器

如果就一個發(fā)光二極管燈常亮不滅
回復

使用道具 舉報

ID:384109 發(fā)表于 2022-12-11 22:11 | 顯示全部樓層
招搖的狗子 發(fā)表于 2022-12-11 21:45
這樣說我邏輯不嚴謹  要修改語句嗎?

無所謂嚴謹不嚴謹,要想有相應的動作,需要滿足的要求就都得滿足
回復

使用道具 舉報

ID:624769 發(fā)表于 2022-12-11 23:18 | 顯示全部樓層
基礎太差了!
因為,GM和RT 永遠不會 變成 1,所以,亮燈條件永遠無法達成, 因此, 你的燈永遠也不會亮!
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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