久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

為什么51單片機(jī)中斷后一直卡死在中斷,不會(huì)繼續(xù)往下執(zhí)行,也不會(huì)返回主程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:524819 發(fā)表于 2019-5-15 14:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#include"2.h"


/***************紅外解碼***********************/
unsigned char IR_DAT[4];  
sbit IR=P3^2;           //將IR位定義為P3.2引腳
unsigned int LowTime,HighTime; //儲(chǔ)存高、低電平的寬度  
unsigned char bz;
/************************************************************
函數(shù)功能:對(duì)4個(gè)字節(jié)的用戶(hù)碼和鍵數(shù)據(jù)碼進(jìn)行解碼
說(shuō)明:解碼正確,返回1,否則返回0
出口參數(shù):dat
*************************************************************/
/*****************先知科技******************************

              led顯示驅(qū)動(dòng)程序
                           V1.0-20190512
*******************************************************/


#include<reg52.h>


sbit SI=P2^0;//定義數(shù)據(jù)輸入口
sbit SCK=P2^1;//上升沿時(shí)數(shù)據(jù)寄存器的數(shù)據(jù)移位,a>h
sbit RCK=P2^2;//上升沿時(shí)移位寄存器數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)器

   /**************************************************

        函數(shù)功能:延時(shí)1ms
***************************************************/
void delay1ms()
{
                   unsigned char i,j;       
                 for(i=0;i<10;i++)
                  for(j=0;j<33;j++)
           ;                 
}
/*****************************************************
函數(shù)功能:延時(shí)若干毫秒
入口參數(shù):n
**************************************************/
void delay(unsigned int n)
{
           unsigned int i;
        for(i=0;i<n;i++)
        delay1ms();
}



void Ser_IN(unsigned char DataH,unsigned char DataL)
{
unsigned char i;
for(i=0;i<8;i++)
{
  SCK=0;//現(xiàn)將移位寄存器時(shí)鐘置低
  SI=DataH&0x80;//取數(shù)據(jù)最高位
  DataH<<=1;
  SCK=1;
}
for(i=0;i<8;i++)
{
  SCK=0;//現(xiàn)將移位寄存器時(shí)鐘置低
  SI= DataL&0x80;//取數(shù)據(jù)最高位
   DataL<<=1;
  SCK=1;
}

}
//并行數(shù)據(jù)輸出
void Par_OUT(void)
{
RCK=0;
RCK=1;

}
void dispay_reset1(void)
{

Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);


}




void dispay_reset(void)
{
/**************************************
流水燈檢測(cè)壞點(diǎn)
**************************************/
Ser_IN(0x7f,0xff);//1
Par_OUT();
delay(100);
Ser_IN(0xbf,0xff);//2
Par_OUT();
delay(100);
Ser_IN(0xdf,0xff);//3
Par_OUT();
delay(100);
Ser_IN(0xef,0xff);//4
Par_OUT();
delay(100);
Ser_IN(0xf7,0xff);//5
Par_OUT();
delay(100);
Ser_IN(0xfb,0xff);//6
Par_OUT();
delay(100);
Ser_IN(0xfd,0xff);//7
Par_OUT();
delay(100);
Ser_IN(0xfe,0xff);//8
Par_OUT();
delay(100);

Ser_IN(0xff,0x7f);//9
Par_OUT();
delay(100);

Ser_IN(0xff,0xbf);//10
Par_OUT();
delay(100);

Ser_IN(0xff,0xdf);//11
Par_OUT();
delay(100);

Ser_IN(0xff,0xef);//12
Par_OUT();
delay(100);
Ser_IN(0xff,0xf7);//13
Par_OUT();
delay(100);
Ser_IN(0xff,0xfb);//14
Par_OUT();
delay(100);
Ser_IN(0xff,0xfd);//15
Par_OUT();
delay(100);
Ser_IN(0xff,0xfe);//16
Par_OUT();
delay(100);


Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);

Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);

Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);

Ser_IN(0xff,0xfe);//16
Par_OUT();
delay(100);

