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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

個人對單片機中斷程序的理解

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年12月02日   【字體:

開題首先貼上一段練習中遇到的代碼:
/*1:利用定時/計數器T0從P1.0輸出周期為1s的方波,讓發光二極管以1HZ閃爍,設晶振頻率為12MHz。*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_1=P1^0;
uchar time;
void main()
{
time=0;
TMOD=0x01;////設置定時器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0
while(1);//等待中斷產生
}
void T1_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
P1_1=~P1_1;
}
}

hit:
在學習單片機的時候很容易按照C語言編程的格式來理解,程序在打開中斷之后會一直停留在while(1);當中,但在實際上,程序的確會停留在while(1);里,由于開啟了中斷開關而并未關閉,所以T0繼續計數,所以后面一直會有中斷。

過程可以理解為這樣,程序一直在while(1);當中,直到定時器計滿產生中斷;
產生中斷后,執行中斷程序,定時器重新賦值,time自加1;
回到while(1)中,等待下一次中斷,定時器繼續計數。

 

單片機怎么從主函數跳到中斷函數中:
對于單片機的硬件,你熟悉嗎?時鐘和CPU是獨立的,時鐘中斷程序時這樣的:在CPU執行指令時,計數器(計時器)同時在計時,當計時器溢出時,就向CPU申請中斷,如果允許響應中斷,CPU就轉到中斷服務程序執行相關的程序。
單片機的時鐘中斷相應要滿足兩個條件:第一,允許中斷源申請中斷。第二,允許cpu響應中斷。二者缺一不可。 EA=1;//開總中斷
ET0=1;//開定時器0中斷
ET1=1;
TR0=1;//啟動定時器0
TR1=1;
你這些語句,就允許了中斷響應,所以,當你的程序跑起來時,時鐘時間到了,CPU就轉入中斷服務程序了,執行完了再返回主程序。你可以在編譯器中用DEBUG查看執行過程的。如果你用匯編語言寫,就更清楚了,可以看清每一步的操作的。
硬件部分是這樣:在每個機器周期的S5P2,單片機會來采樣,判斷是否有中斷申請。所以一旦時鐘計數溢出,就會轉入中斷服務程序。


這個打個比方吧,你在上課,相當于主程序,這時時間到了,打鈴下課了,你就不讀書了,跑出去玩了。這其實是一樣的道理。你在上課,這和打鈴不相關,并不是你讓打鈴的,學校的時鐘在不停地走,到了時間自動打鈴,這不受你上課的影響的。但是如果你把耳朵堵上了(不允許響應中斷),就是把鈴打碎了你也不知道下課了,所以你就一直讀書。

關閉窗口

相關文章

主站蜘蛛池模板: 久久久亚洲精品视频 | 国产成人免费网站 | 日本a视频 | 成人欧美一区二区三区黑人孕妇 | 成人av在线播放 | 精品人伦一区二区三区蜜桃网站 | 国产精品污www一区二区三区 | 成人在线精品视频 | 日日骚视频 | 精品区一区二区 | 欧美精品综合在线 | 久久激情视频 | 欧美成人精品一区二区男人看 | 狠狠视频 | 99视频在线免费观看 | 欧美中文字幕一区 | 国产欧美一区二区三区在线看 | 国产精品日女人 | 欧美v片| 日韩视频精品在线 | 欧美午夜精品 | 97国产精品 | 国产一区中文字幕 | 日韩不卡一区二区 | 国产在线精品一区二区三区 | 亚洲福利免费 | 99这里只有精品视频 | 四虎最新视频 | 97视频精品| 亚洲一区视频 | 国产日韩欧美中文 | 欧美激情国产日韩精品一区18 | 午夜影院免费体验区 | 国产婷婷| 亚洲精品亚洲人成人网 | 理论片午午伦夜理片影院 | 污视频免费在线观看 | 亚洲成av人影片在线观看 | 先锋资源网 | 日本免费一区二区三区视频 | 羞羞视频在线观看 |