單片機兩級中斷嵌套的示例C程序

2021-01-07 電子產品世界

單片機兩級中斷嵌套的示例C程序

本文引用地址:http://www.eepw.com.cn/article/201611/320293.htm

#ifndef __DEMO_4_13_C__
#define __DEMO_4_13_C__
#include

#define _MHZ_ 12 // 設置單片機使用的晶振頻率

void delay10ms(unsigned int count); // 聲明延時函數


void LED_show(unsigned long second);

unsigned char g_count; // 全局變量,timer_int函數使用
unsigned char g_second; // 全局變量,timer_int函數使用

void main()
{
g_count = 0; // 設置全局變量初值
g_second = 0;


TMOD = 0x10; // T1使用定時模式,工作模式1,無門控位
TH1 = 0xD8; // 為T1填入初值,定時時間10ms
TL1 = 0xF0;
TR1 = 1; // 啟動T1
IT0 = 1; // 設置INTR0中斷方式為邊沿觸發方式,負跳變時產生中斷
PT1 = 1; // 設置定時器1中斷為高優先級
ET1 = 1; // 允許定時器1中斷
EX1 = 1; // 允許外部中斷0中斷
EA = 1; // CPU開放中斷

while(1); // 循環等待
}


void timer1_int() interrupt 3 using 3 // T1溢出中斷,使用工作組3
{ // 不同級別的中斷函數使用不同的工作組
TH1 = 0xD8; // 重新填入初值
TL1 = 0xF0;

g_count++;
if(g_count == 100) // 計時滿1s
{
g_count = 0; // 清0
g_second++; // 總秒數增1,溢出時會自動歸0
LED_show(g_second); // LED送顯
}
}


void intr0_int() interrupt 0 using 2 // INTR0中斷,使用工作組2
{
unsigned char tmp;

EA = 0; // 關中斷
P1 = 0xff; // 在讀取P1口數據前,應先對其寄存器置1
tmp = P1; // 讀P1口
EA = 1; // 開中斷

delay10ms(100);

EA = 0; // 關中斷
tmp = ~tmp; // 變量取反
P1 = tmp; // 送P1口
EA = 1; // 開中斷
}


