日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

07-小蜜蜂单片机中断系统

發布時間:2024/3/13 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 07-小蜜蜂单片机中断系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

中斷相關的基礎概念

內核和外設之間的主要交互方式有兩種:輪詢和中斷。

在執行cpu當前程序時,由于系統中出現了某種急需處理的情況,cpu暫停正在執行的程序,轉而去執行另外一段特殊的程序來處理出現的緊急事務,處理結束后,CPU自動返回到原來暫停的程序中去繼續執行。這種程序在執行過程中由于外界的原因而被中間打斷的情況,成為中斷。

中斷服務函數:內核響應中斷后執行的相應處理程序。
中短向量:中斷服務函數的入口地址。每個中斷源都對應一個固定的入口地址。當內核響應中斷請求時,就會暫停當前的程序執行,然后跳轉到該入口地址執行代碼。

有中斷請求不一定能打斷主程序。

中斷系統


首先將J5處的跳帽接到2 ~ 3 引腳,即S5按鍵接到P32/INT0,S4按鍵接到P33/INT1。定義一個working函數,使L1指示燈不斷閃爍。將P32引腳定義為外部中斷功能,按鍵S5按鍵就會產生外部中斷觸發信號,在中斷響應函數中,點亮L8指示燈,延長一段時間后熄滅,該功能用兩種方式實現:
1-直接在中斷服務函數中延時
2-在中斷服務函數中標志變量,在外部執行延時

#include "reg52.h"sbit L1 = P0^0; sbit L8 = P0^7;void Delay(unsigned int t) {while(t--); }void SelectHC573() {P2 = (P2 & 0x1f )| 0x80; }void Working() {SelectHC573();L1=0;Delay(60000);L1=1;Delay(60000); } //=========================== void Init_INT0() {IT0 = 1; //下降沿觸發EX0=1;//外部中斷使能打開EA=1;//總中斷打開 }void ServiceINT0() interrupt 0 //外部中斷0的中斷號是0 {L8=0;Delay(60000);Delay(60000);Delay(60000);Delay(60000);Delay(60000);Delay(60000);L8=1; } //===========================void main() {while(1){Init_INT0();Working();} }

上面的這個代碼將延時函數放在了中斷服務函數中。
這個的結果是當使L1閃爍時,按下S5,L8亮,但L1可以亮,可以不亮。這取決于按下的時間點。
如果將延時放在中斷服務函數外面 即:

#include "reg52.h"sbit L1 = P0^0; sbit L8 = P0^7;void Delay(unsigned int t) {while(t--); }void SelectHC573() {P2 = (P2 & 0x1f )| 0x80; }void Working() {SelectHC573();L1=0;Delay(60000);L1=1;Delay(60000); } //=========================== void Init_INT0() {IT0 = 1; //下降沿觸發EX0=1;//外部中斷使能打開EA=1;//總中斷打開 }unsigned char stat_int=0; void ServiceINT0() interrupt 0 //外部中斷0的中斷號是0 {stat_int=1; }void LEDINT() {if(stat_int==1){L8=0;Delay(60000);Delay(60000);Delay(60000);Delay(60000);Delay(60000);Delay(60000);L8=1;}stat_int=0; } //===========================void main() { Init_INT0();while(1){Working();LEDINT();} }

上面這個代碼將延時放在了另一個函數中,而中斷服務函數中只有標志變量的改變。
這就使得當有一個中斷進來使標志變量改變時,必須等到working執行完之后(即L1閃爍一次之后),才會檢測變量的值,在決定L8是否點亮。

注意
一般在中斷服務函數中不要寫太多的語句。

總結

以上是生活随笔為你收集整理的07-小蜜蜂单片机中断系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。