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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 62707|回復: 20
收起左側

使用51單片機的中斷功能!(絕對很簡單的教程)

  [復制鏈接]
ID:102668 發表于 2016-1-11 01:54 | 顯示全部樓層 |閱讀模式
大家好,我是電子設計小楊,上次,小編給大家寫了一個液晶顯示1602的程序,其實那個程序看起來雖然很長,但是本身是不難的,只要理解了數據手冊中的內容,按照數據手冊上的時序圖還有要求照著寫下來,很快可以寫出來,不過那僅僅是一個靜態顯示而已,如果要寫一個動態顯示的,方法和數碼管的寫法基本相似,大家可以模仿寫數碼管動態顯示的方法去寫。

好了,廢話不多說,今天小編給大家講講如何來寫51單片機的中斷功能,51單片機中斷源有5個,分別是外部中斷0,外部中斷1,定時器0,定時器1,串行口中斷。
   不管是大學里上課的書本,還是參考書也好,在單片機的書里面都是寫了一系列密密麻麻的知識點,最后就敲個代碼,然后很多初學者從頭學到尾,好像知道怎么寫,但是又不會寫。進來看這篇文章的同伴們,不管您會也好,不會也罷,小編把我當時怎么學中斷的經驗分享給大家,好讓更多的同伴們早日脫離書本,開啟自寫編程時代!!!


好了,我們進入正題,到底什么是中斷??中斷這個過程我們程序員需要去做什么??我們帶著這兩個問題來查找我們當時為什么不會中斷的原因。首先:

1、你想使用的中斷是哪個?選擇相應的序號;
2、你所希望觸發的條件是什么?
3、你希望在中斷之后干什么?

中斷是什么?說白一點就是,比如你正在家里看電視,然后準備用電磁爐煮水來喝茶。水還沒有開的時候當然你還在看電視對不對,等到水開了,當然一般水開了都會有個信號讓你知道,那么你就要想著要關掉電磁爐。這個關掉電磁爐的動作就是所謂的中斷。而關掉電磁爐之后你進而就要喝茶,然后在看電視或者做其它事情,那么中斷以后的這個過程就是我們上面問題的第三點:你希望在中斷之后干什么?
好了,大家也大概明白了什么是中斷了吧?我們不要像書本寫的內容那么復雜,我們來說,怎么樣來讓51單片機執行中斷,然后,有需要的我們再去查書本。
那么,我們如何來寫一個51單片機的中斷呢??
首先,我們在主函數中要有以下代碼:
以外部中斷0為例子:
void main()
{
  EA=1;      //打開中斷總開關,等于1表示打開,等于0表示關閉
  EX0=1;    //打開外部中斷0,如果是外部中斷1則為EX1=1;
  IT0=0;    //選擇觸發方式,0是表示電平觸發,1表示下降沿觸發
  //如果是外部中斷1則為IT1=?
}
接著寫中斷服務函數
void interrupt_0()interrupt 0   //這后面的中斷序號千萬別寫錯
{
      ........................
}
大概就是以上的兩個步驟!
接下來我們來看一個程序代碼:感受一下中斷的魅力!

#include<reg51.h>
#define uchar unsigned char    //宏定義
#define uint unsigned int   
sbit led=P1^0;                         //
void Delay(uint del)    //10毫秒帶參量延時函數   
{
        uint i,j;
        for(i=0; i<del; i++)
        for(j=0; j<1827; j++);
}

void interrupt_0()interrupt 0   //外部中斷0的序號是0
{
  led=~led;                 //將led的狀態取反                 
  delay(10);                //延時10X10=100ms
}
//現在你試試,按一下P3^2的按鍵,看看led有沒有閃一下,注意噢,這是用外部中斷來實現led燈亮滅的噢,雖然也是用按鍵,但是開頭我沒有對任何一個按鍵KEY進行定義噢。
void main()
{
  EA=1;                   //打開總中斷
  EX0=1;                 //打開外部中斷0
  IT0=0;                  //讓外部中斷0用電平觸發方式
while(1);               //讓程序就停在這兒
}

好了,我們這一講就到此結束吧,你們可以把我的程序拷貝回去改一改變成自己想要的中斷操作模式,要是有不懂的地方多翻翻書本,如果還不理解的話可以加小編的微信提問。



評分

參與人數 1黑幣 +8 收起 理由
keneng + 8 贊一個!

查看全部評分

回復

使用道具 舉報

ID:130231 發表于 2017-10-17 19:11 | 顯示全部樓層
delay(10);    跟這  void Delay(uint del)     “delay”與“Delay”要相同才對。注意大小寫。
回復

使用道具 舉報

ID:317676 發表于 2018-4-27 11:48 來自觸屏版 | 顯示全部樓層
樓主想問一下,如果我只是想用串口中斷,是不是就不用設置定時器的初值或是工作方式啥的
回復

使用道具 舉報

ID:318909 發表于 2018-4-29 19:13 | 顯示全部樓層
如果共陰控制一列小燈,需求是按下按鍵進入中斷服務函數以后所有燈都亮,再次按下恢復原狀,那應該怎么處理中斷函數呢
回復

使用道具 舉報

ID:302241 發表于 2018-7-2 21:27 | 顯示全部樓層
學習一個
回復

使用道具 舉報

ID:363696 發表于 2018-7-8 20:15 | 顯示全部樓層
simple799 發表于 2018-4-27 11:48
樓主想問一下,如果我只是想用串口中斷,是不是就不用設置定時器的初值或是工作方式啥的

要設置的,因為串口中斷需要定時器來產生一個時鐘,來產生波特率
回復

使用道具 舉報

ID:374198 發表于 2018-7-19 09:40 | 顯示全部樓層
為啥一定要是P3^2
回復

