51单片机实现外部中断00H-FFH、000-255、0000-1023

外部中断00H-FFH

#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i;
uchar code leddata[]={
    0xC0,  //"0"
    0xF9,  //"1"
    0xA4,  //"2"
    0xB0,  //"3"
    0x99,  //"4"
    0x92,  //"5"
    0x82,  //"6"
    0xF8,  //"7"
    0x80,  //"8"
    0x90,  //"9"
    0x88,  //"A"
    0x83,  //"B"
    0xC6,  //"C"
    0xA1,  //"D"
    0x86,  //"E"
    0x8E,  //"F"
    0x89,  //"H"
    0xC7,  //"L"
    0xC8,  //"n"
    0xC1,  //"u"
    0x8C,  //"P"
    0xA3,  //"o"
    0xBF,  //"-"
};
uchar code ledwei[]={
    0x01,0x02,0x04,0x08,
    0x10,0x20,0x40,0x80
};
void delay(uint ms){
    uint i,j;
    for(i = 0;i < ms; i++)
    for(j = 0;j < 121; j++);
}
void init(){
    EX0 = 1;
    IT0 = 1;
    EA = 1;
}
void display(){
         while(1){
                P2 = ~ledwei[0];
                P0 = leddata[i];
            delay(50);
            P2 = ~ledwei[1];
            P0 = leddata[count];
            delay(50);
            P2 = ~ledwei[2];
            P0 = leddata[16];
            delay(50);
        }
}
void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;

    init();
    while(1){
        display();
    }
}
void int0() interrupt 2{
    count++;
    if(count == 16){
        count = 0;
        i++;
        if(i == 16){
            i = 0;
        }
    }
}

外部终端实现数码管000-255

#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i,j,m;
uchar code leddata[]={
    0xC0,  //"0"
    0xF9,  //"1"
    0xA4,  //"2"
    0xB0,  //"3"
    0x99,  //"4"
    0x92,  //"5"
    0x82,  //"6"
    0xF8,  //"7"
    0x80,  //"8"
    0x90,  //"9"
    0x88,  //"A"
    0x83,  //"B"
    0xC6,  //"C"
    0xA1,  //"D"
    0x86,  //"E"
    0x8E,  //"F"
    0x89,  //"H"
    0xC7,  //"L"
    0xC8,  //"n"
    0xC1,  //"u"
    0x8C,  //"P"
    0xA3,  //"o"
    0xBF,  //"-"
    0xFF,  //??
    0xFF  //???
};
uchar code ledwei[]={
    0x01,0x02,0x04,0x08,
    0x10,0x20,0x40,0x80
};
void delay(uint ms){
    uint i,j;
    for(i = 0;i < ms; i++)
    for(j = 0;j < 121; j++);
}
void init(){
    EX0 = 1;
    IT0 = 1;
    EA = 1;
}
void display(){        

        while(1){
            P2 = ~ledwei[0];
            P0 = leddata[j];
            delay(50);
            P2 = ~ledwei[1];
            P0 = leddata[i];
            delay(50);
            P2 = ~ledwei[2];
            P0 = leddata[count];
            delay(50);
        }
}
void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;

    init();
    while(1)
    {
        display();
    }
}
void int0() interrupt 2{
    count++;
    m++;
    if(m == 256){
        m = 0;
        count = 0;
        i = 0;
        j = 0;
    }
    if(count == 10){
        count = 0;
        i++;
        if(i == 10){
            i = 0;
            j++;
            if(j == 3){
                j = 0;
            }
        }
    }

}

0000-1023