Ser_IN(0xff,0xfd);//15
Par_OUT();
delay(100);

Ser_IN(0xff,0xfb);//14
Par_OUT();
delay(100);

Ser_IN(0xff,0xf7);//13
Par_OUT();
delay(100);

Ser_IN(0xff,0xef);//12
Par_OUT();
delay(100);

Ser_IN(0xff,0xdf);//11
Par_OUT();
delay(100);

Ser_IN(0xff,0xbf);//10
Par_OUT();
delay(100);

Ser_IN(0xff,0x7f);//9
Par_OUT();
delay(100);

Ser_IN(0xfe,0xff);//8
Par_OUT();
delay(100);

Ser_IN(0xfd,0xff);//7
Par_OUT();
delay(100);

Ser_IN(0xfb,0xff);//6
Par_OUT();
delay(100);

Ser_IN(0xf7,0xff);//5
Par_OUT();
delay(100);

Ser_IN(0xef,0xff);//4
Par_OUT();
delay(100);

Ser_IN(0xdf,0xff);//3
Par_OUT();
delay(100);

Ser_IN(0xbf,0xff);//2
Par_OUT();
delay(100);
Ser_IN(0x7f,0xff);//1
Par_OUT();
delay(100);


Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);

Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);

Ser_IN(0x00,0x00);         //全部開(kāi)啟
Par_OUT();
delay(100);

Ser_IN(0xff,0xff);         //全部關(guān)閉
Par_OUT();
delay(100);
}


main()
{
while(1)
{        EA=1;        //開(kāi)啟總中斷
   EX0=1;       //開(kāi)外中斷0
ET0=0;       //定時(shí)器T1中斷允許
   IT0=1;       //外中斷的下降沿觸發(fā)  
    TMOD=0x11;   //使用定時(shí)器T1的模式1       
        TR0=0;       //定時(shí)器T0關(guān)閉

dispay_reset();        




if(0x0a==bz)
  {

Ser_IN(bz,bz);
Par_OUT();
}
else
{

dispay_reset1();



}




}
}

/************************************************************
函數(shù)功能:紅外線觸發(fā)的外中斷處理函數(shù)
*************************************************************/
void Int0(void) interrupt 0
  {
  unsigned char i,j;
   unsigned char IR_temp;    //儲(chǔ)存解碼出的數(shù)據(jù)

   EX0=0;//關(guān)閉外中斷0,不在接收二次紅外信號(hào)中斷,只解碼當(dāng)前的紅外
   TH0=0;//定時(shí)器高八位清零
   TL0=0;//定時(shí)器T0低八位清0
   TR0=1;//定時(shí)器開(kāi)啟
   while(IR==0);//等待低電平變?yōu)楦唠娖接?jì)算低電平的時(shí)間
   TR0=0;//關(guān)閉定時(shí)器T0
   LowTime=TH0*256+TL0;//保存低電平的時(shí)間
   TH0=0;
   TL0=0;
   TR0=1;//定時(shí)器清空之后,重新計(jì)算高電平的時(shí)間
       
   while(IR==1);

   TR0=0;//關(guān)閉定時(shí)器
   HighTime=TH0*256+TL0;

    if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700)) //如果是引導(dǎo)碼,就開(kāi)始解碼,否則放棄,引導(dǎo)碼的低電平計(jì)時(shí)
        {
         
          for(i=0;i<4;i++)
          {
           for(j=0;j<8;j++)
           {
           while(IR==0);//低電平不執(zhí)行程序,濾掉低電平,只檢測(cè)高電平
          
           TH0=0;
           TL0=0;        //檢測(cè)到高電平開(kāi)始計(jì)算高電平持續(xù)時(shí)間
           TR0=1;

           while(IR==1);//等待高電平結(jié)束
           TR0=0;//高電平結(jié)束停止計(jì)時(shí)
          
           HighTime=TH0*256+TL0; //計(jì)算高電平的時(shí)間

           IR_temp=IR_temp>>1;

           if((HighTime>420)&&(HighTime<620))   //如果高電平時(shí)間在560微秒左右,即計(jì)數(shù)560/1.085=516次
                                   IR_temp=IR_temp&0x7f;       //(520-100=420, 520+100=620),則該位是0
           if((HighTime>1300)&&(HighTime<1800)) //如果高電平時(shí)間在1680微秒左右,即計(jì)數(shù)1680/1.085=1548次
                                  IR_temp=IR_temp|0x80;      


           }
          
          
                  IR_DAT[i]=IR_temp;//將得到的數(shù)據(jù)保存在數(shù)組中
                dispay_reset1();  
          }

/******************************
if(IR_DAT[2]!=~IR_DAT[3])
{
  bz=0xff;
  EX0=1;
        Ser_IN(0xff,0x00);
  Par_OUT();
return;

}
   else
   {

           bz=IR_DAT[2];
        Ser_IN(bz,bz);
    Par_OUT();
            EX0=1;
                  
           //       
   }

dispay_reset();
return;

   }



  // else
  // {
//         EX0=0;//關(guān)閉外中斷0,不在接收二次紅外信號(hào)中斷,只解碼當(dāng)前的紅外
          
           //dispay_reset1();

             // }
                 *******************************/
}                 
        EX0=1;           
