概述
通过按键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 }
中断设置相关:
故中断配置如下:
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 中断-寄存器和中断子程序)...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复