#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i,j,m,n;
uchar code leddata[]={
    0xC0,  //"0"
    0xF9,  //"1"
    0xA4,  //"2"
    0xB0,  //"3"
    0x99,  //"4"
    0x92,  //"5"
    0x82,  //"6"
    0xF8,  //"7"
    0x80,  //"8"
    0x90,  //"9"
    0x88,  //"A"
    0x83,  //"B"
    0xC6,  //"C"
    0xA1,  //"D"
    0x86,  //"E"
    0x8E,  //"F"
    0x89,  //"H"
    0xC7,  //"L"
    0xC8,  //"n"
    0xC1,  //"u"
    0x8C,  //"P"
    0xA3,  //"o"
    0xBF,  //"-"
    0xFF,  //??
};
uchar code ledwei[]={
    0x01,0x02,0x04,0x08,
    0x10,0x20,0x40,0x80
};
void delay(uint ms){
    uint i,j;
    for(i = 0;i < ms; i++)
    for(j = 0;j < 121; j++);
}
void init(){
    EX1 = 1;
    IT1 = 1;
    EA = 1;
}
void display(){        

        while(1){
            P2 = ~ledwei[0];
            P0 = leddata[n];
            delay(20);
            P2 = ~ledwei[1];
            P0 = leddata[j];
            delay(20);
            P2 = ~ledwei[2];
            P0 = leddata[i];
            delay(20);
            P2 = ~ledwei[3];
            P0 = leddata[count];
            delay(20);
        }
}
void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;

    init();
    while(1) {
        display();
    }
}
void int0() interrupt 2{
    count++;
    m++;
    if(m == 1024){
        m = 0;
        count = 0;
        i = 0;
        j = 0;
    }
    if(count == 10){
        count = 0;
        i++;
        if(i == 10){
            i = 0;
            j++;
            if(j == 10){
                j = 0;
                n++;
                if(n == 2){
                    n = 0;
                }
            }
        }
    }

原文地址:https://www.cnblogs.com/weimin1314/p/8260564.html

时间: 2024-08-13 12:50:29

51单片机实现外部中断00H-FFH、000-255、0000-1023的相关文章

智能车学习(十六)&mdash;&mdash;K60单片机EXIT外部中断

一.头文件: #ifndef _EXTI_H_ #define _EXTI_H_ typedef enum exti_cfg { zero_down = 0x08u, //低电平触发,内部下拉 rising_down = 0x09u, //上升沿触发,内部下拉 falling_down = 0x0Au, //下降沿触发,内部下拉 either_down = 0x0Bu, //跳变沿触发,内部下拉 one_down = 0x0Cu, //高电平触发,内部下拉 //用最高位标志上拉和下拉 zero_

嵌入式单片机,外部中断,中断标志位介绍

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil

51单片机实现定时器中断0-F

#include <reg51.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 = 0x94; sfr P0M1 = 0x93; sfr P2M0 = 0x96; sfr P2M1 = 0x95; uint count,i,j; uchar code leddata[] = { 0xC0, //"0" 0xF9, //"1" 0xA4, //"2" 0

嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)

这是一篇阐述怎样对嵌入式SOC外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下面原则: 从需求的角度去理解嵌入式各种软件和硬件模块的作用和组成.并从芯片系统设计的角度去阐述怎样进行控制编程. 前者对于理解复杂的系统(如linux的各个子系统)是非常有效的:后者所讲的是代表一个芯片设计project师的视觉,芯片模块由他负责设计,他对于该模块的控制编程自然是最有发言权的. 笔者

51单片机第五弹---外部中断

写了半天掉线了... 不写了上定义... 什么叫中断 中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去 执行相应的服务处理程序:当服务处理程序运行完毕后,CPU再返回到暂停处继续执行原来的程序. 51单片机的中断 80c51提供有5个中断源,分别为:2个外部中断,2个定时/计数器中断,1个串口发送/接收中断.并且具有2个中断优先级,可以实现2级中断服务程序嵌套. 首先要弄中断设置 ,中断原理图如下: 以 设置INT0为例:I

51单片机中断interrupt……using……

51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器: using 1 是第1组寄存器: using 2 是第2组寄存器: using 3 是第3组寄存器:51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1.RS0位决定的.using 0时设置 RS1=0,RS

51单片机的中断优先级及中断嵌套

说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套.现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了. 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了.实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂. 中断的优先级有两个:查询优先级和执行优先级. 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0 > 定时/计数器0 >

【转】 51单片机中断学习

一.中断的概念    CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生):    CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务):    待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二.中断源 在51单片机中有5个中断源 中断号          优先级                    中断源                    中断入口地址 0               1(最高)   

51单片机的中断嵌套怎么实现呢?

今天在练习51单片机的嵌套中断时,发现了一个奇怪的点,就是中断服务函数在执行的时候,无论优先级的高低,都不能被打断.嗯,就是外部中断0和外部中断1都不能打断定时器0的中断服务函数.(优先级:外部中断0>定时器0>外部中断1). 我本来想开启定时器0,外部中断0和外部中断1,实现中断嵌套. 比如外部中断0到达时,执行中断服务函数Int0,因为它的优先级高,所以当外部中断1和定时器0到达时,不会打断外部中断0的中断服务函数.而当定时器0中断时,外部中断0到达可以打断其执行,外部中断1到达不可打断.