打印
[DemoCode下载]

N79E715的中断应用

[复制链接]
1075|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dongnanxibei|  楼主 | 2017-1-26 19:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technology Corp.
//  E-mail: MicroC-8bit@nuvoton.com
//***********************************************************************************************************
//  Application: Use interrupt service routine
//  Set individual flag of each interrupt to execute ISR .
//
//  Output : P0 show result
//           P1.4 flash when all interrupt pass
//           P2.1 flash when all interrupt pass
//           P0.7 flash when interrupt error
//***********************************************************************************************************

#include <stdio.h>
#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "ISR.h"
#include "Version.h"
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Interrupt_Error(void)
{
    while(1)
    {
        P07 = 1;
        Delay1ms(500);
        P07 = 0;
        Delay1ms(500);
    }
}
//-----------------------------------------------------------------------------------------------------------
void main(void)
{
    uint16_t i;
    InitialUART0_Timer1(9600);                  // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n*==========================================================================");
    printf ("\n*  N79E715 Series Interrupt Sample Code.");
    printf ("\n*==========================================================================\n");
    TR1 = 0;                                    //Stop Timer1 for Interrupt Demo

    IE   = 0x7F;
    EIE  = 0xFF;
    EA   = 1;

    //********************** INT0 Test ***********************
    P0 = 0xFF;
    IT0 = 1;

    set_IE0;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x01)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer0 Test **********************
    P0 = 0xFF;

    set_TF0;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x02)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** INT1 Test ***********************
    P0 = 0xFF;
    IT1 = 1;

    set_IE1;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x03)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer1 Test **********************
    P0 = 0xFF;

    set_TF1;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x04)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** UART0 Test **********************
    P0 = 0xFF;

    set_RI;                              // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x05)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer2 Test **********************
    P0 = 0xFF;

    set_TF2;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode
    /* Check ISR return value */
    if(P0 != ~0x06)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** I2C Test ************************
    P0 = 0xFF;

    set_SI;                              // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x07)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** KBI Test ************************
    P0 = 0xFF;

    set_KBIF0;                           // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x08)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** BOD Test ************************
    P0 = 0xFF;

    set_BOF;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x09)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** SPI Test ************************
    P0 = 0xFF;
                                         // Trigger Interrupt
    set_SPIF;

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0A)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //******************* Watch Dog Test *********************
    P0 = 0xFF;

    set_WDTF;                            // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0B)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** ADC Test ************************/
    P0 = 0xFF;

    set_ADCI;                            // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0C)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //******************** Capture Test **********************
    P0 = 0xFF;

    set_CAPF0;                           // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0D)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** PWM Test ************************
    P0 = 0xFF;

    set_BKF;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0E)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time

    EA = 0;                              // Disable all interrupt
    InitialUART0_Timer1(9600);           // 9600 Baud Rate @ 11.0592MHz
    printf("\nInterrupt Test OK!");
    while(1)
    {
        P14 = 1;
        P21 = 1;
        Delay1ms(500);
        P14 = 0;
        P21 = 0;
        Delay1ms(500);
    }
}
//-----------------------------------------------------------------------------------------------------------
void INT0_ISR(void) interrupt 0          // Vector @  0x03
{
    P0 = 0xFF-1;
    clr_IE0;
}
//-----------------------------------------------------------------------------------------------------------
void Timer0_ISR(void) interrupt 1        // Vector @  0x0B
{
    P0 = 0xFF-2;
    clr_TF0;
}
//-----------------------------------------------------------------------------------------------------------
void INT1_ISR(void) interrupt 2          // Vector @  0x13
{
    P0 = 0xFF-3;
    clr_IE1;
}
//-----------------------------------------------------------------------------------------------------------
void Timer1_ISR(void) interrupt 3        // Vector @  0x1B
{
    P0 = 0xFF-4;
    clr_TF1;
}
//-----------------------------------------------------------------------------------------------------------
void UART0_ISR(void) interrupt 4         // Vector @  0x23
{
    P0 = 0xFF-5;
    clr_RI;
}
//-----------------------------------------------------------------------------------------------------------
void Timer2_ISR(void) interrupt 5        // Vector @  0x2B
{
    P0 = 0xFF-6;
    clr_TF2;
}
//-----------------------------------------------------------------------------------------------------------
void I2C_ISR(void) interrupt 6           // Vector @  0x33
{
    P0 = 0xFF-7;
    clr_SI;
}
//-----------------------------------------------------------------------------------------------------------
void KBI_ISR(void) interrupt 7           // Vector @  0x3B
{
    P0 = 0xFF-8;
    clr_KBIF0;
}
//-----------------------------------------------------------------------------------------------------------
void BOD_ISR(void) interrupt 8           // Vector @  0x43
{
    P0 = 0xFF-9;
    clr_BOF;
}
//-----------------------------------------------------------------------------------------------------------
void SPI_ISR(void) interrupt 9           // Vector @  0x4B
{
    P0 = 0xFF-10;
    clr_SPIF;
}
//-----------------------------------------------------------------------------------------------------------
void WDT_ISR(void) interrupt 10          // Vector @  0x53
{
    P0 = 0xFF-11;
    clr_WDTF;
}
//-----------------------------------------------------------------------------------------------------------
void ADC_ISR(void) interrupt 11          // Vector @  0x5B
{
    P0 = 0xFF-12;
    clr_ADCI;
}
//-----------------------------------------------------------------------------------------------------------
void Capture_ISR(void) interrupt 12      // Vector @  0x63
{
    P0 = 0xFF-13;
    clr_CAPF0;
}
//-----------------------------------------------------------------------------------------------------------
void PWM_Brake_ISR(void) interrupt 14    // Vector @  0x73
{
    P0 = 0xFF-14;
    clr_BKF;
}
//-----------------------------------------------------------------------------------------------------------