//restart:                  
   }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:632653 發(fā)表于 2019-11-8 20:08 | 只看該作者
中斷服務(wù)函數(shù)里面好像是不能執(zhí)行太多東西的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:394817 發(fā)表于 2019-11-24 10:07 | 只看該作者
我是遇到網(wǎng)上拿來(lái)的紅外中斷出問(wèn)題了,回不去主程序,中斷一直沒(méi)問(wèn)題,后來(lái)把中斷名改正常了  好像也就好了

void exint0() interrupt 0
回復(fù)

使用道具 舉報(bào)

地板
ID:606366 發(fā)表于 2019-11-26 12:23 | 只看該作者
為什么我在程序中并沒(méi)有看到定時(shí)器設(shè)初值這條?
回復(fù)

使用道具 舉報(bào)

5#
ID:649922 發(fā)表于 2019-11-26 14:42 | 只看該作者
中斷執(zhí)行完如果有需求需要加個(gè)return;中斷不要執(zhí)行時(shí)間太長(zhǎng);不然很容易出現(xiàn)預(yù)想不到的問(wèn)題。
回復(fù)

使用道具 舉報(bào)

6#
ID:638447 發(fā)表于 2019-11-26 17:18 | 只看該作者
中斷里面內(nèi)容過(guò)多
回復(fù)

使用道具 舉報(bào)

7#
ID:649818 發(fā)表于 2019-11-26 17:36 | 只看該作者

為什么我在程序中并沒(méi)有看到定時(shí)器設(shè)初值這條?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91视频进入| 精品久久久久久久人人人人传媒 | 欧美日韩一卡 | 欧美xxxx做受欧美 | 日本中文字幕在线观看 | 国产免费一二三区 | 日本三级线观看 视频 | 精品中文字幕在线 | 国户精品久久久久久久久久久不卡 | 午夜免费网 | 91热在线| 91精品国产91久久久久游泳池 | 国产精品美女久久久久aⅴ国产馆 | 色就是色欧美 | 亚洲一区二区三区观看 | 成人h片在线观看 | 中文字幕av在线一二三区 | 日韩毛片播放 | 狠狠躁夜夜躁人人爽天天高潮 | 天天爽天天干 | 国产粉嫩尤物极品99综合精品 | 日韩电影一区二区三区 | 久草视频网站 | 成人在线看片 | 国产精品一区二区视频 | 日本在线视 | 一区二区三区精品在线 | 国产精品mv在线观看 | 久久毛片网站 | 九九热这里| 四虎影院在线观看免费视频 | 久久免费看 | 一区二区三区av夏目彩春 | 毛片久久久 | 精品乱子伦一区二区三区 | 午夜精品久久久久久久久久久久 | 亚洲精品国产成人 | 国产一区二区高清在线 | 日韩久久久久久 | 久久国产区 | 日日夜夜天天 |