【Proteus仿真】51单片机外部中断使用

【Proteus仿真】51单片机外部中断使用


  • 🔖Proteus仿真基础实验-定时器使用。
  • 🌿Proteus8.12平台
  • 🌿本实验代码基于VSM Studio,采用SDCC编译器。
  • 🎬仿真演示:
    在这里插入图片描述
    在这里插入图片描述

📝示例一代码

/* Main.c file generated by New Project wizard
 *
 * Created:  2023-5-22
 * Processor: 80C52
 * Compiler:  SDCC for 8051
 */

#include <mcs51reg.h>
#define LED         (P2_0)

__bit INT_FLAG  = 0;



void delayms(unsigned int ms)
{
    unsigned int x;
    unsigned int y;
 
    for (y=ms; y>0; y--)
    {
        for (x=227; x>0; x--)
            ;
    }
}
void led_flash()
{
    LED = !LED;
    delayms(200);
    LED = !LED;
    delayms(200);
	LED = !LED;
	delayms(200);
	LED = !LED;
}

void int0_init()
{
    IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
    EX0 = 1;                        //enable INT0 interrupt
    EA = 1;                         //open global interrupt switch
}

void int0_isr() __interrupt 0  __using 1
{
	INT_FLAG  = 1;	
}

void main(void)
{
	LED = 1;
    int0_init();
    while (1)
    {
	if(INT_FLAG)
	{
		led_flash();
		INT_FLAG  = 0;
	}
    }
}

📚示例一仿真资源

链接: https://pan.baidu.com/s/1pa9ntzzQ1j-e0jWXFGz1nA
提取码: 4av2

📝示例二代码

  • ⚡ 开启外部中断0和外部中断2,由于led闪烁采用了阻塞式延时,所以led和led1不能同时闪烁。
/* Main.c file generated by New Project wizard
 *
 * Created:  2023-5-22
 * Processor: 80C52
 * Compiler:  SDCC for 8051
 */

#include <mcs51reg.h>
#define LED         (P2_0)
#define LED1         (P2_1)

__bit INT0_FLAG  = 0;
__bit INT1_FLAG  = 0;


void delayms(unsigned int ms)
{
    unsigned int x;
    unsigned int y;

    for (y=ms; y>0; y--)
    {
        for (x=227; x>0; x--)
            ;
    }
}

void led_flash()
{
    LED = !LED;
    delayms(200);
    LED = !LED;
    delayms(200);
	LED = !LED;
	delayms(200);
	LED = !LED;
}

void led1_flash()
{
    LED1 = !LED1;
    delayms(200);
    LED1 = !LED1;
    delayms(200);
	LED1 = !LED1;
	delayms(200);
	LED1 = !LED1;
}
void int0_init()
{
    IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
    EX0 = 1;                        //enable INT0 interrupt
	 IT1 = 1;                        //set INT1 int type (1:Falling only 0:Low level)
    EX1 = 1;                        //enable INT1 interrupt
    EA = 1;                         //open global interrupt switch
}

void int0_isr(void) __interrupt 0  __using 1
{
	INT0_FLAG  = 1;	
}

//External interrupt1 service routine
void exint1(void) __interrupt 2     __using 3    //(location at 0013H)
{
    INT1_FLAG  = 1;	
}

void main(void)
{
	LED = 1;
	LED1 = 1;
    int0_init();
    while (1)
    {
	if(INT0_FLAG)
	{
		led_flash();
		INT0_FLAG  = 0;
	}
		if(INT1_FLAG)
	{
		led1_flash();
		INT1_FLAG  = 0;
	}
    }
}

📚示例二资源

链接: https://pan.baidu.com/s/1oQWgQX12ccqFOF8pC6TrnQ
提取码: 32pv
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值