void delay10ms(unsigned int count)
{
unsigned int i, k;
unsigned char j;
unsigned int tmp;
tmp = (int)((100*_MHZ_)/12);

for(i=0; i for(j=0; j<100; j++)
for(k=0; k}

#endif


相關焦點

  • STM32 (CortexM3) 中NVIC(嵌套向量中斷控制)的理解
    何為佔先式優先級(pre-emption priority)    高佔先式優先級的中斷事件會打斷當前的主程序/中斷程序運行—搶斷式優先響應,俗稱中斷嵌套。2.判斷中斷是否會被響應的依據    首先是佔先式優先級,其次是副優先級;    佔先式優先級決定是否會有中斷嵌套;    Reset、NMI、Hard Fault 優先級為負(高於普通中斷優先級)且不可調整。4.
  • 各種單片機中斷程序的寫法
    //////////////////// 下面是PIC單片機中斷的寫法!/324648.htmvoid main(){}void interrupt tt() //中斷服務程序,不用申明{}////////////////////////////////////////// 下面AVR單片機GCC中斷程序的寫法 ///////
  • 51系列單片機學習5—C編程程序語句
    複合語句是允許嵌套的,也是就是在{}中的{}也是複合語句。複合語句在程序運行時,{}中的各行單語句是依次順序執行的。單片機C語言中能將複合語句視為一條單語句,也就是說在語法上等同於一條單語句。對於一個函數而言,函數體就是一個複合語句,也許大家會因此知道複合語句中不單能用可執行語句組成,還能用變量定義語句組成。
  • pic單片機之中斷程序(附實例)
    什麼是中斷程序呢?形象的生活比喻就比如你現在這在看我的文章,突然你的朋友喊你一起去烤地瓜,這時候你就中斷了看文章和朋友烤地瓜去了,烤完地瓜之後你又回來看文章。烤地瓜這件事就好比中斷程序,他中斷了你看文章這件事。在程序方面來說 當CPU在執行一個程序的時候,突然產生了中斷事件CPU就去執行中斷程序了,當執行完成後CPU又回來執行原先的程序。
  • 單片機c語言教程:C51循環語句
    示例如下void main(void){unsigned char a;start: a++;if (a==10) goto end;goto start;end:;}上面一段程序只是說明一下 goto 的使用方法,實際編寫很少使用這樣的手法。
  • 中斷程序和查詢方式的區別
    中斷程序在程序開始定義中斷入口地址,初始化中必須打開中斷允許位,程序運行時不用判斷溢出狀態位,溢出後硬體清零;查詢方式在程序運行時必須判斷溢出狀態位,溢出後須軟體清零。
  • PIC單片機C語言程序設計(4)
    在設計C 語言程序時,常常要根據某些條件以決定程序運行的流向,這時就需要if 語句來實現。任何if語句(包括else 部分),都可當作一條C 語句使用。  格式:if(表達式) 語句1  else 語句2  其中else 為選擇項;即可有、可無的。所以條件語句,可分為兩種;if 語句和if— else 語句。
  • 51單片機基礎剖析(基於C語言)
    在VC 6.0環境下很容易用malloc()來得到一塊RAM,但是由於單片機內部沒有作業系統(如何在51上跑uC/OS-II我以後會寫出來),所以在51上實現動態內存分配就是個難點也是一個重點問題。下面給出代碼,詳細分析大家可以參考求是科技編的《8051系列單片機C程序設計完全手冊》這本書。
  • PIC單片機C語言程序實例
    編者按:為了幫助具有PIC單片機彙編語言知識的技術人員或工程師,快速掌握利用C語言編寫PIC單片機程序的方法,本刊特推出《PIC單片機C語言程序設計》系列連載文章。丈中給出的C語言程序實例,均是可執行的,讀者可以放心引用。      一、彙編語言與C語言      早期的單片機程序多採用彙編語言編寫。
  • PIC單片機基礎知識之一
    而且,因為兩個總線互不相干,所以,程序總線和數據總線可以做得不一樣寬。PIC單片機在設計之初選擇了哈佛結構,並基於程序總線的寬度,發展出了12位,14位和16位指令寬度的單片機系列,分別對應的是PIC低檔系列,PIC16中檔系列,以及PIC18系列單片機。這裡要說明的是,數據總線的寬度始終是8位,所以不管它的指令寬度是多少,它仍然還是8位單片機。
  • PIC單片機C語言程序設計(5)
    在《電子製作》2009年第10期,《PIC單片機C語言程序(1)》的延時函數中,我們已用過後綴運算符i++,大家可以從中體會其用法。  (2)邏輯運算符。  邏輯運算符是基本運算符中的一種。邏輯運算符有:與「&&」、或「||" 、非「!」等3三種。  邏輯運算符&&、||為雙目(兩個量)運算符,!為單目運算符。
  • STM32 (Cortex-M3) 中NVIC(嵌套向量中斷控制)的理解
    何為佔先式優先級(pre-emption priority)高佔先式優先級的中斷事件會打斷當前的主程序/中斷程序運行—搶斷式優先響應,俗稱中斷嵌套。2.何為副優先級(subpriority)在佔先式優先級相同的情況下,高副優先級的中斷優先被響應;在佔先式優先級相同的情況下,如果有低副優先級中斷正在執行, 高副優先級的中斷要等待已被響應的低副優先級中斷執行結束後才能得到響應—非搶斷式響應(不能嵌套)。3.
  • 單片機C語言延時需注意的問題
    但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。  其三:對於要求精確延時時間更長,這時就要採用循環嵌套的方法來實現,因此,循環嵌套的方法常用於達到ms級的延時。對於循環語句同樣可以採用for,do…while,while結構來完成,每個循環體內的變量仍然採用無符號字符變量。
  • 結合單片機學習板學習c語言之流水燈製作--intrins.h頭文件
    本文引用地址:http://www.eepw.com.cn/article/201608/294948.htm  源程序:  /*本程序結合STC89C51使用,晶振12M,中間用到串口中斷子程序是利用STC單片機的自定義ISP下載功能,自定義下載命令是FEH,關於自定義下載請參考《用51單片機就用STC51,手把手教你STC51的ISP
  • S12單片機模塊應用及程序下載調試
    這對用戶程序的空間影響並不大。異步串行口是要用來做與PC通訊服務的,監控程序可以用,應用程式當然也可以使用。     下載用戶程序至片內資源是監控程序的基本功能。清華大學Freescale MCU & DSP應用研發中心開發的基於MC9S12DG128的監控程序代碼小於4KB,起始地址為$F000處,它把$FF80的中斷向量表移到EF80處,順序不變。
  • PIC單片機C語言程序設計(2)
    1.C語言的標識符  所謂標識符,實際上是一些由程序編寫者自定義的名稱,類似於PIC單片機彙編語言中給寄存器(RAM)的命名。數據是實現功能的過程,功能是數據運算(或處理)的結果,沒有數據,C程序就無法實現單片機規定的功能,可見數據在C語言程序中的重要性。  C語言的數據類型,有基本型、構造型、指針型三類。對此,筆者將在使用時逐一介紹。
  • 單片機視頻教程
    :http://www.eepw.com.cn/article/274018.htm一、單片機視頻教程- -銳志51單片機開發板  銳志51單片機開發板視頻教程網址為:http://v.eepw.com.cn/video/playlist/id/4269  是廣大電子愛好者自學51單片機的好去處
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平臺。 C語言是一門面向過程的計算機程式語言,與C++,Java等面向對象的程式語言有所不同。
  • 單片機c語言教程:C51複合語句和條件語句
    複合語句是允許嵌套的,也是就是在{}中的{}也是複合語句。複合語句在程序運行時,{}中的各行單語句是依次順序執行的。單片機C語言中能將複合語句視為一條單語句,也就是說 在語法上等同於一條單語句。對於一個函數而言,函數體就是一個複合語句,也許大家會因 此知道複合語句中不單能用可執行語句組成,還能用變量定義語句組成。
  • 第52節:程序後續升級修改的利器,return語句鮮為人知的用法
    開場白:return語句經常用在帶參數返回的函數中,字面上理解就是返回的意思,因此很多單片機初學者很容易忽略了return語句還有中斷強行退出的功能。利用這個強行退出的功能,在項目後續程序的升級修改上很方便,還可以有效減少if語句的嵌套層數,使程序閱讀起來很簡潔。