久久久久久久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,單片機會來采樣,判斷是否有中斷申請。所以一旦時鐘計數溢出,就會轉入中斷服務程序。


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

關閉窗口

相關文章

主站蜘蛛池模板: 视频一区二区国产 | 亚洲欧美一区二区三区国产精品 | 欧美日韩一区二区三区四区 | 日韩欧美一区二区三区 | 国产精品一区二区欧美黑人喷潮水 | 中文字幕一级毛片 | 国产精品日日做人人爱 | 在线看片福利 | 亚洲一区在线日韩在线深爱 | 蜜臀久久99精品久久久久野外 | 日本视频免费观看 | 日韩欧美高清dvd碟片 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 成人午夜免费福利视频 | 亚洲一区二区三区在线观看免费 | 91免费视频| 国产91丝袜在线播放 | 国产美女久久 | 欧美性成人 | 久久精品亚洲 | 国产日韩欧美二区 | 欧美另类日韩 | 精品国产欧美一区二区 | 天天操网 | 精品久| 欧美亚洲视频在线观看 | 日韩一二区 | 狠狠亚洲 | 国产精品视频免费观看 | 国产精品久久久久aaaa九色 | 日本高清精品 | 在线观看亚洲一区二区 | www.一区二区 | 欧美日韩一区二区三区四区五区 | av手机免费在线观看 | 天堂在线91 | 亚洲精品黄 | www.日韩 | 一区二区三区四区在线 | 欧美自拍视频 | 日韩成人在线观看 |