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

標題: [求助]PROTUES仿真正常,接硬件不行,大家幫幫忙 [打印本頁]

作者: tangji2002    時間: 2010-12-29 14:56
標題: [求助]PROTUES仿真正常,接硬件不行,大家幫幫忙

附程序,外部中斷不響應,據說是初始化,大家幫忙看看

 

#include<reg51.h>

#define LEDPort P1


unsigned char aucLED_SELECT_01[9]=
    {0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,};
           //方式0,方式1燈開關數組。
unsigned char aucLED_SELECT_23[5]=
    {0xFF,0x7E,0xBD,0xDB,0xE7};
           //方式2,方式3燈開關數組。

unsigned char _i=0;          //數據選擇計數。
           
unsigned char uc_Mode=0;     //模式選擇,默認為模式0。

unsigned char uc_Count=1;     //定時器中斷計數。

unsigned char uc_Delay=1;     //延遲計數,通過改變改數值改變燈狀態延遲時間。
           //燈延遲時間=uc_Dalay*定時器溢出時間。

 

void main()
{             
 TMOD=0x01;        //定時器0模式一。
 TH0=0x3C;
 TL0=0xB0;        //溢出時間:50ms。
 TR0=1;         //定時器0開啟。

 IT0=1;         //外部中斷0下降沿觸發。
 IT1=1;         //外部中斷1下降沿觸發。

 EX0=1;         //外部中斷0開。
 EX1=1;         //外部中斷1開。
 ET0=1;         //定時器0中斷開。
 EA=1;         //總中斷開。

 while(1);
}


//*********************************************************************************************************
//*                            *
//*  ************************************定時器0中斷函數************************************     *
//*                            *
//*<函數功能>:當定時器0溢出時執行此函數,首先執行2個判斷:              *
//*    (1)if判斷是否改變燈的狀態,可用于改變延時時間;            *
//*    (2)switch判斷閃爍模式,根據不同模式對燈進行不同的通斷。          *
//*   最后對定時器TH0,TL0重新賦值,溢出時間為50ms。              *
//*                            *
//*********************************************************************************************************

void vTimer0(void) interrupt 1      
{
 
 if(uc_Count%uc_Delay==0)     //通過此判斷語句來改變延時。,例如:當uc_Delay=6時,定時器          
 {           //溢出5次時燈狀態改變1次。同時uc_Count重新賦值1.否則,uc_Count++
  uc_Count=1;        //等待下一次溢出。因此可以改變延時。
  switch(uc_Mode)
   {
 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式0,燈從上往下依次點亮,不斷循環。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    case 0:     
      if(_i>=8)
       _i=0;
      else _i++;
      LEDPort=aucLED_SELECT_01[_i];
      break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式1,燈從下往上依次點亮,不斷循環。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  
    case 1:    
      if(i<=0)
       i=8;
      else _i--;

      LEDPort=aucLED_SELECT_01[_i];
      break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式2,燈從兩邊往中間依次點亮,不斷循環。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    case 2:        
      if(_i>=4)
       _i=0;
      else _i++;

      LEDPort=aucLED_SELECT_23[_i];
      break; 
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式3,燈從中間往兩邊依次點亮,不斷循環。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    case 3:     
      if(_i<=0)
       _i=4;
      else _i--;

      LEDPort=aucLED_SELECT_23[_i];
      break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<所有等以一定時間間隔同時閃爍。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    case 4:      
      if(LEDPort==0xFF)
       LEDPort=0x00;
      else LEDPort=0xFF;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<其他>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    default:
      break;
   }
  }
  else uc_Count++;

 TH0=0x3C; //重新給定時器賦值。
 TL0=0xB0; //定時時間:50ms。
}

 

 

//*********************************************************************************************************
//*                            *
//*  ************************************外部中斷0中斷函數************************************    *
//*                            *
//* <函數功能>:當外部中斷0產生下降沿信號時執行此函數,將閃燈模式從模式0到4循環切換。        *
//*                            *
//*********************************************************************************************************

void vModeChange(void) interrupt 0
{
 if(uc_Mode>=4)
  uc_Mode=0;
 else uc_Mode++;
}

 

 

//*********************************************************************************************************
//*                            *
//*  ************************************外部中斷1中斷函數************************************    *
//*                            *
//*<函數功能>:當外部中斷1產生下降沿信號時執行此函數,將閃燈時間從50ms,250ms,500ms,750ms循環切換。    *
//*                            *
//*********************************************************************************************************

void vDelayChange(void) interrupt 2
{
 if(uc_Delay>=16)
  uc_Delay=1;
 else uc_Delay+=5;
}


作者: hfbjjs    時間: 2011-1-16 00:33

你的硬件有沒有一個高電平的過程? 如果一直都是低電平,是不能產生下降沿的.

上電后,有沒有把外部中斷端口設置=0? 應該為 1 .

我們都是成年人,最好不要使用軟件模擬的方式來玩單片機.----畢竟硬件投入不是太大.為什么不直接跑硬件仿真呢? ----浪費多少時間? 如果按照飛機票與火車票的差價來算,每小時多少錢?

僅供參考!






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区三区国产 | 精品国产一区探花在线观看 | 黄在线免费观看 | wwww.xxxx免费 | 欧美国产视频一区二区 | 91国产在线播放 | 91精品国产91| 欧美一区二区三区在线看 | a级片在线观看 | 男女羞羞视频免费 | 亚洲欧洲视频 | 欧美激情久久久久久 | 欧美一区二区三区在线 | 国产精品久久777777 | 国产小视频在线 | 一区二区三区免费观看 | 国产一级片免费看 | 在线免费观看视频你懂的 | 国产午夜av片| 日韩有码一区 | 国产免费一级一级 | 亚洲国产成人在线视频 | 在线成人福利 | 国产成人精品一区二区三区在线观看 | 精品国产青草久久久久福利 | 日本黄色大片免费 | 国产超碰人人爽人人做人人爱 | 欧美一区2区三区3区公司 | 黄色欧美大片 | 国产欧美精品一区二区三区 | 先锋资源吧 | 免费国产精品久久久久久 | www国产亚洲精品 | 91精品国产自产精品男人的天堂 | 国产一卡二卡三卡 | 亚洲精品视频在线看 | 日日摸夜夜爽人人添av | 亚洲人成在线播放 | 欧美一区二区三区在线播放 | 亚洲人成人一区二区在线观看 | 亚洲 精品 综合 精品 自拍 |