使用道具 舉報

ID:374198 發表于 2018-7-19 09:42 | 顯示全部樓層
不是要滿足一個條件才能進入中斷的嗎,為什么樓主歷程中沒有給出就可以》?
回復

使用道具 舉報

ID:376237 發表于 2018-8-24 08:23 | 顯示全部樓層
中斷服務函數要放在主函數后面,在前面是大忌
回復

使用道具 舉報

ID:93625 發表于 2018-8-24 09:40 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:387733 發表于 2018-8-25 07:31 | 顯示全部樓層

因為P3^2是外部中斷0的輸入腳,只有這個引腳變化才能產生外部中斷0
回復

使用道具 舉報

ID:387733 發表于 2018-8-25 07:38 | 顯示全部樓層
七九六 發表于 2018-7-19 09:42
不是要滿足一個條件才能進入中斷的嗎,為什么樓主歷程中沒有給出就可以》?

外部中斷進入中斷需要滿足的條件,就是相應的外部中斷引腳電平發生變化,在這里使用的是外部中斷0,相對應的引腳是P3.2,當連接在這個引腳的按鍵被按下時,引腳電平發生變化,因而觸發進入中斷服務程序
回復

使用道具 舉報

ID:387733 發表于 2018-8-25 07:41 | 顯示全部樓層
jiror 發表于 2018-4-29 19:13
如果共陰控制一列小燈,需求是按下按鍵進入中斷服務函數以后所有燈都亮,再次按下恢復原狀,那應該怎么處理 ...

可以設置一個亮燈標志,在按下按鍵進入中斷服務程序后,反轉標志,再根據標志亮燈或者熄燈。
回復

使用道具 舉報

ID:56002 發表于 2018-8-25 10:30 | 顯示全部樓層
樓主,我做了一個51單片機電子時鐘,里面加入了音樂,每當鬧鐘響起時單片機開時唱歌,但顯示屏上的時鐘就停止了,鬧鐘結束時鐘又開始正常走時,請問有什么辦法解決邊放音樂和時鐘顯示正常,謝謝!
回復

使用道具 舉報

ID:318629 發表于 2018-9-10 23:26 | 顯示全部樓層
oplink 發表于 2018-8-25 10:30
樓主,我做了一個51單片機電子時鐘,里面加入了音樂,每當鬧鐘響起時單片機開時唱歌,但顯示屏上的時鐘就停 ...

我也做過類似的,播放音樂的同時1602進行動態顯示,可我用的是while里加了一個for循環就可以了,不知你是用什么方法解決的。
回復

使用道具 舉報

ID:406748 發表于 2019-12-31 15:23 | 顯示全部樓層
主函數和中斷函數中寫的有TH0=....和TL0=....這是什么意思誒
回復

使用道具 舉報

ID:406748 發表于 2019-12-31 15:27 | 顯示全部樓層
1650599047 發表于 2018-9-10 23:26
我也做過類似的,播放音樂的同時1602進行動態顯示,可我用的是while里加了一個for循環就可以了,不知你是 ...

中斷函數和主函數不是運行的時候不是只能有其中一個正在運行嗎
回復

使用道具 舉報

ID:688460 發表于 2020-7-3 06:41 | 顯示全部樓層
好好學習,天天向上!
回復

使用道具 舉報

ID:953405 發表于 2021-7-15 13:34 來自觸屏版 | 顯示全部樓層
樓主 能不能寫個單片機語言給我 P1.0按下執行p2.0輸出半個小時關掉 P1.2按下執行p2.1輸出1個小時關掉    p1.3按下執行P2.2輸出 P1.4按下關掉所有程序 輸出為高電平
回復

使用道具 舉報

ID:953405 發表于 2021-7-15 13:35 來自觸屏版 | 顯示全部樓層
樓主 能不能寫個單片機語言給我 P1.0按下執行p2.0輸出半個小時關掉 P1.2按下執行p2.1輸出1個小時關掉    p1.3按下執行P2.2輸出 P1.4按下關掉所有程序 輸出為高電平
回復

使用道具 舉報

ID:950257 發表于 2021-7-16 11:25 來自觸屏版 | 顯示全部樓層
simple799 發表于 2018-4-27 11:48
樓主想問一下,如果我只是想用串口中斷,是不是就不用設置定時器的初值或是工作方式啥的

需要設置波特率
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费淫片aa视频免费 | 久久久久一区二区 | 久久大陆 | 久久久久久久久淑女av国产精品 | 欧美精品久久久 | 日韩一区二区在线视频 | 免费在线一区二区 | 国产传媒视频在线观看 | 国产精品精品视频一区二区三区 | 国产成人99 | 国产午夜精品久久久久免费视高清 | 一级黄色播放 | 亚洲综合大片69999 | 国产 欧美 日韩 一区 | 国产99久久精品一区二区永久免费 | 国产精品精品视频一区二区三区 | 日韩欧美天堂 | 久久在线看| 亚洲精品一 | 午夜精品 | 夜夜爽99久久国产综合精品女不卡 | 免费视频99 | 色婷婷精品国产一区二区三区 | 喷潮网站| 日韩中文一区二区三区 | 国产高清免费视频 | 7799精品视频天天看 | 国产精品99久久久久久久久久久久 | 日本天天操 | 成人久久久久 | av手机在线免费观看 | 国产福利在线小视频 | 99av成人精品国语自产拍 | 久久成人精品一区二区三区 | 中文字幕av一区 | 99pao成人国产永久免费视频 | 国产精品视频一区二区三区, | 精品一区二区三区在线观看 | 午夜电影网 | 四虎永久影院 | 中文字幕三区 |