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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STC15库函数上手笔记】3、外部中断

發布時間:2023/12/9 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STC15库函数上手笔记】3、外部中断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 硬知識
    • 外中斷初始化函數
  • 測試
    • main.c
    • Exti.c

STC實驗箱4
IAP15W4K58S4
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


硬知識

摘自《STC庫函數使用參考》

外中斷初始化函數

Ext_Inilize

EXTI_InitTypeDef的定義見于文件"Exti.H"。

typedef struct {u8 EXTI_Mode; u8 EXTI_Polity; u8 EXTL_Interrupt; } EXTI_InitTypeDef;

EXTI_Mode:設置外中斷的工作模式:初始化INT0、INT1時的取值,初始化INT2,INT3.INT4時忽略,固定為下降沿中斷。


EXTI_Polity:中斷的優先級:初始化INT0、INT1時的取值,初始化INT2,INT3,INT4時忽略,固定為低優先級中斷。

EXTI_Interrupt:中斷允許或禁止:

測試

main.c

#include "./Drivers/config.h" #include "./Drivers/delay.h"#include "./Drivers/GPIO.h" #include "./Drivers/Exti.h"void GPIO_config(void) {GPIO_InitTypeDef GPIO_InitStructure; //結構定義GPIO_InitStructure.Mode = GPIO_OUT_PP; //指定IO的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_InitStructure.Pin = GPIO_Pin_6 | GPIO_Pin_7; //指定要初始化的IO, 或操作GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //P1.6、P1.7初始化為推挽輸出GPIO_Inilize(GPIO_P4,&GPIO_InitStructure); //P4.6、P4.7初始化為推挽輸出GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3; //指定要初始化的IO, 或操作GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //P3.2、P3.3初始化為上拉輸入P32 = 1;P33 = 1; }void EXTI_config(void) {EXTI_InitTypeDef EXTI_InitStructure; //結構定義EXTI_InitStructure.EXTI_Mode = EXT_MODE_Fall; //中斷模式, EXT_MODE_RiseFall, EXT_MODE_FallEXTI_InitStructure.EXTI_Polity = PolityLow; //中斷優先級, PolityLow,PolityHighEXTI_InitStructure.EXTI_Interrupt = ENABLE; //中斷允許, ENABLE或DISABLEExt_Inilize(EXT_INT0,&EXTI_InitStructure); //初始化INT0 EXT_INT0,EXT_INT1,EXT_INT2,EXT_INT3,EXT_INT4Ext_Inilize(EXT_INT1,&EXTI_InitStructure); //初始化INT0 EXT_INT0,EXT_INT1,EXT_INT2,EXT_INT3,EXT_INT4 }bit P32_Flag = 0; bit P33_Flag = 0; void main(void) {u8 Dir_Flag = 0;u8 LED_Port = 0;u8 i = 0;GPIO_config();EXTI_config();EA = 1;while(1){if (P32_Flag){delay_ms(20);if (P32 == 0){Dir_Flag = 0;}while (P32 == 0);P32_Flag = 0;}if (P33_Flag){delay_ms(20);if (P33 == 0){Dir_Flag = 1;}while (P33 == 0);P33_Flag = 0;}if (Dir_Flag){LED_Port >>= 1;if ((LED_Port & 0x0f) == 0x00)LED_Port = 0x08;}else{LED_Port <<= 1;if ((LED_Port & 0x0f) == 0x00)LED_Port = 0x01;}P17 = (((~LED_Port) & 0x01) != 0);P16 = (((~LED_Port) & 0x02) != 0);P47 = (((~LED_Port) & 0x04) != 0);P46 = (((~LED_Port) & 0x08) != 0);i = 25;while (P32 && P33 && i--)delay_ms(20);} }

Exti.c

修改Exti.c中的中斷服務函數:

/********************* INT0中斷函數 *************************/ void Ext_INT0 (void) interrupt INT0_VECTOR //進中斷時已經清除標志 {extern bit P32_Flag;P32_Flag = 1; }/********************* INT1中斷函數 *************************/ void Ext_INT1 (void) interrupt INT1_VECTOR //進中斷時已經清除標志 {extern bit P33_Flag;P33_Flag = 1; }

實驗現象同上一個實驗。

總結

以上是生活随笔為你收集整理的【STC15库函数上手笔记】3、外部中断的全部內容,希望文章能夠幫你解決所遇到的問題。

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