历史上的今天
返回首页

历史上的今天

今天是:2025年12月26日(星期五)

正在发生

2022年12月26日 | 51单片机外部中断处理源程序

2022-12-26 来源:zhihu

//---------------------------------------------------

#include

//---------------------------------------------------

//重定义I/0引脚名称

sbit led1=P1^1;

sbit led2=P1^2;

sbit led3=P1^3;

sbit led4=P1^4;

sbit P32=P3^2;

//---------------------------------------------------

//全局变量及位标志定义

bit FINT0;

bit FINT1;

bit FT0;

bit FT1;

bit FT2;

unsigned char T0_10ms;

unsigned char T0_50ms;

unsigned char T0_100ms;

//---------------------------------------------------

//固定函数声明

void int_0(); //外部中断0

void int_1(); //外部中断1

void timer_0(); //定时器中断1

void timer_1(); //定时器中断2

void serial_1(); //串行中断1

void serial_2(); //串行中断2

//---------------------------------------------------

//用户函数声明

void initial(); //初始化

//---------------------------------------------------

void main(){

initial();

while(1){

P32=0; //为了使按'取消'、'确定'键能够产生INT0及INT1中断

//led4=0; //上一句等价于此句

if(FINT0){ //中断0来到要做什么事情

FINT0=0;

led1=0; //INT0中断时点亮

led2=0;

led3=0;

led3=0; //可以在此设一个断点

}

if(FINT1){ //中断1来到要做什么事情

FINT1=0;

led1=1; //INT1中断时熄灭

led2=1;

led3=1;

}

if(FT0){

FT0=0;

if(++T0_10ms>30){

T0_10ms=0;

//定时多少做什么事,未初始化里定时器尚未设置

}

}

}

}

//-------------------------------------------------------------------

void initial(){

EA=1; // CPU所有中断开(IE最高位MSB)

EX0=1; // INT0中断开

IT0=0; // INT0低电平触发(为1则为下降沿触发)

EX1=1; // INT1中断开

IT1=0; // INT1低电平触发(为1则为下降沿触发)


return;

}

//-------------------------------------------------------------------

//INT0中断 由P3.2引脚产生

void int_0() interrupt 0 using 0

{

FINT0=1;

}

//-------------------------------------------------------------------

//INT1中断 由P3.3引脚产生

void int_1() interrupt 2 using 1

{

FINT1=1;

}

//-------------------------------------------------------------------

//定时器0中断

void timer_0() interrupt 1 using 2

{

FT0=1;

}

//-------------------------------------------------------------------

//定时器1中断

void timer_1() interrupt 3 using 3

{

FT1=1;

}

//-------------------------------------------------------------------

//串行中断1

void serial_1() interrupt 4

{

}

//-------------------------------------------------------------------

//定时器2中断

void timer_2() interrupt 5

{

FT2=1;

}

//-------------------------------------------------------------------

1. 项目文件夹:

先关闭其它Project,,新建一个Project,, 保存在EXT_C文件夹,此Project包含的

所有源程序文件都放在这个文件夹,统一编辑修改和编译。

2. 仿真芯片选择:

硬件仿真必须选择特定的CPU,软件仿真只需要选择一般的52系列,这里

选择常用的Atmel 89C52

3. 系统初始化文件Startup.A51:

主要是内存清零,模拟堆栈安排等系统初始化操作,有时需要修改这个宏汇编

文件, 这个Project里没有加入这个文件。

4. 单步、全速运行到中断:

编译后可以用仿真器单步查看运行结果,在判断外部中断0或1到来的地方

设置断点,全速运行,如果有外部中断(P3.2/P3.3变低或有一个下降沿),那么

程序就停在设置的断点处。


推荐阅读

史海拾趣

Antenna Factor公司的发展小趣事

Antenna Factor公司最初由几位热衷于无线通信技术的工程师创立。创业初期,他们面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,他们凭借着对技术的执着和不懈的努力,成功开发出了一款具有高性价比的天线产品,并获得了市场的初步认可。这一突破性的产品为公司的发展奠定了坚实的基础。

Bellin Dynamic Systems公司的发展小趣事

