我是靠谱客的博主 饱满乌龟,最近开发中收集的这篇文章主要介绍linux修改寄存器生成中断,3、通过按键S1产生外部中断改变LED1状态(it's 中断-寄存器和中断子程序)...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过按键S1产生外部中断改变LED1状态

1 /****************************************************************************

2 * 文 件 名: main.c

3 * 作 者: Amo [ www.amoMcu.com 阿莫单片机]

4 * 修 订: 2014-04-08

5 * 版 本: 1.0

6 * 描 述: 通过按键S1产生外部中断改变LED1状态

7 ****************************************************************************/

8 #include

9

10 typedef unsigned char uchar;

11 typedef unsigned int uint;

12

13 #define LED1 P1_0 // P1.0口控制LED1

14 #define KEY1 P0_1 // P0.1口控制S1

15

16

17 /****************************************************************************

18 * 名 称: DelayMS()

19 * 功 能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)

20 * 入口参数: msec 延时参数,值越大,延时越久

21 * 出口参数: 无

22 ****************************************************************************/

23 void DelayMS(uint msec)

24 {

25 uint i,j;

26

27 for (i=0; i

28 for (j=0; j<535; j++);

29 }

30

31 /****************************************************************************

32 * 名 称: InitLed()

33 * 功 能: 设置LED灯相应的IO口

34 * 入口参数: 无

35 * 出口参数: 无

36 ****************************************************************************/

37 void InitLed(void)

38 {

39 P1DIR |= 0x01; //P1.0定义为输出口

40 LED1 = 0; //LED1灯灭

41 }

42

43 /****************************************************************************

44 * 名 称: InitKey()

45 * 功 能: 设置KEY相应的IO口,采用中断方式

46 * 入口参数: 无

47 * 出口参数: 无

48 ****************************************************************************/

49 void InitKey()

50 {

51 P0IEN |= 0x2; // P0.1 设置为中断方式 1:中断使能

52 PICTL |= 0x2; //下降沿触发

53 IEN1 |= 0x20; //允许P0口中断;

54 P0IFG = 0x00; //初始化中断标志位

55 EA = 1; //打开总中断

56 }57

58 /****************************************************************************

59 * 名 称: P0_ISR(void) 中断处理函数

60 * 描 述: #pragma vector = 中断向量,紧接着是中断处理程序

61 ****************************************************************************/

62 #pragma vector = P0INT_VECTOR

63 __interrupt void P0_ISR(void)

64 {

65 DelayMS(10); //延时去抖

66 LED1 = ~LED1; //改变LED1状态

67 P0IFG = 0; //清中断标志

68 P0IF = 0; //清中断标志

69 }70

71 /****************************************************************************

72 * 程序入口函数

73 ****************************************************************************/

74 void main(void)

75 {

76 InitLed(); //设置LED灯相应的IO口

77 InitKey(); //设置S1相应的IO口

78 while(1)

79 {

80 }

81 }

5071515a0e6dd3694d08a9afc104bcde.png

中断设置相关:

188cb0e3e67f6211bae7302aff61f899.png

故中断配置如下:

49 void InitKey()

50 {

51 P0IEN |= 0x2; // P0.1 设置为中断方式 1:中断使能

52 PICTL |= 0x2; //下降沿触发

53 IEN1 |= 0x20; //允许P0口中断;

54 P0IFG = 0x00; //初始化中断标志位

55 EA = 1; //打开总中断

56 }

其中断子程序为:

58 /****************************************************************************

59 * 名 称: P0_ISR(void) 中断处理函数

60 * 描 述: #pragma vector = 中断向量,紧接着是中断处理程序

61 ****************************************************************************/

62 #pragma vector = P0INT_VECTOR

63 __interrupt void P0_ISR(void)

64 {

65 DelayMS(10); //延时去抖

66 LED1 = ~LED1; //改变LED1状态

67 P0IFG = 0; //清中断标志

68 P0IF = 0; //清中断标志

69 }

有个问题:难道7~0共8位中断都在这一个中断函数里处理?通过P0IFG区分?

3、通过按键S1产生外部中断改变LED1状态(it's 中断-寄存器和中断子程序)

时间: 08-09

最后

以上就是饱满乌龟为你收集整理的linux修改寄存器生成中断,3、通过按键S1产生外部中断改变LED1状态(it's 中断-寄存器和中断子程序)...的全部内容,希望文章能够帮你解决linux修改寄存器生成中断,3、通过按键S1产生外部中断改变LED1状态(it's 中断-寄存器和中断子程序)...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部