沙发
dongnanxibei|  楼主 | 2017-1-26 19:52 | 只看该作者
例程对每一种外部中断都做了演示操作。

使用特权

评论回复
板凳
dongnanxibei|  楼主 | 2017-1-26 19:53 | 只看该作者
同时加入了中断出错时候的处理函数。

使用特权

评论回复
地板
heisexingqisi| | 2017-1-26 20:00 | 只看该作者
看了一遍,基本上所有的中断都被演示了一遍,不仅仅有外部中断。

使用特权

评论回复
5
gejigeji521| | 2017-1-26 20:16 | 只看该作者
void WDT_ISR(void) interrupt 10          // Vector @  0x53
{
    P0 = 0xFF-11;
    clr_WDTF;
}

使用特权

评论回复
6
huangcunxiake| | 2017-1-26 20:34 | 只看该作者
仔细看几个定时器中断,都很像。

使用特权

评论回复
7
wahahaheihei| | 2017-1-27 13:43 | 只看该作者
不懂中断等于不会单片机。

使用特权

评论回复
8
wahahaheihei| | 2017-1-27 13:44 | 只看该作者
学单片机可以这么来:学点灯IO操作,学定时器,学中断,串口。。

使用特权

评论回复
9
yiyigirl2014| | 2017-1-27 14:51 | 只看该作者
最熟悉的就是外部中断和定时器中断了。

使用特权

评论回复
10
dongnanxibei|  楼主 | 2017-1-27 15:01 | 只看该作者
通过中断可以让系统休眠,当发生中断时候唤醒系统

使用特权

评论回复
11
稳稳の幸福| | 2017-1-27 15:34 | 只看该作者
if(P0 != ~0x03)                      // Check ISR return value
        Interrupt_Error();
通过进入中断后判断具体是哪个发生了中断。

使用特权

评论回复
12
玛尼玛尼哄| | 2017-1-27 17:33 | 只看该作者
中断错误后就有个指示灯闪烁

使用特权

评论回复
13
稳稳の幸福| | 2017-1-28 13:02 | 只看该作者
PCON |= SET_BIT0;                    // Enter Idle Mode
设置成空闲模式吧

使用特权

评论回复
14
稳稳の幸福| | 2017-1-30 08:44 | 只看该作者
每一个中断源用了不同的中断地址。

使用特权

评论回复
15
天灵灵地灵灵| | 2017-1-31 19:51 | 只看该作者
支持的中断种类真多

使用特权

评论回复
16
aiwosuoai1992| | 2017-2-4 08:11 | 只看该作者
请问哪里可以买到此单片机的开发板?

使用特权

评论回复
17
643757107| | 2017-2-6 22:23 | 只看该作者
每一个中断源的使用方法都有了

使用特权

评论回复
18
mintspring| | 2017-2-7 13:15 | 只看该作者
非常适合入门学习的例程序开发包。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

201

主题

3587

帖子

16

粉丝