随着公司规模的扩大和业务范围的拓展,Bellin Dynamic Systems开始注重品牌建设和市场推广。公司加大了对品牌形象的宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,公司还加强了与媒体和客户的沟通互动,积极传递公司的价值观和企业文化。这些举措有效地提升了Bellin Dynamic Systems在市场上的影响力和竞争力。

AINFO Inc公司的发展小趣事

为了进一步提升技术水平和市场竞争力,AINFO Inc公司积极寻求与国际知名企业的技术合作。通过与国外企业的合作,公司引进了先进的技术和管理经验,提升了自身的研发能力和管理水平。同时,公司也加快了国际化发展的步伐,拓展了海外市场,提升了品牌知名度。

Allied Wire & Cable Inc公司的发展小趣事

为了保持市场竞争力,Allied公司始终注重技术升级和品质提升。公司投入大量资金引进先进的生产设备和技术,不断提高产品的技术含量和附加值。同时,公司还建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控,确保产品的品质和性能达到最高标准。

GHz Technology ( Microsemi )公司的发展小趣事

面对日益严峻的环境问题,Allied公司积极承担社会责任,致力于可持续发展。公司注重环保生产,采用环保材料和工艺,减少对环境的影响。同时,公司还关注未来发展趋势,制定了一系列战略规划,包括加大研发投入、拓展新兴市场、提升品牌影响力等,为公司的未来发展奠定了坚实的基础。

这些故事基于Allied Wire & Cable Inc公司的历史和发展情况构建,旨在展现其在电子行业中的成长和进步。如需更详细的信息,建议查阅公司的官方网站或相关新闻报道。

Hama公司的发展小趣事

在获得多轮融资后,H&D Wireless加快了全球化战略的步伐。公司计划利用融资资金进行全球业务扩张,并发布物联网云服务平台,以支持更多应用程序实现非现金支付和位置追踪服务。此外,H&D Wireless还透露了上市计划,考虑在斯德哥尔摩纳斯达克北欧交易所(Nasdaq First North)寻求上市。这一计划将为公司带来更多的资金支持和市场关注,进一步推动其全球化发展。

问答坊 | AI 解惑

如何实现MSP430远程升级?

如何实现MSP430远程升级? 请参考下面的附件!希望对大家有所帮助!…

查看全部问答>

Stellaris系列驱动库源程序及软件包

lm模拟I2C软件包 lm硬件I2C软件包 SST25VF016B软件包 …

查看全部问答>

请教个很白痴的关于quartus的问题

要是你们觉得很小白也不要不告诉我。。。。本人正在做毕设  边学边做的 我要做语音信号处理,用quartus。。。含燥的信号进行滤波处理。。。。。可是我不知道怎么把信号输入到quartus里。。。 有人能具体告诉我下么。。就是我自己录得语 ...…

查看全部问答>

如何有效利用职场空白期?

透视职场,职场人很少能够从一而终,上一份职业刚刚结束,下一份工作还未正式确定,其实,身处职场难免会由于一些原因而遭遇空白期。专家提醒,职场人求职时切忌刻意遮掩曾经的空白期,诚信就业,从容应对才是正确的做法。     人力资源 ...…

查看全部问答>

51单片机学习笔记之点亮LED

   以前,本来有学习过一段时间的51单片机,但是换工作后一直加班都没时间继续学下去。现在终于有空闲时间了,决定继续学下去,每天至少写一个程序,无论多少。先重温一下以前学过的东西:    单片机最简单和基础的操作就是对 ...…

查看全部问答>

msp430 脉冲信号检测

如何利用msp430f149对外部脉冲信号计数…

查看全部问答>

msp430f5438驱动16位并行DA

前辈们,请教了,用msp430F5438驱动16位并行输入的DA。DA采用的是ANALOG DEVICE的5546芯片,基准电压用MAX6350提高5V参考电压。 请问这个程序怎么编?小弟新上手,求高手指教!…

查看全部问答>

麻烦各位帮我看一下STM32 外部中断,为什么进不去中断。

代码如下: void Exit_Init(void) {         RCC->APB2ENR|=1CRL|=0X00000008;            GPIOA->ODR|=1…

查看全部问答>