找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1617|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

STC89C52單片機(jī)的中斷0外部引腳輸入脈沖信號進(jìn)行計數(shù)時,經(jīng)常進(jìn)入不了中斷

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65580 發(fā)表于 2024-5-9 11:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STC89C52的中斷0外部引腳輸入脈沖信號進(jìn)行計數(shù)時,經(jīng)常進(jìn)入不了中斷,反復(fù)開關(guān)電源中的某次能正常中斷計數(shù)這是什么原因
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:57657 發(fā)表于 2024-5-9 13:08 | 只看該作者
外部中斷進(jìn)不去的原因有很多,具體需要有程序和原理圖才能知道什么問題,可能是中斷優(yōu)先級配置不正確或脈沖頻率過高、電平不兼容等問題造成的。
回復(fù)

使用道具 舉報

板凳
ID:161164 發(fā)表于 2024-5-9 13:22 | 只看該作者
貼代碼啊
回復(fù)

使用道具 舉報

地板
ID:624769 發(fā)表于 2024-5-9 13:52 | 只看該作者
對外部脈沖信號計數(shù)最好直接用定時器,而不是時外部中斷。如果計數(shù)的同時,還要獲取脈寬或者頻率信息,應(yīng)當(dāng)直接用定時器2,可以詳細(xì)參考手冊的 定時器2的CP章節(jié)
回復(fù)

使用道具 舉報

5#
ID:77589 發(fā)表于 2024-5-9 14:12 | 只看該作者
這個問題需要算命先生回答
回復(fù)

使用道具 舉報

6#
ID:1109793 發(fā)表于 2024-5-9 15:13 | 只看該作者
也可能是出不來
回復(fù)

使用道具 舉報

7#
ID:111517 發(fā)表于 2024-5-9 15:58 | 只看該作者
中斷使能是否開啟?中斷引腳是否正確?計數(shù)器是否正確?
回復(fù)

使用道具 舉報

8#
ID:65580 發(fā)表于 2024-5-9 16:19 | 只看該作者
#include "Exter0.h"
#include "Public.h"
#include<STC89C5xRC.H>

void init_Exter0()
{
        //設(shè)置INT0
        IT0=1;//跳變沿出發(fā)方式(下降沿)
        EX0=1;//打開INT0的中斷允許。程序中斷0口上電就運行       
        EA=1;   //IE中斷允許寄存器
}

#include<STC89C5xRC.H>

#include "24c02.h"
#include <stdio.h>
#include "Lcd1602.h"
#include "4x4keyboard.h"
#include "intrins.h"
#include "Exter0.h"
#include "Exter1.h"
#include"Timer0_ZJ.h"

//#include<reg52.h>
#include <absacc.h>
#include "Public.h"
#include "auto485SF-ZJ.h"

#define uint_long unsigned long int


sbit S1=P1^0;//測試按鈕
sbit S2=P1^1;//臨時測試


sbit M1ZZ=P2^0;//電機(jī)控制-正轉(zhuǎn)
sbit M1FZ=P2^1;//電機(jī)控制-反轉(zhuǎn)

sbit M2ZZ=P2^2;//電機(jī)控制-正轉(zhuǎn)
sbit M2FZ=P2^3;//電機(jī)控制-反轉(zhuǎn)




uint_long M1_pluse_val,M2_pluse_val;//電機(jī)運轉(zhuǎn)發(fā)出的脈沖數(shù)
uint M1_pluse_val_read,M2_pluse_val_read;//電機(jī)單量脈沖數(shù)--根據(jù)機(jī)械設(shè)計的行程換算存入24C02中的數(shù)據(jù)

uchar x,y,x1,y1;
uchar a,a1,b,b1;
uint m1,yyy,m2,yyy1;


void main(void)
{
                P2=0;//所有電機(jī)不工作
       
                LCD_Init();//LCD初始化
                LCD_ShowString(1,1,"At             ");
                LCD_ShowString(2,1,"Send:         ");
               
                delay(500);
       
                timer0_init();//定時器0初始化
       
                init_Exter0();//外部中斷0初始化
                init_Exter1();//外部中斷1初始化
       
                while(1)
                {
                        if(S1==0) M1ZZ=1;else M1ZZ=0;
                        if(S2==0) M1FZ=1;else M1FZ=0;
                       
                LCD_ShowNum(2,7,yyy,3);
                LCD_ShowNum(2,11,yyy1,3);

                }
}


void timer0() interrupt        1
{
        uint i;
        i++;
        TH0=(65536-46080)/256;
        TL0=(65536-46080)%256;
        if(i==20)
        {
                TR0=0;
                i=0;
                        yyy=m1;
                        yyy1=m2;
//                LCD_ShowNum(2,7,m1,3);
//                LCD_ShowNum(2,11,yyy1,3);
                       
                       
                TR0=1;
        }
}

void Exter0()        interrupt 0       
{
        if(S1==0) {M1_pluse_val++; m1=M1_pluse_val;}
        if(S2==0) {M1_pluse_val--;  m1=M1_pluse_val;}
        m1=(M1_pluse_val/10);

}

void Exter1()        interrupt 2       
{
        M2_pluse_val++;
        m2=(M2_pluse_val/10);
       
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表